diff --git a/.github/scripts/compare_levm_and_revm_benchmarks.sh b/.github/scripts/compare_levm_and_revm_benchmarks.sh deleted file mode 100644 index d21ebd978b4..00000000000 --- a/.github/scripts/compare_levm_and_revm_benchmarks.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -# This script builds tables with a benchmark comparisson for levm and revm on PR branch and on Main branch -# only for the cases where the difference on mean time is higher than 10%. - -error_margin=0.05 - for f in ../../../benchmark_comparison_results/*; do - file_name="${f##../../../benchmark_comparison_results/}" - file="${file_name%.md}" - awk -F'|' -v file="$file" -v error_margin="$error_margin" ' - /`main_revm_/ { - main_revm_row = $0; - gsub(/±.*/, "", $3); # Remove ± part from $3 position of the row - gsub(/[[:space:]]/, "", $3); # Remove spaces - main_revm = $3 + 0; # Convert to number - } - /`main_levm_/ { - main_levm_row = $0; - gsub(/±.*/, "", $3); - gsub(/[[:space:]]/, "", $3); - main_levm = $3 + 0; - } - /`pr_revm_/ { - pr_revm_row = $0; - gsub(/±.*/, "", $3); - gsub(/[[:space:]]/, "", $3); - pr_revm = $3 + 0; - } - /`pr_levm_/ { - pr_levm_row = $0; - gsub(/±.*/, "", $3); - gsub(/[[:space:]]/, "", $3); - pr_levm = $3 + 0; - } - END { - if (main_revm && main_levm && pr_revm && pr_levm) { - revm_delta = ((main_revm > pr_revm) ? main_revm - pr_revm : pr_revm - main_revm)/(main_revm + pr_revm); - levm_delta = ((main_levm > pr_levm) ? main_levm - pr_levm: pr_levm - main_levm)/(main_levm + pr_levm); - if ((revm_delta > error_margin) || (levm_delta > error_margin)) { - printf "#### Benchmark Results: %s \n", file - print "| Command | Mean [s] | Min [s] | Max [s] | Relative |" - print "|:---|---:|---:|---:|---:|" - print main_revm_row - print main_levm_row - if (revm_delta > error_margin) { - print pr_revm_row - } - if (levm_delta > error_margin) { - print pr_levm_row - } - } - } else { - printf "#### Benchmark Results: %s \n", file - print "No results." - } - } - ' "$f" >> ../../../result.md - echo "#### Benchmark Results: $file" >> ../../../detailed_result.md - cat $f >> ../../../detailed_result.md - done - - if [ ! -s ../../../result.md ]; then - echo "# Benchmark Results Comparison" > ../../../result.md - echo "No significant difference was registered for any benchmark run." >> ../../../result.md - else - sed -i '1i\# Benchmark Results Comparison' ../../../result.md - fi - - echo -e "\n" >> ../../../result.md - echo -e "
\n" >> ../../../result.md - echo -e "Detailed Results\n \n" >> ../../../result.md - cat ../../../detailed_result.md >> ../../../result.md - echo -e "
\n" >> ../../../result.md diff --git a/.github/workflows/pr-main_levm.yaml b/.github/workflows/pr-main_levm.yaml index 7d66abd42c1..52624dc1d18 100644 --- a/.github/workflows/pr-main_levm.yaml +++ b/.github/workflows/pr-main_levm.yaml @@ -228,25 +228,3 @@ jobs: run: | cd crates/vm/levm make test - bench: - name: Benchmarks (LEVM vs REVM) - runs-on: ubuntu-22.04 - - steps: - - name: Checkout sources - uses: actions/checkout@v6 - - name: Setup Rust Environment - uses: ./.github/actions/setup-rust - - - name: Install hyperfine - uses: taiki-e/install-action@v2 - with: - tool: hyperfine@1.16 - - - name: Install solc - uses: ./.github/actions/install-solc - - - name: Run benchmarks - run: | - cd crates/vm/levm - make revm-comparison diff --git a/.github/workflows/pr_perf_levm.yaml b/.github/workflows/pr_perf_levm.yaml deleted file mode 100644 index 02c01ed99d2..00000000000 --- a/.github/workflows/pr_perf_levm.yaml +++ /dev/null @@ -1,119 +0,0 @@ -name: Benchmark LEVM vs REVM - -on: - pull_request: - branches: ["**"] - paths: - - "crates/vm/levm/**" - - ".github/workflows/pr_perf_levm.yaml" - workflow_dispatch: - -permissions: - contents: read - actions: write - issues: write - pull-requests: write - -env: - # Work around frequent libgit2/submodule fetch flakiness in CI. - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - CARGO_NET_RETRY: "10" - -jobs: - benchmark-pr: - name: Benchmark for PR - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v6 - - name: Setup Rust Environment - uses: ./.github/actions/setup-rust - with: - components: rustfmt, clippy - - - name: Build main benchmark - run: | - cd crates/vm/levm - make build-revm-comparison - - name: Upload main benchmark binary - uses: actions/upload-artifact@v6 - with: - name: pr-binary - path: crates/vm/levm/target/release/benchmark - - benchmark-main: - name: Benchmark for Main - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v6 - - name: Setup Rust Environment - uses: ./.github/actions/setup-rust - with: - components: rustfmt, clippy - - - name: Build main benchmark - run: | - cd crates/vm/levm - make build-revm-comparison - - name: Upload main benchmark binary - uses: actions/upload-artifact@v6 - with: - name: main-binary - path: crates/vm/levm/target/release/benchmark - - combine-results: - name: Combine Benchmark Results - runs-on: ubuntu-latest - needs: [benchmark-pr, benchmark-main] - steps: - - name: Checkout - uses: actions/checkout@v6 - - - name: Install hyperfine - uses: taiki-e/install-action@v2 - with: - tool: hyperfine@1.19 - - - name: Install solc - uses: ./.github/actions/install-solc - - - name: Download PR binaries - uses: actions/download-artifact@v6 - with: - name: pr-binary - path: ./pr - - - name: Download main binaries - uses: actions/download-artifact@v6 - with: - name: main-binary - path: ./main - - - name: Run benchmarks - run: | - chmod +x ./main/benchmark - chmod +x ./pr/benchmark - cd crates/vm/levm - make revm-comparison-ci - bash ../../../.github/scripts/compare_levm_and_revm_benchmarks.sh - - - name: Find comment - if: ${{ github.event.pull_request.head.repo.fork != true }} - continue-on-error: true - uses: peter-evans/find-comment@v4 - id: fc - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: "github-actions[bot]" - body-includes: "Benchmark Results Comparison" - - - name: Create or update comment - if: ${{ github.event.pull_request.head.repo.fork != true }} - uses: peter-evans/create-or-update-comment@v5 - with: - comment-id: ${{ steps.fc.outputs.comment-id }} - token: ${{ secrets.GITHUB_TOKEN }} - issue-number: ${{ github.event.pull_request.number }} - body-path: result.md - edit-mode: replace diff --git a/Cargo.toml b/Cargo.toml index 5d3d7f7f806..7411c619a01 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,6 @@ members = [ "tooling/repl", "test", ] -exclude = ["crates/vm/levm/bench/revm_comparison"] resolver = "2" default-members = ["cmd/ethrex"] diff --git a/Makefile b/Makefile index e6629f8bae6..93d6bfbea1a 100644 --- a/Makefile +++ b/Makefile @@ -251,7 +251,6 @@ update-cargo-lock: ## 📦 Update Cargo.lock files cargo tree --manifest-path crates/guest-program/bin/zisk/Cargo.toml cargo tree --manifest-path crates/guest-program/bin/openvm/Cargo.toml cargo tree --manifest-path crates/l2/tee/quote-gen/Cargo.toml - cargo tree --manifest-path crates/vm/levm/bench/revm_comparison/Cargo.toml cargo tree --manifest-path tooling/Cargo.toml cargo tree --manifest-path tooling/ef_tests/state/Cargo.toml @@ -265,6 +264,5 @@ check-cargo-lock: ## 🔍 Check Cargo.lock files are up to date cargo metadata --locked --manifest-path crates/guest-program/bin/zisk/Cargo.toml > /dev/null cargo metadata --locked --manifest-path crates/guest-program/bin/openvm/Cargo.toml > /dev/null cargo metadata --locked --manifest-path crates/l2/tee/quote-gen/Cargo.toml > /dev/null - cargo metadata --locked --manifest-path crates/vm/levm/bench/revm_comparison/Cargo.toml > /dev/null cargo metadata --locked --manifest-path tooling/Cargo.toml > /dev/null cargo metadata --locked --manifest-path tooling/ef_tests/state/Cargo.toml > /dev/null diff --git a/crates/vm/levm/Makefile b/crates/vm/levm/Makefile index a91d08fa146..1582ca7e178 100644 --- a/crates/vm/levm/Makefile +++ b/crates/vm/levm/Makefile @@ -1,4 +1,4 @@ -.PHONY: all test clippy fmt usage lint eth-tests run-evm-ef-tests flamegraph-run-ef-tests samply-run-ef-tests render-benches samply-run-bench +.PHONY: all test clippy fmt usage lint eth-tests run-evm-ef-tests flamegraph-run-ef-tests samply-run-ef-tests all: test clippy fmt ## 🚀 Runs all tests, linter and formatter @@ -23,118 +23,6 @@ run-evm-ef-tests: ## 🏃‍♂️ Run EF Tests cd ../../../tooling/ef_tests/state && \ make run-evm-ef-tests flags="$(flags)" -###### Benchmarks ###### -REPETITIONS := 10000 -REPETITIONS_SLOW := 200 - -BENCH_FACT_ITERATIONS := 57 -BENCH_FACT_REC_ITERATIONS := 57 -BENCH_FIB_ITERATIONS := 57 -BENCH_FIB_REC_ITERATIONS := 15 -BENCH_HASHES_ITERATIONS := 57 -BENCH_BUBBLESORT_ITERATIONS := 100 # Size of the array to sort -BENCH_MINT_ITERATIONS := 500 -BENCH_TRANSFER_ITERATIONS := 500 -BENCH_APPROVAL_ITERATIONS := 500 -BENCH_PUSH_ITERATIONS := 0 # unused, fixed size array to use stack -BENCH_MSTOREBENCH_ITERATIONS := 0 # unused, fixed size array to use stack -BENCH_SSTOREBENCH_ITERATIONS := 0 # unused, fixed size array to use stack - -# For manually testing you could add --show-output to hyperfine -define run_benchmark - mkdir -p ./bench-results - @printf "%s\n" "revm_$(1)" - @target/release/benchmark revm $(1) 1 $($(3)) - @printf "%s\n" "levm_$(1)" - @target/release/benchmark levm $(1) 1 $($(3)) - hyperfine -w 5 -r 10 -N --export-markdown ./bench-results/$(1).md --export-json ./bench-results/$(1).json \ - -n "revm_$(1)" "target/release/benchmark revm $(1) $($(2)) $($(3))" \ - -n "levm_$(1)" "target/release/benchmark levm $(1) $($(2)) $($(3))" - @echo -endef - -define run_benchmark_ci - @printf "%s\n" "main_revm$(1)" - @../../../main/benchmark revm $(1) 1 $($(3)) - @printf "%s\n" "main_levm$(1)" - @../../../main/benchmark levm $(1) 1 $($(3)) - @printf "%s\n" "pr_revm$(1)" - @../../../pr/benchmark revm $(1) 1 $($(3)) - @printf "%s\n" "pr_levm_$(1)" - @../../../pr/benchmark levm $(1) 1 $($(3)) - hyperfine -w 5 -r 10 -N --export-markdown ../../../benchmark_comparison_results/$(1).md \ - -n "main_revm_$(1)" "../../../main/benchmark revm $(1) $($(2)) $($(3))" \ - -n "main_levm_$(1)" "../../../main/benchmark levm $(1) $($(2)) $($(3))" \ - -n "pr_revm_$(1)" "../../../pr/benchmark revm $(1) $($(2)) $($(3))" \ - -n "pr_levm_$(1)" "../../../pr/benchmark levm $(1) $($(2)) $($(3))" - @echo -endef - -compile-contracts: - cd ../../../ && \ - cargo run --package revm_comparison \ - --bin compile \ - --manifest-path crates/vm/levm/bench/revm_comparison/Cargo.toml - -revm-comparison: compile-contracts ## 📊 Run benchmarks of fibonacci and factorial for both REVM and LEVM - $(MAKE) build-revm-comparison - $(call run_benchmark,SstoreBench_no_opt,REPETITIONS_SLOW,BENCH_SSTOREBENCH_ITERATIONS) - $(call run_benchmark,MstoreBench,REPETITIONS,BENCH_MSTOREBENCH_ITERATIONS) - $(call run_benchmark,Fibonacci,REPETITIONS,BENCH_FIB_ITERATIONS) - $(call run_benchmark,FibonacciRecursive,REPETITIONS_SLOW,BENCH_FIB_REC_ITERATIONS) - $(call run_benchmark,Factorial,REPETITIONS,BENCH_FACT_ITERATIONS) - $(call run_benchmark,FactorialRecursive,REPETITIONS,BENCH_FACT_REC_ITERATIONS) - $(call run_benchmark,Push,REPETITIONS,BENCH_PUSH_ITERATIONS) - $(call run_benchmark,ManyHashes,REPETITIONS_SLOW,BENCH_HASHES_ITERATIONS) - $(call run_benchmark,BubbleSort,REPETITIONS_SLOW,BENCH_BUBBLESORT_ITERATIONS) - $(call run_benchmark,ERC20Approval,REPETITIONS_SLOW,BENCH_APPROVAL_ITERATIONS) - $(call run_benchmark,ERC20Transfer,REPETITIONS_SLOW,BENCH_TRANSFER_ITERATIONS) - $(call run_benchmark,ERC20Mint,REPETITIONS_SLOW,BENCH_MINT_ITERATIONS) - -revm-comparison-ci: compile-contracts - mkdir -p ../../../benchmark_comparison_results - $(call run_benchmark_ci,Fibonacci,REPETITIONS,BENCH_FIB_ITERATIONS) - $(call run_benchmark_ci,FibonacciRecursive,REPETITIONS_SLOW,BENCH_FIB_REC_ITERATIONS) - $(call run_benchmark_ci,Factorial,REPETITIONS,BENCH_FACT_ITERATIONS) - $(call run_benchmark_ci,FactorialRecursive,REPETITIONS,BENCH_FACT_ITERATIONS) - $(call run_benchmark_ci,Push,REPETITIONS,BENCH_PUSH_ITERATIONS) - $(call run_benchmark_ci,MstoreBench,REPETITIONS,BENCH_MSTOREBENCH_ITERATIONS) - $(call run_benchmark_ci,SstoreBench_no_opt,REPETITIONS_SLOW,BENCH_SSTOREBENCH_ITERATIONS) - $(call run_benchmark_ci,ManyHashes,REPETITIONS_SLOW,BENCH_HASHES_ITERATIONS) - $(call run_benchmark_ci,BubbleSort,REPETITIONS_SLOW,BENCH_BUBBLESORT_ITERATIONS) - $(call run_benchmark_ci,ERC20Approval,REPETITIONS_SLOW,BENCH_APPROVAL_ITERATIONS) - $(call run_benchmark_ci,ERC20Transfer,REPETITIONS_SLOW,BENCH_TRANSFER_ITERATIONS) - $(call run_benchmark_ci,ERC20Mint,REPETITIONS_SLOW,BENCH_MINT_ITERATIONS) - -render-benches: - python3 ./bench/revm_comparison/create_bench_page.py > report.html - -flamegraph-levm-benchmark: - $(MAKE) flamegraph-levm-bench-generic name=Fibonacci repetitions=$(REPETITIONS) iterations=$(BENCH_FIB_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=FibonacciRecursive repetitions=$(REPETITIONS_SLOW) iterations=$(BENCH_FIB_REC_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=Factorial repetitions=$(REPETITIONS) iterations=$(BENCH_FACT_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=FactorialRecursive repetitions=$(REPETITIONS) iterations=$(BENCH_FACT_REC_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=ManyHashes repetitions=$(REPETITIONS_SLOW) iterations=$(BENCH_HASHES_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=BubbleSort repetitions=$(REPETITIONS_SLOW) iterations=$(BENCH_BUBBLESORT_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=ERC20Approval repetitions=$(REPETITIONS_SLOW) iterations=$(BENCH_APPROVAL_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=ERC20Transfer repetitions=$(REPETITIONS_SLOW) iterations=$(BENCH_TRANSFER_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=ERC20Mint repetitions=$(REPETITIONS_SLOW) iterations=$(BENCH_MINT_ITERATIONS) - $(MAKE) flamegraph-levm-bench-generic name=Push repetitions=$(REPETITIONS_SLOW) iterations=$(BENCH_PUSH_ITERATIONS) - -flamegraph-levm-bench-generic: - mkdir -p flamegraph_levm_benchmark - cargo flamegraph --root --package revm_comparison --bin benchmark --output flamegraph_levm_benchmark/flamegraph_levm_$(name).svg -- levm $(name) $(repetitions) $(iterations) - -build-revm-comparison: - cd bench/revm_comparison && \ - CARGO_TARGET_DIR=../../target \ - cargo build --release --bin benchmark - -build-revm-comparison-debuginfo: - cd bench/revm_comparison && \ - CARGO_PROFILE_RELEASE_DEBUG=1 CARGO_TARGET_DIR=../../target \ - cargo build --release --bin benchmark - ###### Build Client with LEVM ###### EFTEST_DIR := ../../../tooling/ef_tests/state VECTORS_DIR := $(EFTEST_DIR)/vectors @@ -150,11 +38,3 @@ flamegraph-run-ef-tests: ## 🔥 Run EF tests and create a flamegraph per test f samply-run-ef-tests: ## ⚡️ Run EF tests and create a samply profiling file per test folder cd $(EFTEST_DIR) && \ $(MAKE) samply-run-ef-tests - -BENCH ?= * -BENCH_REPS ?= 500 -BENCH_ITERS ?= 57 - -samply-run-bench: ## ⚡️ Runs the provided bench with samply Pass BENCH=Fibonacci to choose the benchmark. - $(MAKE) build-revm-comparison-debuginfo - samply record -r 10000 target/release/benchmark levm $(BENCH) $(BENCH_REPS) $(BENCH_ITERS) diff --git a/crates/vm/levm/bench/revm_comparison/.gitignore b/crates/vm/levm/bench/revm_comparison/.gitignore deleted file mode 100644 index 564de8fc394..00000000000 --- a/crates/vm/levm/bench/revm_comparison/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.bin* -**/*.bin* diff --git a/crates/vm/levm/bench/revm_comparison/Cargo.lock b/crates/vm/levm/bench/revm_comparison/Cargo.lock deleted file mode 100644 index e6bf470f59c..00000000000 --- a/crates/vm/levm/bench/revm_comparison/Cargo.lock +++ /dev/null @@ -1,3850 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "addchain" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e33f6a175ec6a9e0aca777567f9ff7c3deefc255660df887e7fa3585e9801d8" -dependencies = [ - "num-bigint 0.3.3", - "num-integer", - "num-traits", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "alloy-primitives" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" -dependencies = [ - "alloy-rlp", - "bytes", - "cfg-if", - "const-hex", - "derive_more 0.99.20", - "hex-literal", - "itoa", - "k256", - "keccak-asm", - "proptest", - "rand 0.8.5", - "ruint", - "serde", - "tiny-keccak", -] - -[[package]] -name = "alloy-rlp" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc90b1e703d3c03f4ff7f48e82dd0bc1c8211ab7d079cd836a06fcfeb06651cb" -dependencies = [ - "arrayvec", - "bytes", -] - -[[package]] -name = "anyhow" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - -[[package]] -name = "ark-bn254" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-std 0.5.0", -] - -[[package]] -name = "ark-ec" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" -dependencies = [ - "ahash", - "ark-ff 0.5.0", - "ark-poly", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.5", - "itertools 0.13.0", - "num-bigint 0.4.6", - "num-integer", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" -dependencies = [ - "ark-ff-asm 0.3.0", - "ark-ff-macros 0.3.0", - "ark-serialize 0.3.0", - "ark-std 0.3.0", - "derivative", - "num-bigint 0.4.6", - "num-traits", - "paste", - "rustc_version 0.3.3", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm 0.4.2", - "ark-ff-macros 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint 0.4.6", - "num-traits", - "paste", - "rustc_version 0.4.1", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" -dependencies = [ - "ark-ff-asm 0.5.0", - "ark-ff-macros 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "arrayvec", - "digest 0.10.7", - "educe", - "itertools 0.13.0", - "num-bigint 0.4.6", - "num-traits", - "paste", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-asm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" -dependencies = [ - "quote", - "syn 2.0.117", -] - -[[package]] -name = "ark-ff-macros" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" -dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" -dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "ark-poly" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" -dependencies = [ - "ahash", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.5", -] - -[[package]] -name = "ark-serialize" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" -dependencies = [ - "ark-std 0.3.0", - "digest 0.9.0", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-std 0.4.0", - "digest 0.10.7", - "num-bigint 0.4.6", -] - -[[package]] -name = "ark-serialize" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" -dependencies = [ - "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.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "ark-std" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "ark-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "aurora-engine-modexp" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" -dependencies = [ - "hex", - "num", -] - -[[package]] -name = "auto_impl" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "aws-lc-rs" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" -dependencies = [ - "aws-lc-sys", - "untrusted", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" -dependencies = [ - "cc", - "cmake", - "dunce", - "fs_extra", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - -[[package]] -name = "bitcoin-io" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" - -[[package]] -name = "bitcoin_hashes" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" -dependencies = [ - "bitcoin-io", - "hex-conservative", -] - -[[package]] -name = "bitflags" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures 0.3.0", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bls12_381" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" -dependencies = [ - "ff 0.12.1", - "group 0.12.1", - "pairing 0.22.0", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "blst" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" -dependencies = [ - "cc", - "glob", - "threadpool", - "zeroize", -] - -[[package]] -name = "bumpalo" -version = "3.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" - -[[package]] -name = "byte-slice-cast" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" - -[[package]] -name = "bytecheck" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "rancor", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "bytemuck" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -dependencies = [ - "serde", -] - -[[package]] -name = "c-kzg" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" -dependencies = [ - "blst", - "cc", - "glob", - "hex", - "libc", - "once_cell", - "serde", -] - -[[package]] -name = "cc" -version = "1.2.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cmake" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" -dependencies = [ - "cc", -] - -[[package]] -name = "const-hex" -version = "1.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "proptest", - "serde_core", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const_format" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" -dependencies = [ - "const_format_proc_macros", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -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 = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" -dependencies = [ - "convert_case 0.4.0", - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "syn 2.0.117", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "convert_case 0.6.0", - "proc-macro2", - "quote", - "syn 2.0.117", - "unicode-xid", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "educe" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff 0.13.1", - "generic-array", - "group 0.13.0", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "enum-ordinalize" -version = "4.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" -dependencies = [ - "enum-ordinalize-derive", -] - -[[package]] -name = "enum-ordinalize-derive" -version = "4.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "enumn" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "ethbloom" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c321610643004cf908ec0f5f2aa0d8f1f8e14b540562a2887a1111ff1ecbf7b" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-rlp", - "impl-serde", - "tiny-keccak", -] - -[[package]] -name = "ethereum-types" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab15ed80916029f878e0267c3a9f92b67df55e79af370bf66199059ae2b4ee3" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-rlp", - "impl-serde", - "primitive-types 0.13.1", - "uint 0.10.0", -] - -[[package]] -name = "ethrex-blockchain" -version = "22.0.0" -dependencies = [ - "bytes", - "crossbeam", - "ethrex-common", - "ethrex-crypto", - "ethrex-metrics", - "ethrex-rlp", - "ethrex-storage", - "ethrex-trie", - "ethrex-vm", - "rayon", - "rustc-hash", - "thiserror", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "ethrex-common" -version = "22.0.0" -dependencies = [ - "bytes", - "crc32fast", - "ethereum-types", - "ethrex-crypto", - "ethrex-rlp", - "ethrex-trie", - "hex", - "hex-literal", - "hex-simd", - "indexmap", - "lazy_static", - "libc", - "lru", - "once_cell", - "rayon", - "rkyv", - "rustc-hash", - "secp256k1 0.30.0", - "serde", - "serde_json", - "sha2", - "thiserror", - "tracing", -] - -[[package]] -name = "ethrex-crypto" -version = "22.0.0" -dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "aws-lc-rs", - "blst", - "ethereum-types", - "hex-literal", - "k256", - "kzg-rs", - "malachite", - "num-bigint 0.4.6", - "p256", - "ripemd", - "secp256k1 0.30.0", - "sha2", - "thiserror", - "tiny-keccak", -] - -[[package]] -name = "ethrex-levm" -version = "22.0.0" -dependencies = [ - "bytes", - "derive_more 1.0.0", - "ethrex-common", - "ethrex-crypto", - "ethrex-rlp", - "malachite", - "rayon", - "rustc-hash", - "serde", - "strum", - "thiserror", -] - -[[package]] -name = "ethrex-metrics" -version = "22.0.0" -dependencies = [ - "ethrex-common", - "serde", - "serde_json", - "thiserror", - "tracing-subscriber", -] - -[[package]] -name = "ethrex-rlp" -version = "22.0.0" -dependencies = [ - "bytes", - "ethereum-types", - "thiserror", -] - -[[package]] -name = "ethrex-storage" -version = "22.0.0" -dependencies = [ - "anyhow", - "bytes", - "ethrex-common", - "ethrex-crypto", - "ethrex-rlp", - "ethrex-trie", - "fastbloom", - "lru", - "rayon", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "ethrex-trie" -version = "22.0.0" -dependencies = [ - "anyhow", - "bytes", - "crossbeam", - "ethereum-types", - "ethrex-crypto", - "ethrex-rlp", - "hashbrown 0.15.5", - "rayon", - "rkyv", - "rustc-hash", - "serde", - "spin", - "thiserror", -] - -[[package]] -name = "ethrex-vm" -version = "22.0.0" -dependencies = [ - "bytes", - "derive_more 1.0.0", - "dyn-clone", - "ethrex-common", - "ethrex-crypto", - "ethrex-levm", - "ethrex-rlp", - "rayon", - "rustc-hash", - "serde", - "thiserror", - "tracing", -] - -[[package]] -name = "fastbloom" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" -dependencies = [ - "getrandom 0.3.4", - "libm", - "rand 0.9.3", - "siphasher", -] - -[[package]] -name = "fastrand" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" - -[[package]] -name = "fastrlp" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", -] - -[[package]] -name = "fastrlp" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", -] - -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "bitvec", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "ff_derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" -dependencies = [ - "addchain", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[package]] -name = "fixed-hash" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-executor" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" - -[[package]] -name = "futures-macro" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "futures-sink" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - -[[package]] -name = "futures-util" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", -] - -[[package]] -name = "gcd" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" - -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", -] - -[[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", - "wasip2", - "wasip3", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff 0.12.1", - "memuse", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff 0.13.1", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "halo2" -version = "0.1.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a23c779b38253fe1538102da44ad5bd5378495a61d2c4ee18d64eaa61ae5995" -dependencies = [ - "halo2_proofs", -] - -[[package]] -name = "halo2_proofs" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" -dependencies = [ - "blake2b_simd", - "ff 0.12.1", - "group 0.12.1", - "pasta_curves 0.4.1", - "rand_core 0.6.4", - "rayon", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "foldhash 0.1.5", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.2.0", -] - -[[package]] -name = "hashbrown" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-conservative" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - -[[package]] -name = "hex-simd" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7685beb53fc20efc2605f32f5d51e9ba18b8ef237961d1760169d2290d3bee" -dependencies = [ - "outref", - "vsimd", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-codec" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-rlp" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" -dependencies = [ - "rlp 0.6.1", -] - -[[package]] -name = "impl-serde" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" -dependencies = [ - "serde", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.0", - "serde", - "serde_core", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jubjub" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a575df5f985fe1cd5b2b05664ff6accfc46559032b954529fd225a2168d27b0f" -dependencies = [ - "bitvec", - "bls12_381", - "ff 0.12.1", - "group 0.12.1", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2", -] - -[[package]] -name = "keccak" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" -dependencies = [ - "cpufeatures 0.2.17", -] - -[[package]] -name = "keccak-asm" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa468878266ad91431012b3e5ef1bf9b170eab22883503a318d46857afa4579a" -dependencies = [ - "digest 0.10.7", - "sha3-asm", -] - -[[package]] -name = "kzg-rs" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8b4f55c3dedcfaa8668de1dfc8469e7a32d441c28edf225ed1f566fb32977d" -dependencies = [ - "ff 0.13.1", - "hex", - "serde_arrays", - "sha2", - "sp1_bls12_381", - "spin", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - -[[package]] -name = "libc" -version = "0.2.185" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" - -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - -[[package]] -name = "linux-raw-sys" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "lru" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" -dependencies = [ - "hashbrown 0.16.1", -] - -[[package]] -name = "malachite" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec410515e231332b14cd986a475d1c3323bcfa4c7efc038bfa1d5b410b1c57e4" -dependencies = [ - "malachite-base", - "malachite-nz", - "malachite-q", -] - -[[package]] -name = "malachite-base" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c738d3789301e957a8f7519318fcbb1b92bb95863b28f6938ae5a05be6259f34" -dependencies = [ - "hashbrown 0.15.5", - "itertools 0.14.0", - "libm", - "ryu", -] - -[[package]] -name = "malachite-nz" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1707c9a1fa36ce21749b35972bfad17bbf34cf5a7c96897c0491da321e387d3b" -dependencies = [ - "itertools 0.14.0", - "libm", - "malachite-base", - "wide", -] - -[[package]] -name = "malachite-q" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d764801aa4e96bbb69b389dcd03b50075345131cd63ca2e380bca71cc37a3675" -dependencies = [ - "itertools 0.14.0", - "malachite-base", - "malachite-nz", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "memuse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" - -[[package]] -name = "munge" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" -dependencies = [ - "munge_macro", -] - -[[package]] -name = "munge_macro" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint 0.4.6", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint 0.4.6", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "outref" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p3-bn254-fr" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9abf208fbfe540d6e2a6caaa2a9a345b1c8cb23ffdcdfcc6987244525d4fc821" -dependencies = [ - "ff 0.13.1", - "num-bigint 0.4.6", - "p3-field", - "p3-poseidon2", - "p3-symmetric", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "p3-challenger" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42b725b453bbb35117a1abf0ddfd900b0676063d6e4231e0fa6bb0d76018d8ad" -dependencies = [ - "p3-field", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "serde", - "tracing", -] - -[[package]] -name = "p3-dft" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56a1f81101bff744b7ebba7f4497e917a2c6716d6e62736e4a56e555a2d98cb7" -dependencies = [ - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "tracing", -] - -[[package]] -name = "p3-field" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36459d4acb03d08097d713f336c7393990bb489ab19920d4f68658c7a5c10968" -dependencies = [ - "itertools 0.12.1", - "num-bigint 0.4.6", - "num-traits", - "p3-util", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "p3-koala-bear" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1f52bcb6be38bdc8fa6b38b3434d4eedd511f361d4249fd798c6a5ef817b40" -dependencies = [ - "num-bigint 0.4.6", - "p3-field", - "p3-mds", - "p3-poseidon2", - "p3-symmetric", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "p3-matrix" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e9cd136a4095a25c41a9edfdcce2dfae58ef01639317813bdbbd5b55c583" -dependencies = [ - "itertools 0.12.1", - "p3-field", - "p3-maybe-rayon", - "p3-util", - "rand 0.8.5", - "serde", - "tracing", -] - -[[package]] -name = "p3-maybe-rayon" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e524d47a49fb4265611303339c4ef970d892817b006cc330dad18afb91e411b1" - -[[package]] -name = "p3-mds" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f6cb8edcb276033d43769a3725570c340d2ed6f35c3cca4cddeee07718fa376" -dependencies = [ - "itertools 0.12.1", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-symmetric", - "p3-util", - "rand 0.8.5", -] - -[[package]] -name = "p3-poseidon2" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a26197df2097b98ab7038d59a01e1fe1a0f545e7e04aa9436b2454b1836654f" -dependencies = [ - "gcd", - "p3-field", - "p3-mds", - "p3-symmetric", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "p3-symmetric" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1d3b5202096bca57cde912fbbb9cbaedaf5ac7c42a924c7166b98709d64d21" -dependencies = [ - "itertools 0.12.1", - "p3-field", - "serde", -] - -[[package]] -name = "p3-util" -version = "0.3.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec5f0388aa6d935ca3a17444086120f393f0b2f0816010b5ff95998c1c4095e3" -dependencies = [ - "serde", -] - -[[package]] -name = "pairing" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" -dependencies = [ - "group 0.12.1", -] - -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group 0.13.0", -] - -[[package]] -name = "parity-scale-codec" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" -dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "const_format", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "rustversion", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "pasta_curves" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" -dependencies = [ - "blake2b_simd", - "ff 0.12.1", - "group 0.12.1", - "lazy_static", - "rand 0.8.5", - "static_assertions", - "subtle", -] - -[[package]] -name = "pasta_curves" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" -dependencies = [ - "blake2b_simd", - "ff 0.13.1", - "group 0.13.0", - "lazy_static", - "rand 0.8.5", - "static_assertions", - "subtle", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pest" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "primitive-types" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" -dependencies = [ - "fixed-hash", - "impl-codec 0.6.0", - "uint 0.9.5", -] - -[[package]] -name = "primitive-types" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" -dependencies = [ - "fixed-hash", - "impl-codec 0.7.1", - "impl-rlp", - "impl-serde", - "uint 0.10.0", -] - -[[package]] -name = "proc-macro-crate" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proptest" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" -dependencies = [ - "bit-set", - "bit-vec", - "bitflags", - "num-traits", - "rand 0.9.3", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax", - "rusty-fork", - "tempfile", - "unarray", -] - -[[package]] -name = "ptr_meta" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "r-efi" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rancor" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" -dependencies = [ - "ptr_meta", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", -] - -[[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", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.17", -] - -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", -] - -[[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.5", -] - -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "regex-automata" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - -[[package]] -name = "rend" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" -dependencies = [ - "bytecheck", -] - -[[package]] -name = "revm" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a2c336f9921588e50871c00024feb51a521eca50ce6d01494bb9c50f837c8ed" -dependencies = [ - "auto_impl", - "cfg-if", - "dyn-clone", - "revm-interpreter", - "revm-precompile", - "serde", - "serde_json", -] - -[[package]] -name = "revm-interpreter" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a58182c7454179826f9dad2ca577661963092ce9d0fd0c9d682c1e9215a72e70" -dependencies = [ - "revm-primitives", - "serde", -] - -[[package]] -name = "revm-precompile" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc8af9aa737eef0509a50d9f3cc1a631557a00ef2e70a3aa8a75d9ee0ed275bb" -dependencies = [ - "aurora-engine-modexp", - "blst", - "c-kzg", - "k256", - "once_cell", - "revm-primitives", - "ripemd", - "secp256k1 0.29.1", - "sha2", - "substrate-bn", -] - -[[package]] -name = "revm-primitives" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9bf5d465e64b697da6a111cb19e798b5b2ebb18e5faf2ad48e9e8d47c64add2" -dependencies = [ - "alloy-primitives", - "auto_impl", - "bitflags", - "bitvec", - "c-kzg", - "cfg-if", - "derive_more 0.99.20", - "dyn-clone", - "enumn", - "hashbrown 0.14.5", - "hex", - "once_cell", - "serde", -] - -[[package]] -name = "revm_comparison" -version = "0.1.0" -dependencies = [ - "bytes", - "ethrex-blockchain", - "ethrex-common", - "ethrex-crypto", - "ethrex-levm", - "ethrex-storage", - "ethrex-vm", - "hex", - "revm", - "rustc-hash", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rkyv" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a30e631b7f4a03dee9056b8ef6982e8ba371dd5bedb74d3ec86df4499132c70" -dependencies = [ - "bytecheck", - "bytes", - "hashbrown 0.16.1", - "indexmap", - "munge", - "ptr_meta", - "rancor", - "rend", - "rkyv_derive", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8100bb34c0a1d0f907143db3149e6b4eea3c33b9ee8b189720168e818303986f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "rlp" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" -dependencies = [ - "bytes", - "rustc-hex", -] - -[[package]] -name = "rlp" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24e92bb2a83198bb76d661a71df9f7076b8c420b8696e4d3d97d50d94479e3" -dependencies = [ - "bytes", - "rustc-hex", -] - -[[package]] -name = "ruint" -version = "1.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" -dependencies = [ - "alloy-rlp", - "ark-ff 0.3.0", - "ark-ff 0.4.2", - "ark-ff 0.5.0", - "bytes", - "fastrlp 0.3.1", - "fastrlp 0.4.0", - "num-bigint 0.4.6", - "num-integer", - "num-traits", - "parity-scale-codec", - "primitive-types 0.12.2", - "proptest", - "rand 0.8.5", - "rand 0.9.3", - "rlp 0.5.2", - "ruint-macro", - "serde_core", - "valuable", - "zeroize", -] - -[[package]] -name = "ruint-macro" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" - -[[package]] -name = "rustc-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.28", -] - -[[package]] -name = "rustix" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "rusty-fork" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" -dependencies = [ - "fnv", - "quick-error", - "tempfile", - "wait-timeout", -] - -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - -[[package]] -name = "safe_arch" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" -dependencies = [ - "rand 0.8.5", - "secp256k1-sys", -] - -[[package]] -name = "secp256k1" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" -dependencies = [ - "cc", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - -[[package]] -name = "semver-parser" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" -dependencies = [ - "pest", -] - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_arrays" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a16b99c5ea4fe3daccd14853ad260ec00ea043b2708d1fd1da3106dcd8d9df" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "indexmap", - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest 0.10.7", - "keccak", -] - -[[package]] -name = "sha3-asm" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cbb88c189d6352cc8ae96a39d19c7ecad8f7330b29461187f2587fdc2988d5" -dependencies = [ - "cc", - "cfg-if", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - -[[package]] -name = "siphasher" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "slop-algebra" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733912d564a68ff209707e71fdc517d4ff82d4362b6a409f6a8241dfcb7a576a" -dependencies = [ - "itertools 0.14.0", - "p3-field", - "serde", -] - -[[package]] -name = "slop-bn254" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a71b23ede427299e139fb822c5d0ea8fb931dc297eba0c6e2f30f774c04ebc81" -dependencies = [ - "ff 0.13.1", - "p3-bn254-fr", - "serde", - "slop-algebra", - "slop-challenger", - "slop-poseidon2", - "slop-symmetric", - "zkhash", -] - -[[package]] -name = "slop-challenger" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e4993210936ab317c0d56ee8257e1cdfe6c2fae4df1e158737f034e21d45f9" -dependencies = [ - "futures", - "p3-challenger", - "serde", - "slop-algebra", - "slop-symmetric", -] - -[[package]] -name = "slop-koala-bear" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8986e94b9a43d58fc8ce5bf111b0985479ab888ced923e3052fb19943f7859b4" -dependencies = [ - "lazy_static", - "p3-koala-bear", - "serde", - "slop-algebra", - "slop-challenger", - "slop-poseidon2", - "slop-symmetric", -] - -[[package]] -name = "slop-poseidon2" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b06e4a24cba104a0a39740eedd97e60e8896926cc38e6a58d5866cc9811affa" -dependencies = [ - "p3-poseidon2", -] - -[[package]] -name = "slop-primitives" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0b66701c82f6aab97f4990b5d9ed7463beb5b5042dbe5eda5f6c71a6207b35" -dependencies = [ - "slop-algebra", -] - -[[package]] -name = "slop-symmetric" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d159948b924fd00f280064d7a049e43dceb2f26067f32fb99570d3169969ee" -dependencies = [ - "p3-symmetric", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "sp1-lib" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f179ca7ad5d0d0ca36356ef2c4851eea02226cd409e4b414e4379d79582f11" -dependencies = [ - "bincode", - "serde", - "sp1-primitives", -] - -[[package]] -name = "sp1-primitives" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bda0eaba853f3c162e6b62dc8eb25f25100ee0792f59919ef905811809e81e5" -dependencies = [ - "bincode", - "blake3", - "elf", - "hex", - "itertools 0.14.0", - "lazy_static", - "num-bigint 0.4.6", - "serde", - "sha2", - "slop-algebra", - "slop-bn254", - "slop-challenger", - "slop-koala-bear", - "slop-poseidon2", - "slop-primitives", - "slop-symmetric", -] - -[[package]] -name = "sp1_bls12_381" -version = "0.8.0-sp1-6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23e41cd36168cc2e51e5d3e35ff0c34b204d945769a65591a76286d04b51e43" -dependencies = [ - "cfg-if", - "ff 0.13.1", - "group 0.13.0", - "pairing 0.23.0", - "rand_core 0.6.4", - "sp1-lib", - "subtle", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "substrate-bn" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" -dependencies = [ - "byteorder", - "crunchy", - "lazy_static", - "rand 0.8.5", - "rustc-hex", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" -dependencies = [ - "fastrand", - "getrandom 0.4.2", - "once_cell", - "rustix", - "windows-sys", -] - -[[package]] -name = "thiserror" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinyvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c" -dependencies = [ - "pin-project-lite", - "tokio-macros", -] - -[[package]] -name = "tokio-macros" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml_datetime" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.25.11+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" -dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" -dependencies = [ - "winnow", -] - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "uint" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-segmentation" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "uuid" -version = "1.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vsimd" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" - -[[package]] -name = "wait-timeout" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" -dependencies = [ - "libc", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.2+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" -dependencies = [ - "wit-bindgen", -] - -[[package]] -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 = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.118" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.118" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.118" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.117", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.118" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" -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", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver 1.0.28", -] - -[[package]] -name = "wide" -version = "0.7.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" -dependencies = [ - "bytemuck", - "safe_arch", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "winnow" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-bindgen" -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", - "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", - "indexmap", - "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", - "indexmap", - "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 = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver 1.0.28", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zkhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4352d1081da6922701401cdd4cbf29a2723feb4cfabb5771f6fee8e9276da1c7" -dependencies = [ - "ark-ff 0.4.2", - "ark-std 0.4.0", - "bitvec", - "blake2", - "bls12_381", - "byteorder", - "cfg-if", - "group 0.12.1", - "group 0.13.0", - "halo2", - "hex", - "jubjub", - "lazy_static", - "pasta_curves 0.5.1", - "rand 0.8.5", - "serde", - "sha2", - "sha3", - "subtle", -] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/crates/vm/levm/bench/revm_comparison/Cargo.toml b/crates/vm/levm/bench/revm_comparison/Cargo.toml deleted file mode 100644 index dfba7efc963..00000000000 --- a/crates/vm/levm/bench/revm_comparison/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "revm_comparison" -version = "0.1.0" -edition = "2024" -authors = ["LambdaClass"] -license = "MIT OR Apache-2.0" - -[workspace] - -[lib] -name = "revm_comparison" -path = "src/lib.rs" - -[dependencies] -ethrex-levm = { path = "../../" } -ethrex-vm = { path = "../../.." } -ethrex-common = { path = "../../../../common" } -ethrex-crypto = { path = "../../../../common/crypto" } -ethrex-storage = { path = "../../../../storage" } -ethrex-blockchain = { path = "../../../../blockchain" } -rustc-hash = "2.1.1" -hex = "0.4.3" -bytes = { version = "1.6.0", features = ["serde"] } - -revm = "9.0.0" - -[[bin]] -name = "compile" -path = "src/compile.rs" - -[[bin]] -name = "benchmark" -path = "src/benchmark.rs" diff --git a/crates/vm/levm/bench/revm_comparison/README.md b/crates/vm/levm/bench/revm_comparison/README.md deleted file mode 100644 index 81568f82962..00000000000 --- a/crates/vm/levm/bench/revm_comparison/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Benchmarks -This README explains how to run benchmarks to compare the performance of `levm` and `revm` when running different contracts. The benchmarking tool used to gather performance metrics is [hyperfine](https://github.com/sharkdp/hyperfine), and the obtained results will be included for reference. - -To run the benchmarks (from `levm`'s root): - -```bash -make revm-comparison -``` - -Note that first you will need to install the solidity compiler -On mac you can use homebrew: - -```bash -brew install solidity -``` - -For other installation methods check out the [official solidity installation guide](https://docs.soliditylang.org/en/latest/installing-solidity.html) - -## Factorial -This program computes the nth factorial number, with n passed via calldata. We chose 1000 as n and ran the program on a loop 100,000 times. - -These are the obtained results: - -### MacBook Air M1 (16 GB RAM) -| | Mean [s] | Min [s] | Max [s] | Relative | -|--------|---------------|---------|---------|-------------| -| `revm` | 6.719 ± 0.047 | 6.677 | 6.843 | 1.00 | -| `levm` | 8.283 ± 0.031 | 8.244 | 8.349 | 1.23 ± 0.01 | - -## Fibonacci -This program computed the nth Fibonacci number, with n passed via calldata. Again, we chose 1000 as n and ran the program on a loop 100,000 times. - -These are the obtained results: - -### MacBook Air M1 (16 GB RAM) -| | Mean [s] | Min [s] | Max [s] | Relative | -|--------|---------------|---------|---------|-------------| -| `revm` | 6.213 ± 0.029 | 6.169 | 6.253 | 1.00 | -| `levm` | 8.303 ± 0.094 | 8.204 | 8.498 | 1.33 ± 0.02 | - - - -Additional Notes: -- As it is done now, contracts should have the Benchmark public function that expects a `uint256`. diff --git a/crates/vm/levm/bench/revm_comparison/contracts/BubbleSort.sol b/crates/vm/levm/bench/revm_comparison/contracts/BubbleSort.sol deleted file mode 100644 index ef3b9f5d148..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/BubbleSort.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract BubbleSort { - uint256[] public numbers; - - function Benchmark(uint256 amount) public returns (uint8 result) { - // Fill array with random numbers - for (uint256 i = 0; i < amount; i++) { - numbers.push(uint256(keccak256(abi.encodePacked(block.timestamp, block.prevrandao, i))) % 100); - } - uint256 n = numbers.length; - for (uint256 i = 0; i < n - 1; i++) { - for (uint256 j = 0; j < n - i - 1; j++) { - if (numbers[j] > numbers[j + 1]) { - (numbers[j], numbers[j + 1]) = (numbers[j + 1], numbers[j]); - } - } - } - // Ensure the array is sorted - for (uint256 i = 0; i < n - 1; i++) { - require(numbers[i] <= numbers[i + 1]); - } - return 0; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/Factorial.sol b/crates/vm/levm/bench/revm_comparison/contracts/Factorial.sol deleted file mode 100644 index ccb24be7244..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/Factorial.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract Factorial { - function Benchmark(uint256 n) public pure returns (uint256 result) { - if (n == 0 || n == 1) { - return 1; - } - - result = 1; - for (uint256 i = 2; i <= n; i++) { - // Check for overflow - if (result > (type(uint256).max / i)) { - return type(uint256).max; - } else { - result *= i; - } - } - - return result; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/FactorialRecursive.sol b/crates/vm/levm/bench/revm_comparison/contracts/FactorialRecursive.sol deleted file mode 100644 index d8ab35e0945..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/FactorialRecursive.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract FactorialRecursive { - function Benchmark(uint256 n) public view returns (uint256) { - // Base cases - if (n == 0 || n == 1) { - return 1; - } - - // Recursive call via external function - uint256 rec = this.Benchmark(n - 1); - - // Check for overflow - if (rec > (type(uint256).max / n)) { - return type(uint256).max; - } - - return n * rec; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/Fibonacci.sol b/crates/vm/levm/bench/revm_comparison/contracts/Fibonacci.sol deleted file mode 100644 index 42db48d69ad..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/Fibonacci.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract Fibonacci { - function Benchmark(uint256 n) public pure returns (uint256 result) { - if (n <= 1) return n; - - uint256 a = 0; - uint256 b = 1; - - for (uint256 i = 2; i <= n; i++) { - // Check for overflow - if (b > (type(uint256).max - a)) { - return type(uint256).max; - } - (a, b) = (b, a + b); - } - - result = b; - return result; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/FibonacciRecursive.sol b/crates/vm/levm/bench/revm_comparison/contracts/FibonacciRecursive.sol deleted file mode 100644 index bcd5c728f06..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/FibonacciRecursive.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract FibonacciRecursive { - function Benchmark(uint256 n) public view returns (uint256 result) { - if (n <= 1) return n; - - uint256 rec = this.Benchmark(n - 1) + this.Benchmark(n - 2); - - // Check for overflow - if (rec > (type(uint256).max / n)) { - return type(uint256).max; - } - - result = rec; - return result; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/ManyHashes.sol b/crates/vm/levm/bench/revm_comparison/contracts/ManyHashes.sol deleted file mode 100644 index 778b5701b29..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/ManyHashes.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract ManyHashes { - function Benchmark(uint256 n) external pure returns (bytes32 result) { - result = bytes32(0); - for (uint256 i = 0; i < n; i++) { - result = keccak256(abi.encodePacked(i)); - } - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/MstoreBench.sol b/crates/vm/levm/bench/revm_comparison/contracts/MstoreBench.sol deleted file mode 100644 index 69dd2a6a095..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/MstoreBench.sol +++ /dev/null @@ -1,1010 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract MstoreBench { - function Benchmark(uint256 _input) public pure returns (uint256 result) { - assembly { - mstore(0x80, 0x44Cb6cFfBb8f77fA5Cdc24D2c1F158F6A1Fe95ab1F2F4E8d56BFaE5Caed4FdDf) - mstore(0xa0, 0xC488ee04a7cf35FEAe1FdCcab33DFd3e512CFaB98e97E2Ea34a50F82a7bF5DA5) - mstore(0xc0, 0xFdcab037fd1B2Ee0EFa31FeCC2ebf078195f7DF01BA46bFc445CFfA8BCdbB1BC) - mstore(0xe0, 0x1F001886dAF6DafCBb30c2A2aAD48cA12a2634fC10E1c9eE4e8bb66faDc2cBdC) - mstore(0x100, 0xdB21B6Cd5B0DFdFD42F7cbbfA8D4FBF3b07EFF2EaBAEe045D17442Fd7EbBbb73) - mstore(0x120, 0xCd72CFD0EEb9050F004Ce0dD3B3EfF6ffB8CDF64d5C01CbdDFCa2C0FcEB4C8DC) - mstore(0x140, 0xC1Fa719CBceb604fdDed941AA03C483Bb68F7272Eb4b61359dcFB6a9a4a6eEc6) - mstore(0x160, 0xCD3bEe8209AaAeB1a9b6DCe912D5CEbc6c3CFeb68D581Cf5690aDca0a7BfF452) - mstore(0x180, 0xCDAFeeAAe8DdB32964C17EfB635bD10914eb79a2A668E0fd8FCe8Ae98f1cc147) - mstore(0x1a0, 0xe522AbAF2105fbAB0fc97357Bc7Eb0a9Ae53b3046fBDfb2CA9C2AAC43c6ab725) - mstore(0x1c0, 0x2e8bb3d7ba2d85EbCbBa401FAEcf18E2c01dCBec3bEeCC7d9034c74Cc66F0BD9) - mstore(0x1e0, 0x21ebcF63a7aCAe1a3D0EADbafA69EFAFf7Dd61eC9C51fCd0fc3B2FF435d24Cb4) - mstore(0x200, 0xd5bE4b8D2D870B3656eB5b30D4617F4c9bE202EF2BBbFefcF9fD45CBf57CEF86) - mstore(0x220, 0xa7F66b98ebafEb991B9A6A947c929064AA25C91832198fe46e631a2F3492aDeE) - mstore(0x240, 0xAC0De7d72Ea816cbBbCcefdF4aDA1dD42aB618DdFe2a303BFA9CCEDC3fE0637D) - mstore(0x260, 0xF9A9ccdC080Ffe4b6cAFBc7965BDDe8CAebC87c47fB3F496Dd986BFA43158dB8) - mstore(0x280, 0xE2DF1a8503aC9F33cD6F4Bd5EF7AAcCBCFe4C12b087183DBd5e18e3822E57f8d) - mstore(0x2a0, 0x641FCc4b379FeBAE84b0a07f207eFdfc5B3D80cBb9bf1afDB5Ae1e7bccDcFAa3) - mstore(0x2c0, 0x0b70739badcE9C4359e49D4fFc906756DEaB6bFD17C5f60899CAFADE6cdee9B1) - mstore(0x2e0, 0xeCdf4bB8A5dd00E778fDa6e8BDbAAAfeAdeCeAc2403E8Ce2eaCBaAFaF3bF5CAF) - mstore(0x300, 0x0C91C74fAA84EaeBF9Eb8d8Cb5eDcb2b54e4C8e771D186DFef1b663AC3f7F264) - mstore(0x320, 0xccE03B1f3a2a9C85BdBeBE7bd6b1745a4796BdbF402afFE4CAA9d1eA1e23dd0b) - mstore(0x340, 0x28a66A2cDCA0cE29eA2c7C7e2DFa259aD0e32BaB4a7E7952bc2B2BdaAf4bDeDc) - mstore(0x360, 0x5d6dc6A4e1EBB79d3d6dDafb7d78d0CaddAb5b2E72Aca88Af04ADfaeef5a2Ff5) - mstore(0x380, 0x7EbCe0Ae5Ae8d6B8C5FdC107E987a8D3aFfaA2ec09050Ba4bAbd7B65A46f1084) - mstore(0x3a0, 0x86cC621B683CD29Bc7EA9fa46d522043b8e2A3E8b90cbbD6914d32C31a4A8323) - mstore(0x3c0, 0xdC82Dbf2B3CB0fC841f2A9f9eCb1b251C5F6Cc0555AEd7CfE7EfDaCDC37CeeEE) - mstore(0x3e0, 0x4D2fb654bb3E4cCD7e2c01bBeeF3dDEC2c9bad35f3CFAcAACB7eCe3bA1FE9CB7) - mstore(0x400, 0xbDEaCcbeFB6554D2638C6dF1f553F968e9729f6397ed37dC6fDa0bE3C6c60B2B) - mstore(0x420, 0x5Da9592f965052e2EE2414EB3afBAFDCf9692b3D0451beeaE197DC185c6bdF71) - mstore(0x440, 0xae9aab8FF77bF8f2bc233eEE6422Aa01EDED5888aeBaaBaA9E0aFa2268Bd15fA) - mstore(0x460, 0x5a58aF5BAac43F1aADD534A4f9E6cdD536BCA8BCE22413C1aCFe9C7C3C0d8A8b) - mstore(0x480, 0x0bFCb9aaFedB446C2e639acF8f1Ff2aCbA0AefE0E0e7fd58CDcdcd9872b958da) - mstore(0x4a0, 0xD649Da1205EdB8f78a5B1AcC7A3df9dc77D56DBEC462a84d62ede679A6F2Bdbe) - mstore(0x4c0, 0x6AbD8f8D0b2C4d91f4ddA6eEAE76A954CaDC4fe7923fF68d65Dde1c9cc448Bd3) - mstore(0x4e0, 0xEaa2fcBff3EEbd6AECfbCF4Fa1131cc5d5FdfBd46C4159a183E0fD8C7Ff2ccA9) - mstore(0x500, 0xFc559D4F1CD33a9370CA2962aB38d363E6abEA96fD782B8adcAfacbc07f9Bb20) - mstore(0x520, 0xa44E616C4c989EBce0A90BbC1D3aDC667FdF35b4DaEa3baB8FfacbDf54DBdbBA) - mstore(0x540, 0xD48559FCbcde19ff7Ac046B4Bb4bDB686f3DAAAd7c3B73249ECfC8ADbebAFc5b) - mstore(0x560, 0xe6aFBED23d60ba4Cd5a8B82A3Bd49F493fa65FceAfeD6308E07EbB45aDABaBd8) - mstore(0x580, 0xB8EFD39eDa5e8A1de56FD00F2D62268aFDCDA71cFfEbD36856CBaC24b7Cc175D) - mstore(0x5a0, 0x2898CCbae1bd6B1F7cC1ccc42b37e4935215B8b7E89B18dFC9e2cDaFc0C75a23) - mstore(0x5c0, 0x7d3BcCbcDBC5AcBd3Db2CeA4Aea70BC97e9CD2DFD9f4ebcA3E69Cc0fAd04F805) - mstore(0x5e0, 0xE04A5473be0Fb22cd24cbA642B0ECDc2A66fBE4FAad79D7F7f0a744FD3bD68bd) - mstore(0x600, 0xebD652D0f127D14F37407B84bCDFFe4Ea75C97DBBD8Ea8A2FCb5695099dA3fB8) - mstore(0x620, 0xABDaD7Ccd1d8a4d9FDDD4317d4f95fF6bFAeeB9E2Ef4E8Ee8Ce0e47F2CDb1AeB) - mstore(0x640, 0xfBfB360a13Db7b8dDBb3EAbaF0A2eA93CfD0F4cfE5e9dD62c2794E36aFe78Ab9) - mstore(0x660, 0xdC95Ec32d8bCe4051da190E1b70E6b1aF2DdE1B4EfE047cBDaCff6aFF129781A) - mstore(0x680, 0x0ce5E2bdB4d5699BBD3e2a73345866D4b6546f2bE12A41E3dd87b1fdccfA2aB6) - mstore(0x6a0, 0x396b319B0FDaC03f3D8EEf26DbC4EDBcA6B7e7A054c86bE7C8C839DeE960A649) - mstore(0x6c0, 0xB9dEA34e78eafFCca371dDa85DB47AAAeE0f1fca706B18f5E9cfcDFfe92f00da) - mstore(0x6e0, 0xDcD52D5e41D4248eDcFf6Ec1E5BB9697fAf771ECeef6c5eCA5EC9acEBaA0C6Cd) - mstore(0x700, 0xE6ffc047cC4b4Ec9E5A31Fe286e64a4aB96F9C159fDf8edd2fa01bE778279aCd) - mstore(0x720, 0x0Ce65436da3BC3b82FC8CfFd4f3DA2D0A0611bAc0CAfe9AA78Aa093ccFAeF4cb) - mstore(0x740, 0x8Be3C9724E70Ba39e4D3E19fCeaDBAb8A6BaFCd02D8dDD9BefE1BFf12eAAaEFF) - mstore(0x760, 0xc3a70fc45cD681a990c62b6d075Ffef25afefbe781BF8fB5CB3e0Cf51D7f38fb) - mstore(0x780, 0x48Dd2eab0a4e8dD49DC1A8C4cfB67EF0b96bA9dFda39D6dab34bbE4d686CFd39) - mstore(0x7a0, 0xffFe8bBBCBaf56Ec7d0A133eeE4776907c2DFff0CDbea3fc7E1521a3BCF6Ee9d) - mstore(0x7c0, 0x3CdCAA7A1cD2e0c533fBeac1DD3D8C4fB3202A41A0B2aE8Bca30FDBdF67db59d) - mstore(0x7e0, 0xC7AdF2A535616c47e5f1b50a541FAfEBdde44Fd5Cd64E44b7d7FF0cEdBfEEDEC) - mstore(0x800, 0x1e1C5B2e7f5D4c6Eb1158CbecDAbFceCABfdf17f66bCdF613B599406a2ba4BdB) - mstore(0x820, 0xBD2da35Ba69c8713D7DAd8a7eA9C3e58E0CA4Dc56e37Cec5f0cC45f7CdB3C50E) - mstore(0x840, 0x8ADd4dd5C9deaA1EdF863FAf014bD2AC0bEE45A25a6eC0f8D7dF96feA5C90BCA) - mstore(0x860, 0x8Eab9fb3E5b12A37cb9FB12046F1eb9571B79aA7B188EcD5d3a707f0FDeaaf3b) - mstore(0x880, 0x137b353DE3DCC9Bdf2aa1f05681709871eb9bB90c8e3cBFfE77cD34C657Eac2E) - mstore(0x8a0, 0xD4D9Cf80daFDC5b998B5B3Af2C6BEFfcF90efdeDab34B48fbE76ee9cADCc1df8) - mstore(0x8c0, 0xb8cC48Ad05E47C1bfe4e3e122a492F9FA7b73B49FAB56C0Fbf52b7B56A0f204c) - mstore(0x8e0, 0x763dFDcEeFEcE844BcbBfA669e9c0cb8f8CfA84aEa1a5aC02FAFAA3090fD4f35) - mstore(0x900, 0x1bEa95769210Fe0D7C9eF22D0bEDC0fdfff26cfED5c2eD8b3f8C64E8B01Cf8C5) - mstore(0x920, 0x8e98bCFD48CC57d8365edb1e3F2650bffAdd9e7b168Bba29d55c2c99d0Ec1bCB) - mstore(0x940, 0xa0bb8aC97cC0Fa1De3C9faB2cAfBb062e1fdfd889a5407EDd8fdDe9D42bc748A) - mstore(0x960, 0x57F82961afF8afbB8d6904d77A7Fa1B6aEd4bF22438Ab2E7aad4b4aAcA1B9DdB) - mstore(0x980, 0xda958AF7Ccf55fCAe576CcBCccaB53FCbD42bb7dAfcA52DdfEDBBcdaFa6C1C5f) - mstore(0x9a0, 0x8844cfbe14B2dB9A16AD46c440b7Cc9a7e8EfFb1Ba4B9bAdDC22b6ccaDcb714a) - mstore(0x9c0, 0x6A4499d15000C8Bc69B10a419f03b689b22328ba4781AFAa9fD04f2D6Da3e1cC) - mstore(0x9e0, 0x57BDe5FB47CCA1bc817bb8B7AaCeEc438F1a111fe194bBB0c80720965D5C253a) - mstore(0xa00, 0xCcF7eebC7d95B22C0Ec3B1CFd892b86f9DAA4dCDF979c97339FF9364FA9924c4) - mstore(0xa20, 0x26ceF3C6F9cbB533A5A7240FaED7BecbBb7AF7EaE9bAb9ddB5dC7edcAAe6F6c4) - mstore(0xa40, 0xb4DFf7Bab530BC9C7Ef3Fb85ADCc741055bdf157D8c625CAfbd8f0Ec96Ea85B8) - mstore(0xa60, 0xA04A5701a0650a462dFcE8A64Cd37f29CcBCde9a1Ca66288e5104ba86e6E18EC) - mstore(0xa80, 0x89094a81CFD9aB3B62C3809178EACADe901fb5Ea7b9d9C7aCEf3cb4f1a4c478f) - mstore(0xaa0, 0x019a3eF06C1A0Fda9c2b5f7e35E7D19f3CA25B4F5FfBD99BC13eBdcE3c4731cb) - mstore(0xac0, 0x9bC85c2DbE048BD2eB06A9F2C1f2C57D01F662474fcde3F8ECeBc7A5BEb4fb1D) - mstore(0xae0, 0xa680De3F9DCcBBA52C1FEA1eF5C85DdEbbe1E2b26B5C494cBaf3ca3396de82E9) - mstore(0xb00, 0xD5D9B07c0AceF8a74dbBf0ae3b7f9c4B79dF4D702AFAE1eA19dc00A19292508f) - mstore(0xb20, 0xEe735B8E95b6B11B0B79dA0376A4b0e2367fC4cdB60aCC22BAA6a22d7E09CBce) - mstore(0xb40, 0xA71EFeB1eB2511412C3b43B03E323BBD1c4cFb5B5BF089F46D9a6A8aFa6Af641) - mstore(0xb60, 0x8dcFeD05217c8207BfAa48d56A0C62b2D06ac29cBb8340AAc020a1E0CFBd683F) - mstore(0xb80, 0xd90DB9E2267d9Aa92783042c52cF9fcd64d84D508D7CE3CceEDD9AaaeBC55e0E) - mstore(0xba0, 0xe621AFB1aD867B1F40a3cDFe34cb942a62dB5EdDDe051EABA28Adf4d7bB4F4B0) - mstore(0xbc0, 0x6A9B9B7AC4EefDAD03328F7407A2e1a661b71c13ebDb79c89EF7dcB0721E59b3) - mstore(0xbe0, 0xe7eA13d3DbD0AFEdafE11Ca61A830b5F56bab17F4dA77Ee629e490CaCFBdDA8a) - mstore(0xc00, 0xDBFecead9e8ccDeDc2a005fC0B3038ef5CaAdAadbBCeFa1b88E5ecEe274bA2B6) - mstore(0xc20, 0xB5Cd6c9b30B121DeE7E02EFc7D9e5015EDED0cFD7CBa79fdEBf6E82aF92Eb7Ff) - mstore(0xc40, 0x0eff87Ef4eC55c0AECd45dEcad487fca60B5FE5aEb3D816Cc0a89B7f1812DA7b) - mstore(0xc60, 0x9fEB809cbce36e674FeB5313c5a5A9bfbee887B9b6A91df0C28Bf62cCe0B8DaD) - mstore(0xc80, 0xDC8FfabA7aab44Fa44cdb65e883Ad5f78D684abB2962ABbfC4a9ebDC1b9f2bCb) - mstore(0xca0, 0x5fA9CbaFFeDF3F53D222de0166F9E4799Dd5eE4b72DC4E54bf0caec0BACaFba7) - mstore(0xcc0, 0xFd3F5Fa0B2ff5bde24c8AF1b05dAc128B306192Fd725aCfeED048CCa6B79adcf) - mstore(0xce0, 0xC27d64CD889C4346Bd1A09EBCFc4FED578Cf0ACeA3Cd4873264cbB5cce61435F) - mstore(0xd00, 0xaA8293AecE3D22d6a23e2ecAe7eCeCF20E137C2B6c1A4F3dFFDC4FD258ea7007) - mstore(0xd20, 0x83a766da3f9BCcbAC069a67E5CDAB4ADFCDC7E217db60fBAEA5Bd0796bF2ffa1) - mstore(0xd40, 0x2Fc319F0Bab02983E4dC45B1F7C8eD4C02aC6ef7E6AcAcBaA694FbaF542e1FA9) - mstore(0xd60, 0xfaee8d8B522CEcdAE86FbCfbCaFaFDD3dc4bb0EeC89e64cddfE6B8E375abcBde) - mstore(0xd80, 0xFAeE02c0ba654a1ede9af3DaCbB32CbCfABa3F3EcCC4De3C111Eec48c14A266C) - mstore(0xda0, 0xeCFe8a45590dE3d82ac7Fd8b4Ce7C8F798Baa93FCF349fF3CEcaDE4EBa209dcD) - mstore(0xdc0, 0xDd11dC5c2BE558B8710BFfCD65b9B3747BBaad1EC674De118d3C3fba3c1F32CE) - mstore(0xde0, 0xc484aEBeD3c4eeA9a1770BeEE86E3b58bea42Bed85CbE9C472d067B54Bf4EF7b) - mstore(0xe00, 0xBe4Dda84bFC2D44F667bABFCce6fCe7fe33829fED247252AAda0A5dbC104BbFF) - mstore(0xe20, 0x9dAABBcF0987456cC4030100c9C0DbB9cCf0ECfAF9aC503E61AC9Fb14fA435f5) - mstore(0xe40, 0xBe8Ab8447EDBDADAF2dffcc755E9Cbe347Ee46dD8C6cBf96eAAA9A2750C8b1Ff) - mstore(0xe60, 0x4EeFFD7fecf0a6bb6866Ed49Ee44716e5cf5a8C2ABCfdCF76Ee899d910B0aAf8) - mstore(0xe80, 0xf9C0cA559443b173aA9962889bCb46Cf76c03CfFfEF4dEEe8ecf58fb5ACB09F1) - mstore(0xea0, 0xFC5DcD5Ff2998ADE4640Ba823edbccdA5D35C7c13e4E29f67f21BCDfF6bcc99F) - mstore(0xec0, 0x83925a42eDd49Cf26E8DcF3a2CE4ed15bD6Da225ebb8b7d4cEbFDBC5B37960e8) - mstore(0xee0, 0x5EBeA9Fb6A154AC3Ce4e0DcFCA844Cf7d428d3A2aD9fD8Aef8Bef2AADadCfbA7) - mstore(0xf00, 0x348314FBffC5D03f4bc7FD7dFfE696Af3BeEfb8c1FE3a5507F0fa38dF6Fc9391) - mstore(0xf20, 0x31DFBF497AaEd0fFdff2fcdb0A9B211c7Abc4fB4270DBFcFdeaadCFCf4E11bee) - mstore(0xf40, 0x5F40eceACBDaB6AeeBcfD55ea48a1BcBbfC7Ae1ACb75Cb31ee89233b85a2727d) - mstore(0xf60, 0xb696ce67218DD76b6061D78809cf7e3bC690fFc6Ca3614E9acEfb0AbB5A1E8e7) - mstore(0xf80, 0x16B003DFeA0DFdfB711e843cB784Bfd1a42e139cB01bAEa1AfAf2e87a3a4CdfA) - mstore(0xfa0, 0x87cA7777c2D53EE31852c7eFebAfFb6E9FC0dBcF147C2cbbd613a6dF73dA6aB8) - mstore(0xfc0, 0x9D42b6A8C26c73e5E8CEeC24bbCc0DA18bAdE11bAf2f111dabB4C968CDeE896a) - mstore(0xfe0, 0x44C3c09031421DDdb4eE91CcF3FA6D24489BB4BFFfdC1f7c7Cf0d2a0FDCf84D3) - mstore(0x1000, 0xCC9eF7FC9EaBeb5b5A0A9D3d7ef1Cfc6fdf2AA5fc467e746a41bD6e9e850bEaf) - mstore(0x1020, 0x7e87C9B0eB99FB434f8E726cf0e575Be93c2982BE7cC8dDE1D3Cda5bc924339f) - mstore(0x1040, 0x76b82175e3Ea8f95F134558B1bfbe8e55F76fCDd9dDA5DaF13ffBcFd2883dfC4) - mstore(0x1060, 0x9DBf90e3DeaDeBEcAfB14fCF36E7036cc64bfa96c0bBEA8d8BEa9f7F94593faD) - mstore(0x1080, 0xD8Cdd50BE04f4E88A7AD1c5d9Bf0e33f96995de3AeE5EF4Db5BBcad0A4F7F3aa) - mstore(0x10a0, 0x599813Ec909a16913e99596F4FD3dAEA04de3f66Eab0F4E73E051Aad575b85f0) - mstore(0x10c0, 0xd4c9DD59308EB7a004a1f420536910fbe0Bb3bb8573279eaeD0aE4cF1b8fe15c) - mstore(0x10e0, 0x0bA364a53b4e9cbE12db021a0A1F8ebFEaff1eDE3CdA0Ef55EF18a7478398f52) - mstore(0x1100, 0xfF9fEEC75FDcA061f7AbF85c2dE12eaBAEf5decB6fe2Cc3eec00B847F038e08B) - mstore(0x1120, 0xabF2629DC7f60BfEdfA8A741061EC35BfBd08C06eb3cCBAee3Cc7f9B088bee33) - mstore(0x1140, 0x1efCce4Fb001f0b7CDCBf65cB51b3e8f3D6D064CA7dbfd7e9Ad5ddfeEEDDc9E7) - mstore(0x1160, 0xb30dbBacf2e5CF5f25efd3bCDD54E76b4ed0a16e7dcf77fd0BFFaF69DB2C8A8E) - mstore(0x1180, 0x93ABe72BF6F4c2Da7ef7f37dA3C1eC9BD2B7CD40db3b6A1ee82Bb05201697d98) - mstore(0x11a0, 0xfcc1e31cba7C49AEc1eE1a0BC7C4BBDCDbbEbcAA921AE46c01E0Bd6917D7b3DC) - mstore(0x11c0, 0x78ef768d03F0e0fcddc153B83F6d7e9BD01b9DBA6Adb06f6bc2aF324F6F37eeF) - mstore(0x11e0, 0xEFdC8C6A8e5A4e1ffeee16dAc0AE7a298984cAefC2109609cEAEcD065f4b14E9) - mstore(0x1200, 0x30c3AbBC9F6cB75DE3Efbabe3a277cB8Ccb667Ef4400bAdeaaC9c9eB9Fe75fe1) - mstore(0x1220, 0x0AcEF79fCE8A6f9fe2BEaBa3526393fF6a7882d7E906F23e48a6fd7FCae9eABc) - mstore(0x1240, 0xf7BAcB14aBbCF5b2b072C12f82552bb438fB4CCa3C0dd789f6c5FDa4fD7A2ccA) - mstore(0x1260, 0xd4f39EDA8F11D6Df2ABCcbcC9e304cbBdce9eAE728e5f38B7EBDdAAFaD93CE7C) - mstore(0x1280, 0xAdB6D66eC09CFCdB9B3aB0BD550060caEe1aC7DBde8448FdCd21eb1Fa53Acebe) - mstore(0x12a0, 0xCC7ee2B4b043DFbf6Cc18Eea12feBBCC05F4FcaFD3ED2CEacdaF3d2C7ba6ACeA) - mstore(0x12c0, 0xaAbbAc2CB636F1DA42Dd636Fe62AF5A18eC57d13De67eacDaF19b2c0b44a1dBc) - mstore(0x12e0, 0xe02C1F5cA92A5ddf0C8cd1b5fFa9EcF7159E8AD2BABDac1174d297CfA7e2df5b) - mstore(0x1300, 0x6BCFf5415eE3CE1149c65B549dcaA4A87a235f4a578C10ab1D276aCa92adCdD3) - mstore(0x1320, 0xF3d062D2Ff3B3285B1Ec28698b8bFbBcC5d28273dd4526dE4dDbea353c3BAf40) - mstore(0x1340, 0xAa3dacEfAaD7b6a4F790FCb77CbabaC05B29A93eAa37cd76a4E6CbE8C9Ae2720) - mstore(0x1360, 0x0c8F521437d47dbCf6cb9DdceaA5A7f6EeFe9e7cFbAcbBA9d5C0F18aAea7b8B8) - mstore(0x1380, 0x36EC2cf6F6b0D70E4dB2B7Aeb8f5DBb6bCDDaecA4c32f1F560De9b2B1aE72c5b) - mstore(0x13a0, 0x0f2eA60cdDA0de3abfa64c27c75edeeb7c6dFF8ca2E12F08bfa5988BE1EDc5a6) - mstore(0x13c0, 0xAdb3f2FcdDdd48Ad04aAcddbFd90cbe440CD75e54130D3DBB9C31d8b05ABCf9a) - mstore(0x13e0, 0x4Ff4CEa8DC2Ee2d5DbDEeA8815c5f957A182a8Ebf386cad7E7C77abe63bBE5B4) - mstore(0x1400, 0x419c9F715ecD1f6dcDa3ec0eb8CB12E019D19D6D49211e0abAdCD5eB1EFfa2Ff) - mstore(0x1420, 0xBefe860Ac76EF489D4736c6dedDCe1C027Ff6c5d75fc4c22E3Bb3E8fAAb7c805) - mstore(0x1440, 0xcf2DFBe3249fC0Df853c501e4bFefB6fff166FF9d99C90cB71515d019D5bBEd6) - mstore(0x1460, 0xFC62fABDd2D15fa1e3242339B6AB5eA1EBB36Cc7D4Ff412fd1EFd7E6c7D409F9) - mstore(0x1480, 0xbEfCe9D14eC1cf0BED2FA1Aa9dfd33E7Dd908B2a14dB05b9A1d07c48e3E887cB) - mstore(0x14a0, 0x51190C09Eb49f8Ca3dFEB98FFfeF15e6bECBabe1c6F16DD4F8f0b1aCc964de53) - mstore(0x14c0, 0x0471f21f85a87AC5aBC3033AE9a5760aFcADbccADdA98CcdABe2FA2DB9BA1971) - mstore(0x14e0, 0xBFda0F24FAfADA1dEfC9A2EAc84C8543b1d615B9bd1F6DDbdA03B8FeD8878DEf) - mstore(0x1500, 0x0eD0bbaEdeEF0e82A2B64D3ed74b306BE4b214F943c78D6BD7E3A4ED4166dAbE) - mstore(0x1520, 0xC83FbE1b0b686aF860b9Aa19Ba6103fDA0aC7Aa75BB1ddb4b852e5016bBDBDDE) - mstore(0x1540, 0xcA5FfD7c36cb2Bcd98a44eA74Bb4Aa7A7C0F3e8b9CeA1060DABd5deC0e9eFdc8) - mstore(0x1560, 0x8A52e7DB4cEe9fdB34C3e8dfE6F46F9C6EE2Ba1Cdbd5bbB5e5f6b639B8eBFca8) - mstore(0x1580, 0x544EE27A11c4DDa4Cda8C71CcB76fa7EACaE488A0EB5EAF40CDF3dDa8bEBE4de) - mstore(0x15a0, 0x0A0AEcdddA077f54252aaE01CA0eBbdfE1b0e2Aed20e01de02B2C8Eb2BEf9917) - mstore(0x15c0, 0xe2076606AbecbDfBDEFD19CfCDB59E18aFb6ea55cceb031D5E32731Cc48aA94d) - mstore(0x15e0, 0xc0AadBfdd1ad1De81A2bC54572899f34CD6f913da0AA14f37C444d0ce2fD722D) - mstore(0x1600, 0x51d97aBecd4DcE3388b97B83bFF31DFF63Fd3fa21397dFB92f1D2eBcCF0e657E) - mstore(0x1620, 0x8B16370f3c8DCE677E1F5E89DC9f2Ede4cc6d08d98Ba66FEAdCD0439172a4CbB) - mstore(0x1640, 0x1BaaE2e8db6EDe8ae01D32E91e5Dca9e7B82b5ae876837D074C0cdB11Ee10EC8) - mstore(0x1660, 0xA7d4173Bbd7F26583B5b179C6606e4cE0c4D76D5Bd28de42A6c520Ff91B115A8) - mstore(0x1680, 0x78C35d3b289d37220d8A4eBA8a5ae0dBD97975f989F1B6C2cBcDcCFA3DFca4d7) - mstore(0x16a0, 0x7EB2EDEc086FFA3da2cc8F17eFAA355d55990A5C59AbcaE9FE7b6DceB9d7Ba7E) - mstore(0x16c0, 0x5F3c166a3Baf0d3c6bd0cdFa523B3C4ACC3e6f40935fADFbcaC0bd50ACfB6edf) - mstore(0x16e0, 0x10518a58b0de3eb4ef1Ca1B428BbFA7B0c9fC7dCE7c0fD3C8cA7B9EBd4Fbc928) - mstore(0x1700, 0xCDd399B17b46EDe6aC9cF6C3F99c0e06D7dCf3e3Fb0053DEd8C821Ea5c76F5d8) - mstore(0x1720, 0x6Cab96E0155aDaA585DBEd69dd4cCA460c0BadB7D2E4BD55305dec599f68eeD9) - mstore(0x1740, 0x5EAE8FAc2fBaa7E6ddf817acdda8D57cBbbA503A4c407bb89ceaa7a95E786A49) - mstore(0x1760, 0x442525faC4d2Dafaa4d2EfE351E2d716aA9ecc25F5D3e6aA8ebcE813ce51CB84) - mstore(0x1780, 0xa7dFBd467C0c17d77F00cdAaDB2e87Ec7F70Ce93784ACAe0CD5da04dEEc994AB) - mstore(0x17a0, 0x26dd03Ec9EDd7Be5e1D870cE364B124f7b7AFCBd21B24E0fb5ba0EbC7CE9CB09) - mstore(0x17c0, 0xE02aA891B5bAa3945BF8f0ab40C8Ff7dD91B9F2FA957De521a9BaCfCF65ACfC6) - mstore(0x17e0, 0xAB1d764c9Dd9eEd5123cD373Fe0449CbD4f806DAbF4a37A47dC15634D1Fe1D0F) - mstore(0x1800, 0x037c4389f094C0a65Bb9DcEbe62AbFCc36e442FeDaC03F72Aff82ddDfB6FDc22) - mstore(0x1820, 0x40D37602cE8BEB4bE7EbA6ce9b0Cc237b1CeF5fbafFDb2edc0886D4Eedb9B248) - mstore(0x1840, 0x98dF37fE9a5a8D7cc34D8CFEdDf80BA984896E1bC1A51Bb78F2D55d4cB754FB4) - mstore(0x1860, 0x6eCFdF826F99f1E2f3C9dAdB381437edaA8c065dDEcccfEAB0d9fAf8C631c0bA) - mstore(0x1880, 0x016B427EA718B0D3B5d7b0499960C09fB3E62F5bA50cbc0bd5cF67f5dB7b06DA) - mstore(0x18a0, 0x1AB87d4bdd2Ad6aA992D7fC724EAe2BfdeCb313C9c75cc6BFec7b3aFF029acED) - mstore(0x18c0, 0xa3fdB5C5B88b6DedE21AD1d0b43ED77Cdb8ff3a42aC820bD8d5E74e1e6E27D5B) - mstore(0x18e0, 0xF39Ae2c356Cabfe5568b4b2cF331a8c5aCbcaeD76BEad9BF6AeE7DdF06BDC072) - mstore(0x1900, 0xB0EDd84D8b0efF1DcBd1BfbB1A67719Bd8AFb21D998EFBaDE6b91e8799CD5Dbe) - mstore(0x1920, 0x51B2121dda2BBC589AbdE5Eb7ef8c8cE0Cf89443d9ba4A2bA77d253Baf6fB6f0) - mstore(0x1940, 0x4f6DFf68a3EeAFBcC9c03885CfBffF2ebF8faEc485E5fBbfcbA4492b868fbFaD) - mstore(0x1960, 0xFe6CCB9Bc062672Db2DC9Ffd9Cda304fD6555B7671cAaf9f4fcec94383ba6fEb) - mstore(0x1980, 0x71bB84CbcC730f1Ad1ECC09FCBDa2a80be07Fbdcad6a80CF71C62CA2d30c878e) - mstore(0x19a0, 0xd7cEfE0bD05af9D9118Ff7AD05d5F879D9d8F0BEb18Dfbe5c6EEcbbE7F05DB91) - mstore(0x19c0, 0xa0C71df6E965E3EA819Dba5AD9dBf9CfAB3e74b3493EEba1bcD3a6f0510bf8d0) - mstore(0x19e0, 0x1AEaC53eA6AC1143e9acfcb71b9B58b450B668f0df1625339C7dEB08E1349Cb5) - mstore(0x1a00, 0x15D8FFa5C1A7C9A5C5A0Cc7fc1EdeBfD5E6d0Cb68f85F7Ea11D9a7BADDbDdfb9) - mstore(0x1a20, 0xb89291Cb67947cDBc6a51A61711b5df902a76DbeFd76FcB9F9fF144cd6DefeA3) - mstore(0x1a40, 0x218c753Fc4539aBdED0ff1B0db2D3C4e9bcADDB2AAc9c56bEeaBfa1b6FbF7e6D) - mstore(0x1a60, 0x148e555C604dA4Df7eEcDb8d35968c0016a2f284Bf0EB3b8f8e9e4204930f930) - mstore(0x1a80, 0xBc851cAD5757e8DFceD1DE77C73db57A4bA31DAC7AaAC26c23cEE6fd7725B81d) - mstore(0x1aa0, 0xFDbf98CDaaaf67aD8e4E2647aA88Da5BbaCa30D41AFb486dbADDeBd1dCD4Cb2b) - mstore(0x1ac0, 0xCCac2Af9Aa3caeCFa4fEC01bcC152e5E0A61f3c26b00955c67ea8d4B1a0612BD) - mstore(0x1ae0, 0xFEFbfCfc6503565C5ed71AC02FF61a95FFD19D8aEBC9f805E5a7cC506d02Ed8A) - mstore(0x1b00, 0x0dDC35dfDac0C6Dd3ddF078B82549cff2cdcA4a6e49BD628E61f9ca5B0103c11) - mstore(0x1b20, 0x0eBcEb0085D36a7F6dE39eAD4B89ad3AB0D82FB7a5AF5A9256A06fEa781F34A6) - mstore(0x1b40, 0x96E5d82CbDB2FBA5C8a0045C9A570c7bc16A3Bf2c4dfB36769FAbDb59c7B137c) - mstore(0x1b60, 0xa00Ec1c6Ace5B0295dF4ccEfbd4F1dBd6ea3C25624B8fEa0b978D6a57cB0bB64) - mstore(0x1b80, 0xF7e86Fc90D90b5BD34ba43dac37EefC0Fa6B3ac4bAb4d0dcDcD893eEE9aD22bf) - mstore(0x1ba0, 0x5A4bF8E14A7a7a4B816e44F3E2e657D830D4B8190Be2C064d04C124b4E6ab1F1) - mstore(0x1bc0, 0xf49f1Dbf89D4E6f2dDEf03b9b8cDe2A370fdcddA9fBc3f77fF90d39bd06b2b8D) - mstore(0x1be0, 0xFFD6a714Cd4CaC759AAEeABEfb7F7c8eA9cB045fD61953beceb5a0CCCAAF7273) - mstore(0x1c00, 0x3e94bEDbC8aCb128866ECfb99fc77F85941F92dc510A441D6b65C8deB5ACA6cc) - mstore(0x1c20, 0x80Ab61abA66F89dfaAa20692E46d9a17A98C4c6DEa76F5e488913c8eAaC06e6a) - mstore(0x1c40, 0xeFa4DC453D660FBdB8bE5CD1fcbBDab9a1eb128D1E6cA58F0E4C92DDef2C36EE) - mstore(0x1c60, 0xEf033cf77eACA352411cF5Fcbfd8ADd3d50aF5EEDDd671aD84043cA38064AC9a) - mstore(0x1c80, 0x9011bEa4BFaeeCD28a8b5e2E14672E6cc7D891Ffd1Cc1db7feC9d96d0fEBc13E) - mstore(0x1ca0, 0xADc87c3a793F115fc11df283FC0bd0c2efF5F3e65d13c9febC9e02808DDFE7fB) - mstore(0x1cc0, 0xA722E162f1fBFdd8119A02BA2EeE712dbcbEcaC3f0DDBEBB681f24817C40Cb7d) - mstore(0x1ce0, 0xfcEDcF14F3AEb7fcb85fe2b3c2eFbacb5485cC26FDb21eB843FcBCA6A026E004) - mstore(0x1d00, 0xA5FDcBf8d146a25b3d707ACE08A556B33AB0275bcFDd4f6f5D462FD597DaFeEc) - mstore(0x1d20, 0x340e72d7CbdEaaff0e33a7Ffb47Fa3A7bD6bAA43E8851273060E63EdAB72deC2) - mstore(0x1d40, 0xad0f2C12EdFe61fA06aBeC5fC33eeEa20183436d2905330CDa71e58DcB2C3FEB) - mstore(0x1d60, 0xAD76A5faFdFF6ecA0DBa399629b9Ab9350Bec1Ba4E1FDcD0DE53C1B662d38edC) - mstore(0x1d80, 0xcc2a77fBeCafC9996291dD44bb23d2F58cAF27CBffcA7B0F0ec39BD6EeF3fea7) - mstore(0x1da0, 0xaFd9A445Fa50F6e742BB6a0E7e606AEa7D136ccCbDd5D9F188Ec04275b3bad6F) - mstore(0x1dc0, 0x5eE1F7fb3aAfEDB667FD843DB9dCA3da0ABc51adAEb3c0AFE2bDcC9175AFE39A) - mstore(0x1de0, 0x20Dd674FD9b3549C02fF2C58Bcd9dD5fefF56ABE8dCF08c6ef65eBb3d7E9c455) - mstore(0x1e00, 0x64A062bC1FDb4AfEF9830Ae2582dEc7bF4cE9cc6DDAE726FAaCb7Be90a764CEd) - mstore(0x1e20, 0x27ef3a7ca2cFf4C8c4064965F4F6f7ECAa5A161EA0564F1B0BF5Ff784B6F7cf9) - mstore(0x1e40, 0x69df2Fe9E7bC0b0ecb27A35DA3E30aFfA3f233b9630E6bcf1Af4356694ef04CA) - mstore(0x1e60, 0x4B219A26Afaab3935cA7Ef8a2ac1Ab5E620F6A66afDB7645D18BFA2d990A63F6) - mstore(0x1e80, 0xC9FeC0da0860B29bc106E8FFEC2AC40fc7b9f4e1bEb7AaBfF2De48a45EbC6AaB) - mstore(0x1ea0, 0xEC37DA05A716cDaB0e542bE1A5C57f0B7B8DAaf2FAeeECC035B53FC493Ffc52A) - mstore(0x1ec0, 0xe56ECbBb8FEceCeB9B2b4fe7EAffeAde2D9BDc81aD580c8bb6BC6faeF2aC31fc) - mstore(0x1ee0, 0x8dBEbEffCB4de74aEE729Cd7C420d1cFE017c67061DDBc1cf9a2CFA91432fb03) - mstore(0x1f00, 0xd3c3e60E86ab88Edf6db3ACBC51C46AEe3D8Af2C19ba3b1cEAe794c513FeF5bD) - mstore(0x1f20, 0xf240DF154EC73ad7D20e7Fb37C8EbF227DDd99D0BadF4de8DBA96a2096012363) - mstore(0x1f40, 0xFdCCb4FC9FFA87960F64BcAbDAa2F6a3F3e8D5ff5CC25E6003fCdcfeC9D2254A) - mstore(0x1f60, 0x2C1dbECD94CD6DC37dafe5fbC2a4Fc168c8f715c10f3d12C7A5B3B3ef9dAB9fd) - mstore(0x1f80, 0xAc6AA690ce6ddA5AECD73D0DA6bbACBdDe3e2F70a0156D3dDFE29062cf38B7B5) - mstore(0x1fa0, 0xCA280c5322b86bf5a7Fc5DF3eDf77d2FFe70B2e964971bcCd95A7f38B8306aF0) - mstore(0x1fc0, 0xA1Dc2c3d531fcAB0f8aAAAAc9Da27eB0679ebc8CE165EFCc1dD98Df5400CA73E) - mstore(0x1fe0, 0xcb85A6dCe1F14cebea5d22dDc9E9aaF6FadBe44aDCc0Ec6d72cb92FdaA26c8cd) - mstore(0x2000, 0x94e74a7BebAd27dDc36BF7C29FE5B8eeC33ECCe95fFd944FadeFd3bDF7BD26DA) - mstore(0x2020, 0xFdEe2f66c472D4caB0d329edd0F9C61b95595fB9B6F5fDf4AC4a6bff5DEcbe2a) - mstore(0x2040, 0xDB2cD3e0b97efde0a2758d50e3e5CAA35d9c864E3E9ee77a3FcCF0bCaa0a38df) - mstore(0x2060, 0x7dA95F93eD13fE317A9bc787D9fFAeE2Fcf1bDc200CAc6eB0f3AFEee2fBEaA7e) - mstore(0x2080, 0xFc8Cd9D6be4e77fFEd6da522905e43d1b4ebef9EF79bC82e4F0FC9966aDf460B) - mstore(0x20a0, 0x9cA40cdC20BbC32cadE00Ee57Eb1cE8717A3cB9DfAAfcdCEF9cDbD452bDaF1f1) - mstore(0x20c0, 0xaaE86E1AB20ccC18791eB32846Acfc7FbeBc8cAE469BD4Ec22fa4dEC31c51acf) - mstore(0x20e0, 0xc957c5ff204BC5E5D7Cc8624fd2DCEF7ebC77F24cF2460bb90211F5bdef6a1F5) - mstore(0x2100, 0xA75aeB5A9bDBE0e486AE8e9C76E946abE64A5aefB9aa14Bfd23bce2DB5f14499) - mstore(0x2120, 0xCD38303E26AC2dD477143F6db70Bc12aDc20fb905A3E5AAAeF8063Bc73BaCa3b) - mstore(0x2140, 0xb3895cC1a8FFFEF7c7c7862BC93bdae1d4d8fFababb7c01fBebe720bBcAdCEa0) - mstore(0x2160, 0xcb37c7d6F4A3Cc4fe33a09FC08b809Bb63e89B6FAfFa6D7F18eE5EC37f9ccEC2) - mstore(0x2180, 0x57A9B5A4C25D42B9515DbAf4cF29a16Abe9cc1Dd67ff4E4F052ecc6155f170B5) - mstore(0x21a0, 0x7bD478fcB7eaE3FbfFEDbC393fE1f1DE5F3ddFDD2FdB15906940ebBC21B29596) - mstore(0x21c0, 0xBD8C78F33ee8b132B7998C56900015A834bDCFd18D2bf5b3A7b89105DC37d0eA) - mstore(0x21e0, 0xB559A87ED4F9b3bBdbBDeA8e4e4a869cD6Ef965a1Ee9Dc732a6eADdC5f1dd56C) - mstore(0x2200, 0xa5eB3A349AfAFE0cb0CbAc0A3a8E5dCCcc3c7ac3F3d53D7D5153FBC2F1efC6Ed) - mstore(0x2220, 0xd4722Ee9bAF7CBF31Eec55D7EFAaf9b68DEE9157A9B47DbaBc3Fc9af21cF4F06) - mstore(0x2240, 0xB37Fc16174c982FCdc04b7337Dda77A6f51faB6506BB2b1BEB11FDedddEbF611) - mstore(0x2260, 0xC64f4cBACD3c0E3b476EafA186B5AEA9B6acDafbCfD545dC83FE78393c91fA44) - mstore(0x2280, 0x07E5DeA9cdECb6f2b1D1ad0A8fbDe8d649dD787Dd95E930fA4b1b87F3db0d4A7) - mstore(0x22a0, 0xBBAD0De0AaFaf18EeEFa79BEFEE2b8a00e2838ADF9dEEeBB2a8dA8eBD96F183c) - mstore(0x22c0, 0x38Ff01cBDED5ce55E3aE3572Bc3A7FaA1dfe6a08E73c5eCA1Eff34DfCD6da0Ac) - mstore(0x22e0, 0xDbeEa74eb5742e79b6b1F489A0FeAE6ae74D8B6f87a58e7C57Cf4364CaBFDBD2) - mstore(0x2300, 0xe8DE0DdFcEA1018e4641C6Bb6fE9Ebd7967a7da5C1c3c4e23EEdC5Ac1FA95906) - mstore(0x2320, 0xcbC3d84283cBFFCD9abFabdA8afDDbf3513a965255B2D6D2a4Cf3958BB6ECB5a) - mstore(0x2340, 0xdcFe8Fff6F6FCa384437cCe6B497E7c181d4F358cbFc3102CbD8d7cFA163bDb7) - mstore(0x2360, 0xB782CA173Cc5fbb4Dcb59da6d2CDAB804d0067eCF5BB5b2BFedCdCf1dFE349C9) - mstore(0x2380, 0xCb6BdfDcea7adbBfB309E7a81074cAf1A236a72CB21DcdcfC8FCb0aADdA2ffE1) - mstore(0x23a0, 0xf0b8eb1DEe49B7FE4Ad47157AE030e76Ec9BfDBbaB29710a60976d391749181A) - mstore(0x23c0, 0xdBad5c7eEA2D5Cd1074bF3F881ecd096FdA5fFA0Baa4F382cFb1CCE5Aa55C92A) - mstore(0x23e0, 0xffc11B9cFace1bA37fd97284ce8E6a13eff0Af0AA32C908fc93Ff23606Cbb1Ec) - mstore(0x2400, 0x7BdF7C27F4AA12Ee2D8ff9746FD8A1d36f3Fd782B73Ece8029a660fdbb2fAA79) - mstore(0x2420, 0x8Ca6Ce3Cd57C0Ab07fd3Fa2DADebfFda7b3af3Fcb39E377E602fDeb4ED021EEA) - mstore(0x2440, 0xBab2b6c0fBD1caBbDc98d4a3d85BffA3FDedfb21745bE29A02f2AAf0a6C45D51) - mstore(0x2460, 0xD7B66486dfeCC1932C6AD6A7C6C59e3D4be5afa2edD3Ebfd742Ea1C6fcFA5cd4) - mstore(0x2480, 0xA688920fE01E8B7A6cCF4A9fcCD071c3856d54f2a0AA362FA060B5C7e9A50FF9) - mstore(0x24a0, 0xaEB6Fbe2a7b5C0CbB3FEBc2Ca5EE2eaCfDc5aDBbB4223e4BAcaC15B8d4f3e455) - mstore(0x24c0, 0x6e30a407a594b71FBbe12d34c6a561bdbefdD444a6496A432Ae7e1745Ac4FaAd) - mstore(0x24e0, 0xf70b573f9b1F9426Efa7eBD7CDf8Fc2A0D5bAbE47685ed67319a1aE5ca80DEf5) - mstore(0x2500, 0x9dAffAacCE8Fcf70fe7d13a8d0b0eABE20eAC026DBc0aE1f3ED2B0941e7a7f2a) - mstore(0x2520, 0x892CF1070F8bFc71958FF29a4F83F9acdCb422EDA6A57942eAbf454d26405F41) - mstore(0x2540, 0x7799c56e817AE8FbefAc773EC8dae7dF8194a8cccDA5D6b3B11066cA5be81FA5) - mstore(0x2560, 0xF2eCCAD42AF4dDeDB049fAEFD0fE7bD2AD1aD4efdAD1580C7BA85e0e8dFDF757) - mstore(0x2580, 0xac4d78CB2dB951b2Fe3377C84B334Af868C066D1bDe8bFc29bCf9C8B79c3Ed7C) - mstore(0x25a0, 0x5bbCb1c1cded2CcEe691d8aa6B68f39aA1eCedaCd389ADA6c812aD9d2cD12fAB) - mstore(0x25c0, 0x1DA17DABcbAE4d58eABD19cbefF7Ae0e27E24C95A304cF4f999Cffbb0F304c13) - mstore(0x25e0, 0xbD77acC0bd0f5ce6cD9D502e4fAED0d4A9Ec34CcB17b4Ad33b131fbcFcC33a6C) - mstore(0x2600, 0x1bed20af6adbA3eDDf70AB1dd7eC28e6fbDCc305b3Ce11c9A3c5FCfceD4CaD8a) - mstore(0x2620, 0x253FE00fad0d0C10b8540c66fBCdBdCaAf788e4D0dEfd76A4C26AdF36fe96bB3) - mstore(0x2640, 0xD147DEC4F72AeeEff4Fe0Af1eae87f20ea4fA7bF2Ac110Dc3c67DCd2CFc42553) - mstore(0x2660, 0x0e6a5cd1be0Fee4Fe8BC9c3685Fe60F96c6d8fAF36Ff0c4cE64E5bbf4d756086) - mstore(0x2680, 0x8f7F363cA1D063976fD87eFacc741BDFaccF9Da080C548072C8510816fc5a2f0) - mstore(0x26a0, 0xD66f5ef9C0f0166eCE4bcFe4ef1C80e5A3635AbbcF4d337FC01Aef3d83Ec2c7f) - mstore(0x26c0, 0xEfEE6ECcDA7e1E9FCF8D10d7A6e04bd1FDD60EcEEDAAEfe73Cb5eCb2E88e8436) - mstore(0x26e0, 0xd2A3bb913619ECFa55BDeb6aea734AbFa5bCeeD80ecEEC2DC9edBc983aBdea6F) - mstore(0x2700, 0x9c5Fe1B2C7Cdcc59bEC9DAcFC7B5DA6fCec8Ab84a4476faD1D3C14d7CaDbEd53) - mstore(0x2720, 0xb43AE6Ee08ADf9d0c47fcC87cdA4ff98d5f1837Bb92c2E95c1D9fBEB65C43081) - mstore(0x2740, 0x7b966E1D0E427Af4F2eD6D337A8E7edb81e59BA9dd028C60622f16aF6eb285E2) - mstore(0x2760, 0xe942bb59dE0DEBFc5C96F900DDd5A2254a6eB6010AD68902fadBd4bE9AD3A0fF) - mstore(0x2780, 0xAF758FAf48e0CDF67Ae9eDAD7e0F3B2aCFF2bD53eBcCA66d504f2194DB66eEBd) - mstore(0x27a0, 0x70FFFF9C6f76FeDc0eD1c993f8BDB3cfA7Ebd55Eb4D3FFCe23F0DB2F4801B9Fb) - mstore(0x27c0, 0xAe836eF0AEFCeDC5dA28aC90DFDd1E61A9Ba0D514D59D2fC4d9CC0187084F3D7) - mstore(0x27e0, 0x18ba3916f4db2eFC5d7f1e6bFcAA074D703E055C6CC611d659E19ce3abAaa0d0) - mstore(0x2800, 0x8ea9dDacfb299e318eFddc3a9dcdf5C4db5c793fd0CD85F84c4A69A1e6eAddb7) - mstore(0x2820, 0x3dd9eF82D9C2DcaAB1dd48d58D2CC70f3c3714bc912aec495183Bf4fA91f9338) - mstore(0x2840, 0xAe3745B9Fb8f6C3bAbb59d5fDA3F891De4eee8D7A92a8DA1dFfd2fF1eE4C3D4B) - mstore(0x2860, 0x71cCF2DC0AC90c6837F3dfd4b90bc41bBedd47aE94EAA476D6a3A8a6ebaC6cad) - mstore(0x2880, 0xbaD5eAb3aCb1efFd7C3FBEDD4aF8B7ffdafc7DBD30ff0bFa9486D7d3B11Fee36) - mstore(0x28a0, 0x4C6b98ad39731ce020D9bBC0f795C9D7B4b81ac8FE3c334Da3EA66A00C4b5e3A) - mstore(0x28c0, 0xDb80F29d9b058F0dc41dd90CdDbc2Cc2ffe19aFc9416F0026DDB631bbBeC8eC7) - mstore(0x28e0, 0xda008BA9a5822E4fbfAeF4A5E5CDCdb1bC0cdf870c7863a17156D6Eb1BcB7D9c) - mstore(0x2900, 0xEcdbbD60c1c7B3BcCAFc07DEFACAB36cED5c18e154a8726Faf4a1e87Ea5e0E2a) - mstore(0x2920, 0x4b17f07dFA74Ee25DedD3a45dB115C09D569a5b48dCa6c248f90e91f0AAd698C) - mstore(0x2940, 0x2f22cEAddf219973e5c4EB51aCd4DeCE5A2A9bf7369Ec8DfAc37eE7Dcc5b7fb3) - mstore(0x2960, 0x56bd7Ba048D2e277f0fd8fdfe01B8abc6AC1a8803CcB8DD1Ac7ea6f3aD160Ce1) - mstore(0x2980, 0xeF614ABFd253A52402d0315a20CbAADB04e8F36e91F77BAC8DF37fABcaABfE88) - mstore(0x29a0, 0xcE666Fc227f083C9ca55Fc8e75996A8caCcf27Dd82891CcdAF1e3E44EA66fd12) - mstore(0x29c0, 0xdA1B80F4b9Cc81D7bcAE09bC66B0fC0d2aE192D6E6cb1e3eab5B90e79c6FeB8a) - mstore(0x29e0, 0x2FF1ccb35C3fcb2c737BE4Fcf0516FD6aB31b7fCDE6E1497BDbDBB67BcaaDB7B) - mstore(0x2a00, 0xFc86EBcAEe5efDEDcbcefDFBb5Cd0EF2E1EF7bC9AEF3FF390335E7F9FAe6200e) - mstore(0x2a20, 0x53Dd1F642E987aaeAeDDfF7e756053fb8eEE2B506eAeCa9315e8eB8B55aACa30) - mstore(0x2a40, 0xec813cbCcee5f8f79eC7D256C90f5575D259AFFee6A788b9fe86D8dbd61CdaC9) - mstore(0x2a60, 0xeE8DbADc40c40D42C7c6bE8e1bee7d4D1bdc95c8D06Ee9d3Ee2ef9CCb707B8f0) - mstore(0x2a80, 0xC035f4Bcca60B16Aeed9DC57C6f3b2952DcbAe540B4dfe97a13dA4aC3cCF1E90) - mstore(0x2aa0, 0x6a6c3b33a420cbaBAD381aFAfBC9bFdbf86Ef1cF2B8003AE8798916fDccF205a) - mstore(0x2ac0, 0x8BBBB2ab103c648f36bF6ED4f7bFFbcc8bC81016c5739E94E2F995dC586BB6F2) - mstore(0x2ae0, 0x8fF8aFB05e3324209AD877679432B727fCCbeAad616047F2FcE7aEFFaDE3E43D) - mstore(0x2b00, 0xdBdFbB8C0485bB9854B8bF2EF6B36Ed7A0A4F559acdB17a3dC0D53403C5e9d2b) - mstore(0x2b20, 0x5ff53462acac3275A5Ee6E81ab0f61eC2BB2c2a2bCa1dAEfC2f1dcE3A8BAD79A) - mstore(0x2b40, 0x3fcfFD4Ae7e3a7dE9b618Eeb9A5433C76E03e506b32D13d7bb6cF7CD7c4BDf13) - mstore(0x2b60, 0xb251ea6Ab4CfEE52fCFCa19d3cEed4E5F7F0f5281Effdc6bd7fBBdBbD07E43DD) - mstore(0x2b80, 0x18431E8B99AfDe0BBd2c97a3AfD6A0BB9eF93FafbbA5cEBCFC2CB60A1Ba58d8a) - mstore(0x2ba0, 0xD76010a8cfEAD6a59fbEf2F89BBB3E03E0A2C915dC36Ad59b8eECaa86D98d3eb) - mstore(0x2bc0, 0x08be4edE84B3E8ab9Dec3a403CaaeB8AdF4adfba3ad04Ecb69CcfA9b2D1c7D72) - mstore(0x2be0, 0x4E46Dc08C6f32FAFb8b1CBf594F33eEdCf6cF5013D1bFC5b9BaEb906aee37eE8) - mstore(0x2c00, 0x03933B5F413dbA399184BB6bC16Da69F0e882eF69f9F5CEF20a2F2cD6Cc684cF) - mstore(0x2c20, 0x2F07E030daF1bAb276B7693A76E653aD2DfF7Bdd0e0E8A8744A3ab42B1F1799C) - mstore(0x2c40, 0xa76924cbb541D1b4dBFf2D380B5817B7Bc6Ddf81C0E8C3b2E80AdcB5Fac70bAE) - mstore(0x2c60, 0xEAB1eD1ed87CBcd5ea9C8CfA9AA6b9F8d3b2AC8AA0ef98D7109e1806946A19AE) - mstore(0x2c80, 0x54DF88Bd44bD72b9eD2cDcbaA9D9494c481AB8E27dEc95a75ccFD6DF4ba5Fdad) - mstore(0x2ca0, 0xC99fCb24Ab154Ad0AAdaE9D7fA91a4F866ecaf8FE419C2B3fAF49940AF3Fe26e) - mstore(0x2cc0, 0x5FA433CA8fEB0FEfc6EdC098a1C39Cd67df6FAC9cCB54D7cacfB45dE1f907EDc) - mstore(0x2ce0, 0x37e3E4FeAc279F1Ea1A4a8428B4fB0B4Eae7DbE3dfDB47Ad7E1b37AfFFfe7D5B) - mstore(0x2d00, 0x6aD8bcA2e1e912C8C926E0fb5E1b222b2a0A8fD2c0D9E8DA19E1005578aa82f4) - mstore(0x2d20, 0x0Dd9fF63d213d629FdDb6C8ac6b9BF20CdCdEdA2cebB980DE3cD8AC1b8f47A71) - mstore(0x2d40, 0xaf37DBfDE289E6DEF8cCaafEfbFc8AE770f2B2a5eD4AD6D976bDcFf3B8CDbaB3) - mstore(0x2d60, 0xCd4fd77bAd1D2bbD55bcAf003d6629DF1a48ccb9C1e9D5eb92e3Bbfe8AEe7ED2) - mstore(0x2d80, 0xde02BC8Fcc8202AD3f0C3557DFa68e055855081D6B2cED3d40063CC1BD84b022) - mstore(0x2da0, 0x4D69fdd88B00BeaEaC6bBF0b7Bfc1A35cd13e2eeb23fb22Ecba2C508fbB45FCe) - mstore(0x2dc0, 0xaBBABf92728f32d7AbeA3Ef02052B6CAa1A97CDEBb316494bCAF9EF7efefdD9E) - mstore(0x2de0, 0xb3832cE5D8EadaceDf445EFA9EE6C4B9b7f3AbECBdd5Bb5BFEFE28EE68ecdb3C) - mstore(0x2e00, 0xE198d709056cD54C6d3F23cF2986529ac5CbE726eFe1Aac002C00287bfC0F2B5) - mstore(0x2e20, 0xAa969Aa7870b17de31dcBdd2211426E2e918430aaF8eAaf265e13220DB5cbCc9) - mstore(0x2e40, 0xEbCA6dCCaa015e7B2ad1C4CBdA986c04bBBcfFA6BcA1A0b899AF47aDBcDba1F9) - mstore(0x2e60, 0x08f5bF26EE7809061c01ca7C3d8ECa45d6b52A4AEC332AAba29EDE5EeCaDdF68) - mstore(0x2e80, 0x3ad3c90898BEdBAE0cE8CfbbBb7CE9D4dE21DEFaAaFE0736FC1C4E736d2FaEC2) - mstore(0x2ea0, 0xD778EF7b9abBfDdafC02DF68572F7a36bB2BFae0acAA7460A01beCbae99cbAe7) - mstore(0x2ec0, 0xcFfc9ef4aBAEF1daC63AA6FABA47dF1aD7f77FbF8D902e73cC21AabDbC4F5Dcb) - mstore(0x2ee0, 0xc5B9fa77bEBe3AF27B0fCfD00CC8A7BbAfF3F54cb1317AEd5db04Ea17DA73EF4) - mstore(0x2f00, 0x85519aEAFCe5CDAa7dB80b5d023dDc2fF0f1643e986f2827EB1d0ccC00ec3cEe) - mstore(0x2f20, 0x4b3eB97786071e59a09BeDBe1f7dE2EEB949fA42a2E4F9C3A56eF3F8a85a7c5e) - mstore(0x2f40, 0x18edAEE119Eb89c9Fe224Be524ECA9cDCc6Fff7EDeDcA7A1eab8CC02eabdE33f) - mstore(0x2f60, 0xc0B958AaECBDc6cd1A71feAF58ab39a5DfFb8dc0E86e6BfAc2c8a1cb154A8D52) - mstore(0x2f80, 0xbcde1aB3e35aEdedBDEbBcbFEEDADA4EADADf2dCFA7BE2Dfc58c054FB7bd243c) - mstore(0x2fa0, 0xdfdB71385aC76e118ebCE4cddaC7F60a8A5E7E07aBf16e3e7539Cf18Dc817CD8) - mstore(0x2fc0, 0x17bdFCE23156D2cFbdBBFAb9Cce5BFC0176d8d2fCb5B4cFFe3dBeBaF40dE65B1) - mstore(0x2fe0, 0x9BA303aFDe9Dca768599c8e65AaEEE8c06a2c3DE5C7f2C20FB5fbF30852Ffdfa) - mstore(0x3000, 0xdf4ebA5F644bB69F0ACBABAA7617354Cc43375cEa349AeEfDA098c595db53caa) - mstore(0x3020, 0xCd56e852BB69aA0736bFf2EC1BA2FDae62fddCe39A2afD5E8CF53F66d66B01e8) - mstore(0x3040, 0xBAb8D70FddbeB88E16D728e7368c600a4D6E7d5DF2d2EBEf9F8BFEca5D3AbBDD) - mstore(0x3060, 0x45CfCdD17F1dB5BbbEdabDA782B75ffCFFCB76dbeeDd5c3e04e6870F94Ff2FBC) - mstore(0x3080, 0xbCbDcEDAbd1c03b995aB75aaC8EfFD908e01cE0158e09e4960adbBc4dbe0119F) - mstore(0x30a0, 0xc64b4D8Dd9aaCFbdAE8d3228Cbf2B5ABBB3ddAB53D9dC9ADC8D6FF1C06a4fF7a) - mstore(0x30c0, 0xA694aE5fdA5D4f1658aDCfB1aAFD38F484Ce20dBcf8AbCF64Ab19bd8e08d8Eff) - mstore(0x30e0, 0x208Dce8cBA09e58C3cB3f9BCF28ffF737AeDB360d3fC8be9cfbBbFdAC1043e08) - mstore(0x3100, 0xefea3E0cd8AaE05f4A70176fFbBC0DBB223B89f9081BDDD1cEc36d5AdAAED2fb) - mstore(0x3120, 0xc0D9256377C167AdC6899a3A8cA8e5fb395eaBEf80743C84E36719AA8B23c08B) - mstore(0x3140, 0xc1750f929155CF1CCE0f7BCf28C5a5BFB27daaaCB8d7852a7e24c64dFbcFCddd) - mstore(0x3160, 0xDfFd0E9fcad9FEbFbfdfa7bFaacB97e79BE8Fefa96Dc0A3cca4daF1152FBec52) - mstore(0x3180, 0xBFF4e73FBaF63AE6c6b056D8250c9AFB7F8B6a200EA967e3fABaf31E0cEAf8BE) - mstore(0x31a0, 0x57e45Bb5C9b00c5CF4CA92eb1404cE54C0c53a3f8FCCD34eeB8Bf3b0D89286FA) - mstore(0x31c0, 0xEcaea2CEc2AeDebEDcbef9a5B6A4432cd2a243feD68BcBc5E1Df4Bb85fDfbaf2) - mstore(0x31e0, 0x7FDfDE613e375cbCec4D8B5ABd53eBBe4cca0B0301AADC2c9A8d255Ae3a4fDcc) - mstore(0x3200, 0xFD62A1dF025894C3F6EDC6ADaDCF8dd2DE2FbB28Fdd54A2ae5Edfc4fdE3d554D) - mstore(0x3220, 0x05eFc8dFb0967a4366cA7a3e2cd0e8eFacF727F274ae546E2E05e5e5d9Fb41cf) - mstore(0x3240, 0xb27fD97A40ee4A720feaa1ca253fdfF1923aD7d0Aa61e0Fc0eD6C4F6ee3dd5bB) - mstore(0x3260, 0xfbEC0eB1ADf78DFeEc81dEFD14ccd8b2Ecaf643061D9047B3dC34cc26AbCe2Af) - mstore(0x3280, 0xafd432aFaF87E6B09b8afC888CF85Ef19DeE2f4f0EdfD7Fb13F0bfDCBEcbf5d5) - mstore(0x32a0, 0x7384bdb12Aa038e7F1ebAF5ebAb589122E97ec3f54C2aCBd7BbCeEaaC3F05cDd) - mstore(0x32c0, 0x663b32DFe7D7a348F5C7BF61c4938Bf43CEb761fA0c02d9b636F25601FbBd7Fd) - mstore(0x32e0, 0xCC5593530fdD27B430BeDc443c8AC72D88d15FbE7Aa38515192fcf2Ce2BFfFF2) - mstore(0x3300, 0xFfceC6Bb51bCE1cEc0dD0b4D5CA62E0D97fe216Ad9cCd3Fee7aD7F9aeAeEebc9) - mstore(0x3320, 0x516bcA5bbFFA3aB5BFb9B862e87Fc5F0E5b54c7554aEd6dD4F52baACe5EafEDa) - mstore(0x3340, 0xeA916fF207EC93327CcEa8Bf6518BB92c4ecF991aAdc7feF3C0E1D80d26Af8F4) - mstore(0x3360, 0x8ccD3ade83dfcdB8F6dF3F8Fb0a4b2bb3DF1eDc7708A5a3814E60afd2ceb4ca7) - mstore(0x3380, 0x1B663D951A9F9363D281D9DA7CEb39028F7BECEF27FBECBfDCd0F486FBFcf516) - mstore(0x33a0, 0xC79DD02BECEdbc92706590aEa34fF643ec66Fe1dfd9De17f4eC6FFDD14BAaD25) - mstore(0x33c0, 0xc3144f2DA5BE0868A7eaEC0be9de9f8A8D517C2a8Df42110cc58ad1985F4565D) - mstore(0x33e0, 0xd8BFcFE331BE052817482b0F4ed07d2AE9Cdf020EfA75D3A1aF6FFb974D3A7Fb) - mstore(0x3400, 0xa5DDCd5B22Ef53BF5dD24401C590AB4f56eD4C22C706b7FB7Af141BDBFF1e2b4) - mstore(0x3420, 0xa1FBD85ee9d15B29E3Fd6f4E6f7e7cb2e589f3Ab3cF2aE51B9EC5800CBcCBF06) - mstore(0x3440, 0xc8B4af5fa8D1dD878CDaFfb911dCC1F2deA13DE6ddD1dBeff5BE65CCe60fAaF6) - mstore(0x3460, 0x36f1A27E7FaA60E8CFDCCbdcaFfC398dcdEA52c594b17D4B813fA23C3d7a5ef6) - mstore(0x3480, 0xeC218Ab20fdC8FAb536b095c5dDB6eBB34Dc38dA35e85bEDA1a9BEf5b66AD6CA) - mstore(0x34a0, 0xd9A4AA4CAC253c7F7d686A4f0F5Ef98bb651148145AC206Cc1feB3c92c0FE00E) - mstore(0x34c0, 0x9B659d0cb3c78F47ece6b3a6f1B85277FC4E3AC92aAe0Ee90Feaccafc4f47e9C) - mstore(0x34e0, 0x5Ff81F5CEe4bfF44fA8E57FeCE98C45cC450bed2c4eC71E4DD264Daa2eBfade4) - mstore(0x3500, 0xfc30971EEf911A6D4AbC8CD807cf5573574Ccc8Cfe90e29aEfcc4bc3bfB5A88B) - mstore(0x3520, 0x7F3e8aBDe39D1AA310C9fBFfab89Dd42BDD03baf356e434309B65abc8DbebDbA) - mstore(0x3540, 0x0CfEb7f7cbfDdDCaFd8a8C32cb57fBe4faBaAd63A93a673e283dcfCaAbdf0854) - mstore(0x3560, 0xa9b6CafBBefcE335a3A7d84c41381254BfA3ffEEDeaef4fBFBD43bFEcD34A0Bc) - mstore(0x3580, 0x5b4f7C08a0Bd55cdDdCdeE7cACc3a51c2287c6C9fDcDFA0ABF2f9f9bB10a2de5) - mstore(0x35a0, 0xb40B9D07A5e7ab827b14D3Ff4f96A6dB1A3dD20Bf7FAF23dbeA2DFDaeFAf2bB1) - mstore(0x35c0, 0xaff58c6F4CeB5C82629Cd88FbfE43a829E881EeA24cDe3Ace8209a0164eE3bB2) - mstore(0x35e0, 0xdd9FaAb1C9c78fbaBEC235b4EC3C2bebf360269fD4D9f6897bAAAAD16A3af8f0) - mstore(0x3600, 0x3a5bBAf967F8d8487AA3025C6d2495BFdD8D1C52A0ED9bFD3D2ab787E8e100Ac) - mstore(0x3620, 0x32478d8DcF8A84BE566Fd0BC4EEb33dA4cD91e6321d08B1EaEE07d93Af5a19dF) - mstore(0x3640, 0xA55b1c5A4FDC2Ea848B4E3DA5Ebd16c0ef7Fb7e22CeCB95905fD24adbE24afDC) - mstore(0x3660, 0xe38C91aFafeE8F8CE0595eCAd647f96cb630C74b92dCd6d6FfA0c212E0dF2ebe) - mstore(0x3680, 0xbc73fcE93f1A1D14dAdceA68cf03ceb597dAcE2eaee1E2Bd3994D760D02dbe51) - mstore(0x36a0, 0xaa2E6babF3Ee27D2eaea26aC9e1c9D4a716ED7Fc067480F3F75D9E732ec1BC95) - mstore(0x36c0, 0xB0d7994eaCa1bE6Cdb2f8f494dd7F50B66bF66eA59EA2d7592c4ceCbCbE8D93D) - mstore(0x36e0, 0x86efd9Ab34b7A6a9eB5d5e48C47fA21bAAACe484f6d8BECeE3CfF0B0A00DB38F) - mstore(0x3700, 0x6a55CaA28Bed620414e059e79BA7Bd75C1dA5abCe1D95A472E7597b98A7C26DC) - mstore(0x3720, 0xdDeb5DEB3b86ac551F7E686c74abB216345Ad81dFA72f3ced79edbE5d8f6aF6e) - mstore(0x3740, 0x92D77eAcE6BF26E5d77b4eD87df8fa77e1a4AbbC2e1e0abeCecfDa94bCd4CDc4) - mstore(0x3760, 0xfAe708F1e18E0EfE9FBadADC4DADeFe3E02a73b2D6dbf2AD0BcAcf05bc46cDDd) - mstore(0x3780, 0x39731B7dE0cC60257BebEc41094bf5E74aa801313C92eeA77f042bCfd3ffBF58) - mstore(0x37a0, 0x9bCFA5126D0a65722Ee24bfF2cecaD47Dd76b316bee0bf6CaEDf7503A4dA8f39) - mstore(0x37c0, 0x8Ba342ef3AA20832aFaa0971Ffeccc58EcaB2A19d6b4d7Eb7D97bddfE9829B9a) - mstore(0x37e0, 0xAd40d1c4e5BB48BB72119D9f6D2284C0A25ff3c760Ec71dCBcAfaDb4EC2ACECe) - mstore(0x3800, 0x53ef6a0c9e9a8e11Fd20f6B3Fcc99772D70FAB9fdC7a63Bba6cA132C02C3A0ba) - mstore(0x3820, 0x2c0F90E4BB9eE694cf4f2c0fd20ac4B5fCc46Ea67eBd5Afb74b7AFe2B08ec21d) - mstore(0x3840, 0x3AACcFaedEfF57C1AeeBCC8D2C6EBBEe9cC4F7B3fE801ae34Be66A6E40C7bA30) - mstore(0x3860, 0xCE82d223FCAbCBe84De0D1fB5BcA86dABE42DaCed968c3B5F5Bdf3afeC66B6BC) - mstore(0x3880, 0x5429F3396aDD2cBd36ab2928Deb95D933D79cfB16f2D46dC52Bbda1D0ECaF0A2) - mstore(0x38a0, 0xa8896a3E0bAc7BF5Cd9a1fcC06eFCaBc842555dFDbd5f2Cd50a9Beee4bCa5B56) - mstore(0x38c0, 0xcF4EDfb0C1f2Ae2a7fff3f4b45B4B13c6C1392c7C369e30cF6Df61B38ffe1dCc) - mstore(0x38e0, 0x1540DDF4fe560fECC74A11f1771da7E90A3EAdB75e70bFB356832B1401591ac8) - mstore(0x3900, 0x8c6DafEdD4e4CEA4Cf95903cAbCaDde05766199A312A3F7301Ec04eAbecddfF5) - mstore(0x3920, 0x7bCeE76b38Bc7C5303cc17Ab2beBFd92Aadcb4BFFF0e2D536b2c2F715ec91Cce) - mstore(0x3940, 0xCf41bbABbCbE742fD2f21A749EAc75C3CE5BbDaf4ed9d7F177D7BbB9972C9b83) - mstore(0x3960, 0xcF78Dc8AB511b87AAC1DCCdb5173903b9b99D2012d36b98BFdFB6AFC657cB25C) - mstore(0x3980, 0xFb1ad4E83C34bBBA0C4684165B9158aBc23EDdcd25ac4fb9c5DedBd16af88544) - mstore(0x39a0, 0x1EBc43dBCb5CdC4d7A0baaffb70CCad975afa7F3e5D4d1dd0a9B10AFA9226ebC) - mstore(0x39c0, 0x6B1f6D5C7916125e6A5FaC4D1aDE794Ca8Ab03C542BAFe4dD5A10b6693Aa04cB) - mstore(0x39e0, 0x41be73F143461497fd86ED4B52c35fBF3270Bb9fC89e1Bedabe76b6De180BAe5) - mstore(0x3a00, 0x61ff4667fc01F28e4BCb06bDAFAafBd4A9Cc8F490BDC7e8DC33aAdd76Fa8c44c) - mstore(0x3a20, 0xfC89ebc9BfEFbb6d71bde41cF5E3efAaDcb332FC0C7ccA85dB0a0C98E32B2ea5) - mstore(0x3a40, 0xf70ac4a3275e28Ea28CA0cbcfA9c5356a12d5CBFFcC06f4921602CBEd69584a5) - mstore(0x3a60, 0x23EeFD6D4FBB42eCaadFd6f3DF3bA0cAf6faBDa4f5A4182f2C7B65b6dFB9aFB5) - mstore(0x3a80, 0x9e654B3E8feB1Ea8365cd48b0dDFBda4f0bEb55c3a212a92A61458037Dd8ED7B) - mstore(0x3aa0, 0xf8A88B87C17BFf5BDe9b1C6c48087Bb55bee46D8df9fCCaAcA4C3069c9e315d7) - mstore(0x3ac0, 0x1aB0F0fe9cD1D342Ec7B6DDaAf7bAaaf7A0FC93fBDABc7CfB163CD2d0E0eB8C3) - mstore(0x3ae0, 0x5E2bC5BCF6EfeF0E33a07178B92506199c8edEB76BfF5FbcDe0B78DA4aED780C) - mstore(0x3b00, 0x0BBCeAE4Fd3D1eCDEdF449354a9E51df4cFdB12739c3DAF819895A2AB497deaC) - mstore(0x3b20, 0xF8aE8cAE8AC4ca2fD4076f54cdeAa5EdBa60C7bcCd6bF7Cc6a71FE2CDDC5A7BA) - mstore(0x3b40, 0xe04eb61F4D6CC7d326aB45FDfcC1FfF0EdA5BBbe9B5BCB2CB9ae06ca56B88Abf) - mstore(0x3b60, 0xEEbAF5F21430ADCEF69EA98eEf801aC90374dcC9db911f5b890DF6b8B2cEd9A5) - mstore(0x3b80, 0xcc5ea3C5C9EF841D2A31d9485f0d43Bd0CEcBe08Ec3CAeA66CEAa2fbA94Bf41B) - mstore(0x3ba0, 0xCaEec9EadaCAA17FdFad292fc4BD92C10C288F96bc5BaC74AAada4651c61BEB1) - mstore(0x3bc0, 0xb5A943a7c4F1BDFdFD038CfDCce529dd5c4Cd66D6a655b456D9cAbEd3Bd77E8e) - mstore(0x3be0, 0x8FcE5aF9eCCCaB645fbAf69BFdEaF9ADB857C1Db08dAA1dc0A844CB34d61Fa00) - mstore(0x3c00, 0xaA1c116BE026FB1f702fD5c6a8609b7f10dc0dCC3A38dEec12e163beCC5eeae5) - mstore(0x3c20, 0x39b1a3Ee2a18fB4fA3f94088844dDEC3F444398f66ee8DF3b0e2C8213c7Fd8ea) - mstore(0x3c40, 0x65d2E3fAFA2C06ccf24Ed4b511a34E443b7aEFb4E7DBaa1bCe2DcfFEEBacE39f) - mstore(0x3c60, 0xdAA6BEA768CB7F6e23A9f4b7Fb4DDC6Cf05808cB0fbE53Bfc9c014f8CefCa0aA) - mstore(0x3c80, 0x72B2D3Dd2B57dC5d29da7931ea5FE14E2e52Dbb1269468f2308Cd7fc4affFB0d) - mstore(0x3ca0, 0xEc4511B2EBA7Fc78EA7F93E5D1A7e7AAF304abdd62e37EDB729BDF98d06f1768) - mstore(0x3cc0, 0xFeda073ABE4f660DA94181C280f7e7EfC7386EaB29825AADAFfd83C3FFCdEE32) - mstore(0x3ce0, 0xAa8AaD2e9dA3d192fBFfdcB56Abe509bbbd32f7F5dfF96c95B4967BC5fabCb97) - mstore(0x3d00, 0x0BcD4DEd6FdFf4Eb67CAa640Ee5ECB9da84d44766E786Bc3eecd04d7Ca3c62cD) - mstore(0x3d20, 0xC3cBD7aadDee94AF7aBA2E09cBB2aA7B704cF0125C4aBdD6fF75dd0dCDa2ed49) - mstore(0x3d40, 0x6EafD2bAC3C5ECb632EcbdeA94FbB502Bdb7d7BDdad8FBC47dEe8F71DBAa7AA4) - mstore(0x3d60, 0xac71cA3aee85cf6ad3Ce8B1a00f5df9A3aEEbae4Ee50E4cE0cCeF413E2EC1FBa) - mstore(0x3d80, 0xb1bf09aBC2ea90Da99DAa8cD23E5eccFa7B6a88c5701FAf64A28AE1BC3ce89a3) - mstore(0x3da0, 0xF90F648bbB0dCa25D5c275eA65d9F90Df8E5a3BFDCAe675DeB0fEC72bBf220e5) - mstore(0x3dc0, 0xa324b5C8C6cb2270f266a0090800359bB8dF76caaFb5E0D5EEa58883A8eFDd2f) - mstore(0x3de0, 0xdB6da23B27D0AAae9Cd72EdBEe9aD66B3B97883460497EFB6ed9DEe2a6f3baF4) - mstore(0x3e00, 0x782d6E3bBa5BD73E1dD40D5057C24b8e3e2Ef98757814feEe2adcC5f4be44f1a) - mstore(0x3e20, 0xcF490963975cb429AC64d0d0d4Aa7F37B51D7968F3745D81eBD4b6AbAbBB789f) - mstore(0x3e40, 0x6E9BfBe089BC4AEFbEDd8fddb31b3ADEa6eB2a5f6eBcDA0bDBBFb4E9E3d9Aeba) - mstore(0x3e60, 0xcf74e22910eFB760aADAf4CC8e68e62a7eaa93AE47c1FC657E8abe1C8F2CCEAD) - mstore(0x3e80, 0xB0a2Eb4A8CAF3eB0bFfaE79AC8240285c16A5d6aD5b365e3BDf906B7bA8a7ab7) - mstore(0x3ea0, 0x822283ec3E816C9D0Bd87B6Fba5bD09B41589380a3AfaF9a6f16Dd3dC56C99c3) - mstore(0x3ec0, 0x87f76dDe22b7D4c5AdBC602EEA2dDfD2D22f55Cc0031C0fdE2e299fD3AEcfaef) - mstore(0x3ee0, 0x43C189aA3Aca2d481Af67a1D7146DabbF1dBc6cBbab24a7AcD691c2B0680DB2E) - mstore(0x3f00, 0x4A21F2EaAFf3a26CDda84FaafbCFb05dDbeCc37dE8a2b80b24b8be0e22BC2EcD) - mstore(0x3f20, 0xDFCffD17909eFe848Ce7A04eCEA86D5e37e8FcfF0bbA7dEE71f6ac8180Eb4dAF) - mstore(0x3f40, 0xC8C80b87F5046F571a37E2b2CB6F1dFB47ecdCEbec1B50A7ff53E9A2CAab7dC3) - mstore(0x3f60, 0x87cBeE25f5ea3a8A4daAF6daF865B23eeEFDF3553770B689BeC5d525aDDd1D57) - mstore(0x3f80, 0xeECe716aD0aB83AC22BecEF5E3BabDfE2eb0A7f363A9D88A0dE0339EE9D31Caa) - mstore(0x3fa0, 0xE002994A8efEb417Da5BCFEA476840bC7f3cd5064Ca3Cd9139FA26Ad1aa0e1bF) - mstore(0x3fc0, 0xEdB15ED416a3DfBEB85eB68ECa13D6edcCD22AAeAe2cA1fDB22abcDeDcFBeF56) - mstore(0x3fe0, 0x0FCDeabfA19Ae6f475fc15edf428C3cceC2c93c439C03ae288138f0584be31fF) - mstore(0x4000, 0x50efA12B981CCfBE1c7bC36056dD5a9E2c7DB98Bb1FDC7FB93CB7FDdf95e5D9B) - mstore(0x4020, 0xaf6f431A68A0DBC52e7bA2f2D5Ee04AbC72F3Ffccaf9ebc66Fabb5dDCBBcC2FB) - mstore(0x4040, 0x8DCB27a1AC91F277bf46Ff107fF48eE44Cc4FebdafcDf7EBc220A2eCDD63F6b7) - mstore(0x4060, 0xD59BeAF2AbEC0FfdDe1378f0D2EF3A847C85f6Ed7DAccEDb125A8720F4Aa88f5) - mstore(0x4080, 0x46C2a6B4c93f3ec09221d2a4514f528Ea4454a7DE3fEabdD8F0Cc0bb0DDe0Dd9) - mstore(0x40a0, 0xa98d623A0fCF55d5FDD5cccA0F6c9F2B36BEda341EAf8DB4Fc1faB89ffbEB5FB) - mstore(0x40c0, 0x2caebEdcaF5EA7da2c351dE11BF2c796C8B209c84a61bA5a111dBDE7E81716db) - mstore(0x40e0, 0x39fD51fBD9db9aB2B43F23038d53dBB653B8177B0279e1De290Ad25a22A72E2d) - mstore(0x4100, 0xf0BC4dAAeEc234bee314b149fD00ED0E4Ad73ca4dada81fF6EDA29832B92C5Cf) - mstore(0x4120, 0x491df91a9AFe5f04cEc72FBAfB8eB1714Fbc0c4A57F3F7FeA35C3C28dF0cFc0C) - mstore(0x4140, 0x76cb0F8Aee0F5EbC26954fA3aF512ca6819aAe9eEd2Bc0A6AAD9BAAAC3395F6b) - mstore(0x4160, 0xCac83221cF8588a0fFC4DF52fa6Bf4b10A20AB6a50Fa9ED173Fd957cFf8943b2) - mstore(0x4180, 0x53EC1C61661EcB6546F4fE77c36aF248977bEA5BcAE04Fb5c8f8eAC4AA3Bc81f) - mstore(0x41a0, 0xEAeFbb07c06C9B473687d8F7CFb477B2a5156ABdc6Cb2a926B0EAd6e974Dfc3E) - mstore(0x41c0, 0xad709BF7CDBD160E47E914aEb7e6B9eE2Ce44267ecE4524D99ca794E1514c302) - mstore(0x41e0, 0x1b97Fee44fB697cB09E024AA2Cc7fdCe431fa4FF54c5b49dCA8C8Fafa2BC9154) - mstore(0x4200, 0x1b22C0efADEcB4E1c9913Fcedd1E49b0dAe8E9F9B5F8eC40f407377cd8C5F5Fa) - mstore(0x4220, 0x4bAC4c3dDABbdD527906e32Bdc8cfceF346c539bEa440aBDa049bc55B0A1A87C) - mstore(0x4240, 0x0ce53087BeC87BbfF9EDe9A9a813c4B954c29BCffDb0a9FbBb9CbFBda16fb6De) - mstore(0x4260, 0x71CCAedb6b8bE253C6fecAEf7D1BF816D3E54fbA96DD3D5cCFDeb25EeeFa2De5) - mstore(0x4280, 0xdEDCA1ed1B1e3dADd6f31b3281B9ff1c6B487aAF3E4a5ec7DD62Dd5f2BC88C35) - mstore(0x42a0, 0xbdA7C9DDab7c9BC5Ded3F818d45bEfeA3F572556D418bfc65CdDb34903F18d75) - mstore(0x42c0, 0x77cc4AAbafD39De5F8bEA1da9A3C3509E27FC9869A5F5AC8EFf1A5731c6cBe3E) - mstore(0x42e0, 0xBC4a2f6f6daA7fa4E2F93bfee254C1FFe665C02Ea97fFeA6A5C61748c49a5aE9) - mstore(0x4300, 0xFbE9c9cA5b3115F0140E38cf7ca517E20Af9EcFC0dd73B13556cB38DFE85B1Ed) - mstore(0x4320, 0xE841c9f5B78FDA5Ff1BdAa1450AF3Dcaf46Afb4C2B0e4f0FaDEb6D71C4506715) - mstore(0x4340, 0xcB313f5cD8Bdc1C8Da65eA6D0cF7CfA1193CBe934b89c2b2F88aCca52F88a7b0) - mstore(0x4360, 0x8c9FBCD8e31DbfC84e1DC432F55ee44f2e07A01f44EAfC4b4C9376b7ec4Ba6cf) - mstore(0x4380, 0xDd83BdB8Ebcbc29021fD2ff90f52cc946Dafdb4a7Ae74f38F6FF917AFBd7Cdf6) - mstore(0x43a0, 0xc43eD1fd6aBe606aC751df3BD578D78531a1efEFf7A007F8A8E679d0c643e6e1) - mstore(0x43c0, 0xA1aBe3dAcdB6aAD529f2810cdDcEAe6a7eaFAaE4f6D20aA2c5f209aDe8FbBcA2) - mstore(0x43e0, 0xd0ffa4BdA0afd008bcCBC6f9Fe1E35a1DC1FBf2298201D274D9bDef2CAf3C3e2) - mstore(0x4400, 0x0d49eeD8E1A472Ce741F0EdC8dfBb544BAdDBE2064241E9d5b195A0f10547a2B) - mstore(0x4420, 0xDBbCCf19871C10bcCE446ce2b00Bfb7db8DdBbC65B5b65cb2E05FCfc754BCbEc) - mstore(0x4440, 0xD994A8D6FcEBaF7cD5aBffBBEE8F0943FfeBA754B63bb020163ADDEDdd36BcE8) - mstore(0x4460, 0x4bCDdDf5ac6F83c4CaD8A4fd4CaB3Cc0eCecd97E7B3fa9E0c1E9eC96D655B911) - mstore(0x4480, 0x694E7E84f9BfbcEEEE3d8c941Ea6876Fe2dFBA5B19D1BabbBE3a8EadA0Ff8ec5) - mstore(0x44a0, 0xAAdaB2CeFeE94cF2a4faacd94aFEEc5121AC1d8BD001e9eDeb5D8f8c27EEC965) - mstore(0x44c0, 0xBA85feFADAE534fDda54EdD3EbeC2c5e6bfB5FD5FaAAEc3fcae36cf75036be37) - mstore(0x44e0, 0x0f2dfa0Fe0bec6d9EA9bB03BB2d4dEa5fAbD45fcF39264CbC473E091EfEaf0dd) - mstore(0x4500, 0xA80FB648CA79Bbe4Df55e83981fef9Adc05cc62dAeeca5Faf79A8366A91DcEbc) - mstore(0x4520, 0x52010e96Ee3AAEC9d33eDc23319Ede4Bc5598989D8B4Fc09d3f76C48F7cBbB9a) - mstore(0x4540, 0xb58E062A6F77fd5D9cdddDf99B3f4674d7F4A5c228ac84f7E13d7CaF1cb7E68C) - mstore(0x4560, 0x8C1CCBE23a16FBc5dCC9A8f324bEDFD32b0d26112769F2F77a3F673c1242A4c2) - mstore(0x4580, 0x37C368eC36af38ACA0E7d5662a77419eb8b1d35e7B8f0797Bd826D282cdc938a) - mstore(0x45a0, 0x5a44a6Caeda6dDFfBafdfaAA7a04C0bFEDDF6f45fDFb1502aAAF8FA3Cdf9CC33) - mstore(0x45c0, 0xf63Df3fEc9f0b0CBF63aDc248B8e2FfFdeCFcA52FaEf2Ef1dBbC0dceFDE188Ee) - mstore(0x45e0, 0x1d4E9Bee8067EC6FC9f36a2cdf0B0cEefc3F065B48bfF42bFCbb4ae16CbBdd0A) - mstore(0x4600, 0x7B58e0B51FEDaeD7D08deD5Cd866ee8bD4Ade76aa6583eDb4486C06aE7df1eDA) - mstore(0x4620, 0xF6e694a67a2Bb9ABab7fecdBF8bD5b277E1DD4a3EFeFcd0028A67d152f04ad1c) - mstore(0x4640, 0x52E05BEeeb0CA89E58A2F19D8E88CFD3FFd4fCBABBFbf0aFc1CE44A41c4A827E) - mstore(0x4660, 0x7aF28Ddeb6feD40e48f63Fd387Dd0BCCCaE9DA6dC39Fd5Dd4F2de3AbaAdcdC30) - mstore(0x4680, 0x83cC90dfaeA7909AD6ED57EBC8AC66E7EbA7e2FAf5EFE34138B10db3Cb11F0C7) - mstore(0x46a0, 0x7f2C3bef8D488ADD0a8AfF85B1dbF8154cAda2C46ae4Cd2feeCb41Fe41b9cdcf) - mstore(0x46c0, 0x6CE78Bf9810D90DdbB5199EDBA51Dd3d888ca039BeAccBf6f03332d75aF8dceE) - mstore(0x46e0, 0x038EFcbBD11eAcd5EAe9Bda2176d57E26C2F8F23a9AF2Dd9a73FD4Eaf4dA92E8) - mstore(0x4700, 0xA4fB28f3AefD381eCac7cE4Ed84aF08001FAc5cdf5E7AeABeb7F18B6FDa50ab9) - mstore(0x4720, 0xBf9Bec7A53ed56CEDc9ddFBfD10eB6CDe9fda392A33bf7a1a8DE0e9CaD610940) - mstore(0x4740, 0x26fBDa5BbFc897d7483ffcC1AD02D6Ac9a0b9B5B49eaA97ea71d78d49F3BD1aA) - mstore(0x4760, 0xFbbC1BFBD8F90ce3dD1eb8DF2B79d14933a8AEfc00589CfddE0CD7fF2E3d4D5B) - mstore(0x4780, 0x00Ab13Ea7A7C2cF0Cb74acEDF97C8A08cCF2f477B1D3Eace34b7D8DE3D56CF5f) - mstore(0x47a0, 0xadCdefCeF872fD7ea11f3406eD7f3eAE6d3CCe5CDc5Ec7aAac6aEfDb3493EbD6) - mstore(0x47c0, 0xE1ae24CBF760BEeDabaEBAa4dE4fcbffFEC2Ea2a14c9E63814a94b0fF3ebecCA) - mstore(0x47e0, 0x7A74C3b81C272FcE71079C1b52219d84Dba7209Db6f6691Ef1e87f11FBD3A2E6) - mstore(0x4800, 0x0999FCA1D5D8Ca2161eA5CC13bAF63A3afaF1a398B7A7fFE8bEBA9eDa6E5B85c) - mstore(0x4820, 0xDddaB2EB8e16BeeF246dCf03fcaD9eB8dAab28a8f475540eFF6eE9fB7019Fcdb) - mstore(0x4840, 0xb6dE7Aa72007f4dC5d3fc6BD2bB0E1A1Fe7fdeE6bFA11ae8d0bBdaD54b1C58cD) - mstore(0x4860, 0xc2D8E303e48c22D37CD3A7A56a6fe44c6589bB345A3B850901c2a10B83497CA1) - mstore(0x4880, 0x1AabD5f378cA4E3eB58CAE3Acdfb514de183B30bCEE6C67EB232e4969Fb5AaCD) - mstore(0x48a0, 0xaB329C788bDE2C85f433FBf0BBB7Ac1d4D6EC20eFbf17AfbA53072A9652bCE86) - mstore(0x48c0, 0x67d114d1cdDaB7A3226b9F9A98AaacbCFdf743CBeF9b9940931F68173b0B60FB) - mstore(0x48e0, 0x711FA431d9cEde16BfbEf6FD8d6ddC25d01A2Baa9275bBa6a4da0E51BDC08A69) - mstore(0x4900, 0x8C4Ce07ece304F115fAeCe0Cfa5F153bC23E26CBb64F25C926a7dc08E46e928C) - mstore(0x4920, 0xf7c1792cA8fB5dBA5384CBa2C0bBab94ceCACc108A9bc3bd49982fa5260E2D4e) - mstore(0x4940, 0xBa1996a187dfd5Aa2fF32C522ef9CE788CD12a38c0C67E82EaFcBD1b1e36bDeb) - mstore(0x4960, 0x084fd2Fc9AAbcD1fFbD9CB8bCcDAE5aC1a2Ad29E3Ede2Ca3DEd5D21b639C3D3E) - mstore(0x4980, 0x4859FA8DE8744CDE9c744b587B8b41BE8D9DeAc06cc8b2Af33D579d5A67c83D1) - mstore(0x49a0, 0x61053c55f2F889ccd182DFd1a18c8bBC85Ebe23DCDe50cFFe4dCBa3Ced9fE1Fd) - mstore(0x49c0, 0xdaf81f69DdefEC50b15c6eA50ac07d992C9A7ab9aBdfD9EdC1a7636455BfB5d3) - mstore(0x49e0, 0x0D4BFC3A11C638FEDacbf33CdacbC36Eafd5C6DbaCCaE70E5F2a9a8Fb0c3A1Ac) - mstore(0x4a00, 0xA13bdceF3f39bdeADbcfaC9D58cb9F68b52fAfaEe8c5Ee1FfcaF685c94d0059F) - mstore(0x4a20, 0x7532c1BA59dCEfE6eA5c4BaD12e93699f4Dca7a616bF1F46cE9e94AfaCdbD8D5) - mstore(0x4a40, 0xF9a9b7aB4bc14cedAD37ae3f2dD4325ab1B893CCc98EeDD5013259050e01b3aB) - mstore(0x4a60, 0xBFe33ec25AFC3Ebb3aFd5a9eaa58AA8358eFeDEf05a1F66DEDcef8e37bACFFCe) - mstore(0x4a80, 0xb6fbbaa780cA404da1B4EC09E961967DD4f4FC5B8cD0d6703150A5e42bA8e5BE) - mstore(0x4aa0, 0xf0FcFBf7dbbb2fA2f6E2afFbd72F0E6f832ACbedF490151ccDe59a47D200304a) - mstore(0x4ac0, 0x938B3984F4b4a140f965d9B7bdA2558ec6EDa9EEdC7A5ED10f0cd9C4E813d6Ad) - mstore(0x4ae0, 0x09337d44A500894dF3B5Cf0DaeC697Aea693beaCd29FA3B29097F1a630eF76Fd) - mstore(0x4b00, 0x8b63C4F20ebDcC4AbABFF18F6deDd1941FBD4Fa1043BEA5faBca5de86df4Ba23) - mstore(0x4b20, 0x2860e8b943Ed96AaF6f8e32322F684e51c34AFE7cb5EEC23dAAabf0D8c6Ee4df) - mstore(0x4b40, 0x368C56EebdBFfEBcE5FFaEE1dCadfB45C0b7b1Bb1c6a392EDe9F9Fd6Ed3380d7) - mstore(0x4b60, 0x8b8B14EdF324498adeF06BDdEAB07e365d77CAf2Ac33CdaB71e9F05c5b7AAEBA) - mstore(0x4b80, 0x7BdEDA5708fEbC91bcBe91f73cefc6415d530c59E9874fab5B2F3c3fb5b46DCe) - mstore(0x4ba0, 0x54c6198Fb5925c9Bc94C4aEa2B270D449e62bdfa1BffC8CbCb8cb1f0AfC0dBc0) - mstore(0x4bc0, 0xAd27606bC5E1d78b4F0FeAc5DCeEC8E653dBCEB1174DdE0Eec2e1F24f3cfAAbb) - mstore(0x4be0, 0xCc2C1fDf6ACCFFC9fE016BbEdee1bf6F7A9d5C651F76C7Bd0190FcAccDE81F49) - mstore(0x4c00, 0x4eFCd7AE2e3cC53F44d8b4bA7245fEfCbe7Bc00Cf2edA1E2d3e75F78c9f6D1De) - mstore(0x4c20, 0x8cDEF2edA59b699f6Fe0f13e65e7038F6Fe469eEc71b51fe134375e25bdc9C58) - mstore(0x4c40, 0x8385DA5e35e3Bb44894fF8BEEb44bcE4f1F6b1Aa036BCc64A1f36daCFe51ada4) - mstore(0x4c60, 0x6df0A2CC0bEAa1ba0ECA9AD0BcA1767E5f3dBBbd2Dd52D8F7bcc8EEEEaC7EDc5) - mstore(0x4c80, 0xCc6f6B8EB7d9Ba127F6b1F79C4B06e5fF3Ca7Ba240A387B9a3AecAe3dfdeC8bc) - mstore(0x4ca0, 0xfc5cDEEec07FDD7f6ac52E1B73DEAD6073f83A8B3a8E9eA6CdF2A71b9d1F389D) - mstore(0x4cc0, 0x9f1aE7cD97e659E3AE7d8E3B56B1Ab5d51D6512bB4Ca6CfB62fa146Cf983A83B) - mstore(0x4ce0, 0x0EB84d1ADdF70eaAC5Efd9124ADcA64F44fB4FD44fFbE14bF7D68B2d04EBDB6C) - mstore(0x4d00, 0xC86Bf1b3ffD32B34e47fFEBc9AA5af84dBdC1f3aD2dD8fFBDfAf8f17aAEAcaE7) - mstore(0x4d20, 0xd5E759cEE2B712d9c9E2Bbd1CD8B6c7C9b9ef2a0889dd8d36529f4B94e6aa5EE) - mstore(0x4d40, 0x1FFbcd80f3fFf232ccDe1b515e97b8AD71d57b10d22d8F60BF9fbf4C8abFB8a8) - mstore(0x4d60, 0xAe21aA6bFB31fdfCBe19bEf4E402dfCf9aD385a771132991bAD2Cb88BB025AE5) - mstore(0x4d80, 0xAb2E7025841bc448a7a182cccF61cbDf42338eCfE67c44f0DA5D8bDbFb0A5A5b) - mstore(0x4da0, 0xaE9F0D95485d7fE64e0DdEdC9Ddc5Ec5D7C1e7cBda7Df05D3cb4e8409a4C00d7) - mstore(0x4dc0, 0xFbAeCEc725a03834F5ECAdCf391Ce16f2D8fBd88b8Bf9cc866b40BbEaEAea8ea) - mstore(0x4de0, 0x03ce3834a2b0f630F0becdbA471bDcEfBcd04dAF90E3ce16598d72AeB157Ca0a) - mstore(0x4e00, 0xd6c1940c8e7E897eBFC112bb8547C1CEc3B94b0d4Ed0DA73368Ca13B31A1eeFF) - mstore(0x4e20, 0x565f24E2B6dFA2b9df107ffAed998e68ee6db652703CEadAC681b6FF4cc0F9bA) - mstore(0x4e40, 0xc0311849634d18f65e85df4dE5133F22f9D12FDCfeADCb5BDa4c80eD8Dba1fc5) - mstore(0x4e60, 0xF10ee2A4E933A24A8d4eBAf7785747ec211bc8377F48D5dc85B61e2a95Fab8b6) - mstore(0x4e80, 0xfcf6cE054062a6a5d69CD5F1E29c1Bde7f4fe4ECBF30Caa3043Fa5CCBc27dFfe) - mstore(0x4ea0, 0xdcaCF184da5caB9DD5e817DdE742a0A73Fe954dEfdfaf2E8Af3D48779eb20AF6) - mstore(0x4ec0, 0xCC0BcE5D8EfD80aE795CB97BF8BEB0C5DB5dbbD915cB15Cd6A1dd9A68b75dDeA) - mstore(0x4ee0, 0xD4FC6520EEdd30AB06F2068Ad374A05fA43Be20cD18cfBBBdab786b8Dfd632cc) - mstore(0x4f00, 0x97d7Ccd47121D7b864C463304194128003efB2dAB6A3B8da3fEf8BE3F8Aae00A) - mstore(0x4f20, 0xeD0c0dF2DbADc93118cee892295b7DA9a8a626B4Cf23eaDa11aA688cD1EAF8b9) - mstore(0x4f40, 0xC53FBEfcaeA89C61fd2fc35d584983a2b7B66EFcCf44Cfd8DFCd2998DF9A617c) - mstore(0x4f60, 0x1644B351AeBcC47A6274dcF2856507F681AEdACbF9f1B6837eb47dC9dC5644C5) - mstore(0x4f80, 0xa6fD6f46DAaA3099Bd2dc58EECCb2Fc2B0F6c5cc46f67DDCb3fFFF9a71d8d40A) - mstore(0x4fa0, 0xb05883DBAAe37e520DFc7EEfDEfC45E4dF945f969FA711bdda62b84bCDfC51e7) - mstore(0x4fc0, 0x11A74b8accf7C204db3AC17dca3f0660C5aF1905bBd42Da31bE14b803Dda0B50) - mstore(0x4fe0, 0x6bb8b4cAfe482B42CDdAc58f2ab10F3BEAdcB1AcB82691E7c9eCB660dEf7077d) - mstore(0x5000, 0xeBDb81eeD9632e73DeC5Dd7d5A0dBAcdb9f7E8d57dd5e2f8673aDc2012E1141d) - mstore(0x5020, 0x9CECD2F3cA17B5A7B326fC3D2Aebe97FE39E55bC0De33B5E1D5be1Efd41AAE3e) - mstore(0x5040, 0x7d60587Eb312CEafFAe9eBC34FE5EcAC9EDBAB00e5dCcFb93f801715C8599197) - mstore(0x5060, 0xE3fACa0A39EDCedd10A9E28DdB6CFbf56a1Abaad3DBdDecA53a3C384b24A10eB) - mstore(0x5080, 0xF8C1b1d7EA0ebc0939485AFABD08b90A7Ce9fFe5AEaB9fd6Cd128E35E558BC9C) - mstore(0x50a0, 0x4290dA95BFC37Fb7FD8B2D8BA6C0Da85a4aEa611aEBb5caAD32221a8Ccfc62D7) - mstore(0x50c0, 0xB4876A7bDAd00Aa5AaedD50BbEC2E44FbECC3a54EeBa3FFaBa0Bb1F6542Cd67B) - mstore(0x50e0, 0xDBffbc0d897A7768059FeEaE1beDbDE278EbB4Cd4e8EF78CbD584cC53d5fd2de) - mstore(0x5100, 0x5d9Fe2F5a1A0E666de36c88D3fb9ea3dD0F3BB948Cc5eacDe16aAeADf6d19cdd) - mstore(0x5120, 0x8f5ABFDbaAaCF7EB7CBbB19Df2bfD1BeD636eBEF80dAea0FEED2d17AfB6B897C) - mstore(0x5140, 0x6bd31fDabF9D8dDcEe5bC3b88313502FDce71F722e2A3758E720f6cC755A9F3D) - mstore(0x5160, 0xfC66Fa7DfE7d3DeC612bAFb1E354bC1eAC0Af8FBDdfd0333A0fa0eCEc4BE8a7F) - mstore(0x5180, 0x7bcF03eAbf1236307fab39B7bdbaB487e1d9Ab5BF7f2cde44c7521957cEEEaE8) - mstore(0x51a0, 0x9a080C2Ae07Fa9F7fCace30EeCDaB0Eb9b9f67BF0c00bF0A0DEb04D3D3BDa146) - mstore(0x51c0, 0x8B62f5DAcaB99ab397b6BC8ccB6Ca193cd7bECD52EdD377cCC2572B45d6E3c87) - mstore(0x51e0, 0x94e52545A6536d5CCfd3C4385dD93D63ed250AB00BeEa702A7a4CbfcFF956F24) - mstore(0x5200, 0xFfFbF7169F3EEC275bEb6A9F0fABda789AAEF419f98f0B47a5c9C40fcF841557) - mstore(0x5220, 0x0114E5C7dEe284EeB7ad231d1297DB3FfEfd60F583AEa78daa7CBCA7BBAD1FA8) - mstore(0x5240, 0xaf59a514F2dFaeaa6f8Dc3c91d21347dB4FD69A423E990ad0bDDe749cdacCe27) - mstore(0x5260, 0x3bF720f2b8Be7e8aa000deF2bc0DC4eA77ECD8f2cedcCf4DcdFFFac75aA8bB4d) - mstore(0x5280, 0xDa1aF17bf099eDB1001A4ED6e3f4bF54CA86a384D8974Daf51De25eba5b5AD5D) - mstore(0x52a0, 0x46DDFac875D997630a55DE76a8dE7ff85AD0377ACC9983372DC8eee07EC3bC1b) - mstore(0x52c0, 0xDfa0bf5692Cb6Ed0d8f3Ff8C9DAeBaE7f4bA8d5B2dA704aCbF76DEdfe3aDC9cd) - mstore(0x52e0, 0xBbcEC0D5eC5F54fd46ac8fEFcfE08FAAcF6abC03CeB1b8BcFc9435A20D6EdbE8) - mstore(0x5300, 0xDE0e21E05A1EBa71BF9dF4D4F3f3Bcc9bD0EbCB2DB2810330DCc86E759d9Ad3F) - mstore(0x5320, 0xfE1c9B1ebAbfFDefEcFd68CbB0A5C922A75B6B1cEb0DE58AC0d1e6E9deDD9CDc) - mstore(0x5340, 0xE853Daeab6BF57ffF7ccF110eFB1db33CF4fD831bEfb6cccC741bcB3679B0B34) - mstore(0x5360, 0xa4d805e44e33B0803A6Aa5a9A09E473fde8B56FcA0DBa7565f2864b5CaD01A1E) - mstore(0x5380, 0xC0FB3f7afdDd3A3Fd1aeA207F1eb1B57fd5cbddb2e771Bc95cbd1279Dc2480f2) - mstore(0x53a0, 0x64C4e6731E0c5aaABa1Ad4756eEAff2Fb092bacEdD0A690cfc279BB91bb93A73) - mstore(0x53c0, 0x5a85faFa67e4391ffb5D34EfdBFc29aaC9f27cf57c0cBE94B5bbeACdD9B1EB81) - mstore(0x53e0, 0x41e7f2af06dc9EdFb0AcAAF9BbDB8F244D368fEaDDf5F3CeaFAC819daC6C77C6) - mstore(0x5400, 0xB5241a6FC495bD98581Be2D3dD8CEF4DFBC9f92f97c8691083Abc533fEf175ae) - mstore(0x5420, 0x66AC4A0Ca274E3bE4337556fDBcbFE53dbADC0bFe41f9cCF53C0aED14dCe0ec6) - mstore(0x5440, 0x0fa550dd3aD5fbE7F602b41BaBfc1beC4e39f5c0C0b617D0C1fdBFAAEB21B834) - mstore(0x5460, 0xffc43C03DC27457c2ECfC411797938592838bCb61823eACD88BAB7D6fFC7a299) - mstore(0x5480, 0x1F0A134E2b5dDF3A3acCFcE8c4EDA86179beA26f2EAF728968f08499B29d617d) - mstore(0x54a0, 0xDd2Ec16eF416586e330EbBFEbfA6E159f74EE88F2F1E29A2Daee1bf8c595FC93) - mstore(0x54c0, 0x1aa4a39bBeB8Fc721EBADF50c7A44A6D97ec3F4D2549f7EDd88618d69bEddd50) - mstore(0x54e0, 0x9E657CBbF03e4DB0e5cF617f2Dd5a346F5d1dDf4EDCaEe9Ec78deEa5fbA9c6d1) - mstore(0x5500, 0x4AB2F1480d4F56CBA05AB487BDDe0deBfBbab4cA55B685aDecF2AE075eD3aCc6) - mstore(0x5520, 0x8F4d4bF001edb09F9B17Cf19c3B0b2DABD00e3f5ef53Fd4A65B90d6dCDee0E4c) - mstore(0x5540, 0xa8b09FeeAfEf64c3710d6CBEfAAc5efcA53Ad9A6c1bA32FDF0eEDc1574E02d82) - mstore(0x5560, 0xA9C7b781D6Eb2aC853B3fC1DbF9Bd6b47ecdF3BdcF371f8ec5B97EECAaFff1f6) - mstore(0x5580, 0x030fcd75EDf745eeb8C093dc98Fcb38bAEB5024b2AEECe6c333ca7354F01544a) - mstore(0x55a0, 0x33D5E6fbeFF1eA9cB53B72fCf535A157c1eEaDaa9a1ab21631aA4C9cCf39Ce5e) - mstore(0x55c0, 0x39F9114426bDBB1087C37e3369f14BbA68fD19e7eafDa6F195eCfb1A7bFBcFcB) - mstore(0x55e0, 0x7Aed9EC35AcF1DcEA5F8fB37D8c850c9e26ECcE79d46DD515cb13dEed1e91Ad1) - mstore(0x5600, 0xce5c87dDAc2aee5Ffc4f5Cd3fC5Ac8b17ba0FE1404745deaDBBbFfC0a7843AEa) - mstore(0x5620, 0xCa6AEfC9B428D66CBBAbB13f163E91aB8ffcf3E1455de9e58DC20ceffC2ea2e4) - mstore(0x5640, 0xFAABaC515fEDccFa3630B4F5EE05684d3958f07af1DdDb61AAEc3EAc7dc21ade) - mstore(0x5660, 0x0C9Af6F3acb5eAf9a9CCeaeeA0d3bbBaEAB9Ae9d8fd0FEEa6c0f1F4cf104B8a7) - mstore(0x5680, 0x7eCdC09DCce49fFA35dbeEdE3f8912A4D8c2B4Efb7Cd44c2E46Cf90BA2e891aE) - mstore(0x56a0, 0xDBCfda3bfAD13DdBf33c69c72A1612e4fbdd2AE3AE330bC2c3e58aaAf7e6f12F) - mstore(0x56c0, 0xfb3c78Bd3E426fb2C7D65aaFC40fB8Daf709E27EC7FE08d91f20f8fC236D61Ad) - mstore(0x56e0, 0x385CBEA1bC8FdbD5f58d1Fc912FA65Da0Df3f21F831AfcfC9DeD9BBBFB5Ec3a1) - mstore(0x5700, 0x29534C57d06AB04Be5eA1e4Ef1CaF41c42abae49A2b2B5C8Edd43A5f35A7BECF) - mstore(0x5720, 0xC4377EBb6fa6D6b43c6ce9A7bcDdE3C3eE3346b8BAbbFf1e0ECCe6e2e060Dc9c) - mstore(0x5740, 0xEb6D20B0a910bCe3eE7E63DE5dAcbA24caEbF0ef9ceceBf97C1Be9c45bfe76aF) - mstore(0x5760, 0xfbD0ECCa33Bb45A2aACC5D2601bbD9860eEEb5F3aCF4a2Dd0b499Cf687ccacA4) - mstore(0x5780, 0xDeaA7920a70fee2CDBAf126cBfF95Eac2D4b9f56cB85b1097a09563cb1ed0A76) - mstore(0x57a0, 0xfa6Fc461987d2Dade7F1D67051f27a225058b01C56f5C5df0b6a0Df6fE079eA0) - mstore(0x57c0, 0xA2DFC791CeCf333fEBA7e0A072Fd24dcEBb3e4E7FcDdF153E1a35a0Fe81C5Cc9) - mstore(0x57e0, 0x7E4ffcDCEC1cb4E73f0e41f87CDee9855fDbabdf1DAd0Ee5BACeBe12eEaa8208) - mstore(0x5800, 0xf4C3C21f3Dc99390dA68AB1d3A8fDaF0EAE01C3E6179f1fcf84Fa71e5A0A640D) - mstore(0x5820, 0xDcbc22E083a7a8fb1c3FBBb9cC73d7A1a1aECD0FA8F5a82Dfa3f0ADf9f5BFcC4) - mstore(0x5840, 0x224ce5AaBfDfDe3465cDcCe302C00c1FbfF63Fbfaf3E40C53726054b6BDDDecd) - mstore(0x5860, 0x8a3A3DD3E4AFdc7977F42587cAa7b2Ee9dFefC54ab454cbaE383c6BbFBB5b2bB) - mstore(0x5880, 0x80e9CA3d0c4E9cF4331c99cea0f256BA6C822DD5a4DE02A5581Ffe2DC9Cc1ECb) - mstore(0x58a0, 0x266A2e1F48C3d6E2f72e386c5edCbC44dD0DAC2C1d7DD9edd419addC69Ad8ca0) - mstore(0x58c0, 0xF921d8A81F3Dc1ba3FAdAA37e1f9D5B2890CFdea1AB5f00Af9e47bdf0A479c8a) - mstore(0x58e0, 0xAcFfb32f66948b7cdBF79AB68996BCE919E6dB966eB1D0eDdD468D2605d02fF2) - mstore(0x5900, 0x06eCae3EED2d43beaa52a2EA5AF7fA84FbDd7D1D338f5aCb79ffaa8e5DD53DD9) - mstore(0x5920, 0xDFe3fFa9C79F5C8fd685bF11F20b3AcE4916aBcDbCe8bcc09E4cDAE84FbcC3F7) - mstore(0x5940, 0x38b4779FAeDC020D9feB0d1AC7c3Fb369D23272fBa3D133B386B46bdB324bB7C) - mstore(0x5960, 0xAED4F20389c02301ccbAD9DC7c9aBFB39b3497D83CBaE3b7fdFdce9bf3a96dB0) - mstore(0x5980, 0xFcdaeFadb7a7C8Db94e5A1505eDb8E9D03B41b40ba6A2a377D78AfAE0005dDD0) - mstore(0x59a0, 0xfdCa5eeAb85e777Dbef17Ae8fbd6b4abFef5C5bd285aAd6EE6972eb4d35553AE) - mstore(0x59c0, 0xC9D38e41a936Cc2bf4CEDE4BBc2Dad07c0Eac780e83f7E6E82aFCFBcd8ba34C4) - mstore(0x59e0, 0xDA807FdAaC2f82Fbbacf48C9d6e9c907C1d7B925200c9aDF41A5bfAeD7baf31f) - mstore(0x5a00, 0x8035a75d4692bd66dF345D1eF648A698dBF2b21D56dA56Ea0AFa6D8FCF6806d0) - mstore(0x5a20, 0xe6e379BcACfE5C44F1141aEB0Adaa447A5b56Cc2db9a60aDA2ECFce1d5d6BD91) - mstore(0x5a40, 0x1a4b86DeCB32dAB0fED63BcAdDf4CF00BEc56deef00df2Fc057eC2FECC54c952) - mstore(0x5a60, 0x7f372Eb771304AAe5290F9aefCB1fcC7DB8f5b336DB3d28dC65BD5cB5d4C0Cfe) - mstore(0x5a80, 0x898F7AcAeEA7516572FeDB7d1DBa0BfBAC3ACf87BbA83dC4faFce4fBAf004BAa) - mstore(0x5aa0, 0x066544fDcC601FE5cc226a8cf47C52bbDCCD44a3aaE972DFd0cc9ce92AFf8e51) - mstore(0x5ac0, 0xFF60B2abcA60A80D5bFaACeC0D2Cb1e2bA2ad8BDC4b71B0C5ff5b4beCaE765F6) - mstore(0x5ae0, 0x70d6D1369f88e1083CfECE05c3dC5F43e6b4eAc4ebCA5c9297946ae2bFD8fbA0) - mstore(0x5b00, 0xc8aBdBD7E1886Be490a6caFc0b212BAaB7Dd9BFCE4F75a58Bd6538c1E1fb464d) - mstore(0x5b20, 0x53a3Dc2cD1eCaf83f53b3f36a4f0c4BbaEFFba5662fD0Bc30eFe2f57d6bE01a0) - mstore(0x5b40, 0xBb4C9C42F34a7BBeA093FEE60AEeaC4F8BC967Bf2F4dFa1EbEe851BDe9aDb33b) - mstore(0x5b60, 0x4DDdC74D7dBFa22AE9e61d08bCAfdaf4887c6ea2275DdF03407BbacaDe15F287) - mstore(0x5b80, 0x350A789e4CCF4aAF937c0d6b8BCA2cD3D5B5b1Ff88f3CC57e12c4966f6fA3410) - mstore(0x5ba0, 0xfC6FA12dBb8f30d6EbBA2C57AabFEEb0F3B6Ee79e9ABC5Bde44edD5b01b82fe2) - mstore(0x5bc0, 0xf4DE202ed3725eA30420AeE0A7aD22FfB1f68A9C37F19CC2c2Fa6dA43CDBf505) - mstore(0x5be0, 0xa70260Ef9Fa4d5918eb9dbBE25f5dEbBbae9A73ce7F5a5DCedBC0a87DEf24C9B) - mstore(0x5c00, 0xB5F8cacB6851885f8d1C39Ec8Ed143fBBc9c50BFb5Ee54bEaafcfa48b56d2a3D) - mstore(0x5c20, 0xe32a4e3631a874A49b6fbc3791Df59c67A96A43e4d5aa7e0EcfE61Cc588B9Ce6) - mstore(0x5c40, 0x5bac08A5F92ae4dc513B6FEfFdECCCB3e18E71Cc3Cf5AaFaEc5cFb8fF8898a07) - mstore(0x5c60, 0xDaeD86E46c888C9A2c9F389a50cF0B9827a30ecb8CA4ce0eAF31723781fD0Cd2) - mstore(0x5c80, 0xD9991d6ac5B4b5bceAeB5972D4DfbD03ecde03DcF9e1790aDfdb8cCC2F37d16F) - mstore(0x5ca0, 0x9d19b7b2DaBc6d6eA872fF43fE70cF0eC5ced1Ef837FF2Cd31942D6da00E7fE4) - mstore(0x5cc0, 0xFf698Ac9eC9FC6d4f49aDDee459CCd274A1D7aF4F73ebDba790DdBEdBdaaD387) - mstore(0x5ce0, 0xCAFa3e2fb13F8Be5CE809a5AafddEDc6FD406bAbcBCfb3d4caE9eE8e7Acd19eB) - mstore(0x5d00, 0xE6dbc07EE60aA8BACa8Aee0ce4DbA7a157Edd0D8cF6aFCff75cd32f9Ee4c0fAb) - mstore(0x5d20, 0xFe740a20Ab3c7cD7bf7BCe02dD2fB9dbAd51C03eca9A361610Fbfa21bFB2CC8b) - mstore(0x5d40, 0xa9dAEaEF54e62AdbE007d7C35AAb5C917C441cE2140AFcc15fefbEdCbd7DB4Bf) - mstore(0x5d60, 0xa0250805eE3cc43b0b42Be7914F6E2d7283bAF10Fb2dc57dFD5b3d7F3Ab76C09) - mstore(0x5d80, 0xC8b36183771C318Aa3EF8AcfFccedF6369cAD8af87cE0Aa84fF351EC4623eBcf) - mstore(0x5da0, 0xdC32896E10AfacdEBB2718331Ac7ab87cf2f88D33aF7CCe97Fb3Bbecf0C7B199) - mstore(0x5dc0, 0xeDdBAF7fef49B8bBaf30fc744eeED62fB5aFe370f1E08BB5Dfd9FD01a5Ae7d1E) - mstore(0x5de0, 0xB37D177EB7dfB5AB47B4Ee07115f2320835C9E35cDa8C41B4741AbC6010EC334) - mstore(0x5e00, 0xa4a71c35DbA6fde92FfAD65Cf375b9B0669fEC7cEdBFa0c5DCd4AdEf018A9cF6) - mstore(0x5e20, 0xB78AEEf7eC0d18a41edDB3EdafCCe2E0b0D55DEab8b96Dd9db2e24CeFCfcdBcB) - mstore(0x5e40, 0xFF2d957DCFe74038813cfad6d58FfEF7beab16850ad3ECAFcB4B0A4CA4B0D3ae) - mstore(0x5e60, 0xE2D80ED325c30E46D676ad8cD4b71cD8eF66283b078eBF7949fD643ccfad4154) - mstore(0x5e80, 0x08aac8a0EffceE3fdfABcB736A24af6F92Dcffedfb56047adc7AC96D785E8d4D) - mstore(0x5ea0, 0xa37f3467AD7a9d1ca9f1726E80C911CaF4AaCcB4DEFacfd5d2EbEfa90DBaAf3C) - mstore(0x5ec0, 0x7CA7CbCACc3175E3615Ba2F619292F418232D8Dcf571d3c93EFAEC41E4e21ccf) - mstore(0x5ee0, 0x6fD86bf927faE8cafaEd5DFCC6f55ea3f9fBD32D24271adf6dB743d3dAE9cFFb) - mstore(0x5f00, 0xcBda4eDCFC71Bea2Ad4A3DfbAEBaf8eA07d16BEB12d6D6c0e5a51e62e5e6bA8c) - mstore(0x5f20, 0xD2baea6f8B7E0448BD7CcB6D3BB5F3a68938b1d5C00f3985957BA3A7b358AaCD) - mstore(0x5f40, 0xEeAAA0db145fE1D8bBCf89AE3BFcC33BFEb5067AAEceE0Bae72cf2422224F2fa) - mstore(0x5f60, 0x062d9e7A8b157ab40cd545e03BF5C1D5a6FCFc7B3beca7aEf6bd0bDB9CBe8E2a) - mstore(0x5f80, 0xCedEDF1EEa0Eb1eC04bdA726dE489Bd6c964C52CFbbD7F24bAFfF960B6DdbAAf) - mstore(0x5fa0, 0x2FdD994e94767F5a1cC71EFC9C8E93073FEE3a20dca10f7E0488c4eeE7ad41AE) - mstore(0x5fc0, 0x18C41d43483D5D247fCdD3b63AB0A5Ee3B166359A7b51e85cbF1deD21AABFbeb) - mstore(0x5fe0, 0x1Db16ac1c157666eBB23A668b1e1a70e2D05ADDFC7A392e0fEDb18e4ae63D70a) - mstore(0x6000, 0xad59C3B4BBd35D31153eE0b0C540C2d9Fad1eC09361ADaEE7EC0DA27Aa662137) - mstore(0x6020, 0xCBEF5bCFC6380deECcB2f2eBef9E4Af0eF92D149daBA9A1dadbAe9Db6EEe835d) - mstore(0x6040, 0xBAb8dEDceEaDD3CD0c4dc6f8a6A21aad44FeEFB588A1a393C036D68c3842E9c6) - mstore(0x6060, 0xd86ef7F3BD6C1f02eAe0Dac7Ad6E5a6bcBD4EDce1eEC6CbEaF9df51c304dBfed) - mstore(0x6080, 0x0Ea13176f69CDcA0Ed6Db8A1BE6A0E94ADFFBBfAB5aeEd72F6f4FddcAaC3df6D) - mstore(0x60a0, 0x0BEFe2BdDf3a30fF3E73Fd0b0eBeC7C8BeECCEb2A2A195f0CF187eBcdBFca53e) - mstore(0x60c0, 0x4e23A7e91BA3582902C1496fc708E5Ce27A15eced90a8E9d291E8D9B2Af6AaB6) - mstore(0x60e0, 0x5E5C03e8b2D1ff2D8Bc48901A064A17Cba6fAE22CFe05DbB3641DC7EBAC517Da) - mstore(0x6100, 0x2A6a8dCC7baca6B4aBbCe8D725faF9CADEe842be59598aa4b12B4C84EF95eb3b) - mstore(0x6120, 0x0cac40F5c98c20bb747fD60a1AdCE5D40Cc0dc1b129f43f59558bc0Ee3bD74Cb) - mstore(0x6140, 0xDf2C2ecDD644B9B67edA59ca8424bAFDfFdc8d7Da4493A15CebA8B77f8d3ba37) - mstore(0x6160, 0xC8F31bE2dE756f5fE954c5eAD5d7AAfA7Ccd5CfACFabc7fCded2F37eC550Fac2) - mstore(0x6180, 0x02330Df5B8b0B3fE9Facad990f0D4B8Ef3eeF1FE0F8c58FE40C13ef9ba9f4f85) - mstore(0x61a0, 0x4F2781765B3a428CF26A1786DBBE2C0eA3e3cbc6FeD0AAAa07Bc97BB442ca4fb) - mstore(0x61c0, 0xE31aBb19ab34598b2AcB7f1f5d0Eb309265F6Fc968e7Bc1Ee85f95CACf00AfCA) - mstore(0x61e0, 0x1afBd9b5F2fb9A8Fd9Ac9c27bAcbFdC34EFCDAd3EDfc50D3e3a7eba2e6a03ff8) - mstore(0x6200, 0xFfe072AdEAec3adDCbBF9DC012Ccf3FDb1987E156CEB8f79CeA4ecC683EB4fff) - mstore(0x6220, 0x5c3A9BBbfd7Da93a5b9F904Fa0f8CC6c8F4eAad5EC3d9db7CC3BbF7B2C8C9F35) - mstore(0x6240, 0x7d4B81cfde387405C33eA1C8a1BBf8AA2B191d1F7a74B5c2A6FaF13e2913ebcF) - mstore(0x6260, 0x4bcAa2aD3De1cEe0CFbce3E81Ef9f4bd3B56e6f5BB7A52cCd2cb0c43bE65fd48) - mstore(0x6280, 0xCfDFcaBaf0652aeCdce7f29C48c8FB46F17eEFc9Af9dC5F2AA9AD77e62702Cf9) - mstore(0x62a0, 0xEcAa6d282f4e7Cf62dbeDfdC547EcBaCEE33fE4116ca103aFA3FBB8BfDd439Fe) - mstore(0x62c0, 0x2ABE597d4605236e83F395E1afdaC54C9f1C3e8cffeB5e4FaCfd29cEcABb6CA8) - mstore(0x62e0, 0xFBc9609471Aa9C8C22ebB7d5AEFf179CBa2d8E5D32DEFB01A5F3b47ddE21Daa8) - mstore(0x6300, 0xA04c0C31E198C9D9BaADE36C62a0DEEDcdBcc8DDebBbBF63219aB5a98AEA10c3) - mstore(0x6320, 0xabb3Be9fDF26Af0f9DA3AEdA77a181a6F7CC9bE0B2fF7f08eeD4FEaab3FDBbFb) - mstore(0x6340, 0x3A6cd9fcC1Acc3ea3600da68ffaEe36B962C5AF80C3FD69F8EBf56d6aEDE9C85) - mstore(0x6360, 0xC0dFFB1cbCcabe3F9BbCDeE9BeBCeEDaAdEBDc4Bc5d5E7f6FBDC4578BfCBe341) - mstore(0x6380, 0xDD22295eaA2401B8bCF993cDba5B137ada3ed0CdD06f9B11e4295EFCba96e5bD) - mstore(0x63a0, 0x4FA4c5440abaeBfdF2889272ac048Ea3E21fa63CEAC71Fe9F84Bb567ACA68cA1) - mstore(0x63c0, 0x0CE0AE3eccE188ffeb4EBc06aae6fFe827cc5970F216FC4557CA6a173bbCF781) - mstore(0x63e0, 0xA5abBD75eb9D2fC4Fe2D69bbBb78dA96AE61a604d9c831FdA7150AdA5bdAeba8) - mstore(0x6400, 0xaEfC5D46deA3d1DBeFe2ECb6c84CE2A8328074B176DceCF9C20B4B19EA41C05d) - mstore(0x6420, 0xAf6bDC26FA6fB1e3Cd5f1aDa6F4E9686898Eeb9cD025C6d5A89f6aEa6A3fDb88) - mstore(0x6440, 0x5BcD570aD4f69C1681bBc8E4Dc23C61bc7bf13bAFCdBaFBf70DbfD267C5Cc62D) - mstore(0x6460, 0x4eDFDf6d08bAeC99EE31aF27C30b74BdBB0eec7fa2aabA6ec65eCcc77E2f9e84) - mstore(0x6480, 0x2F858c913B2D05cF9A5ebb53f304DF1aac408d4fF8a08A5CaA1fCbC966ebC210) - mstore(0x64a0, 0xdbAbbCB666fc3Ebb62364ddc2a6DBd06e7bC1DF5578FAE5d57ea1E7FAB5Cc9ba) - mstore(0x64c0, 0x79DD4AF95cCdCb37Ebc62FeE2eAFAc0Ae8BFDb3CC70DB2D3F1A82BEDC6F2c0EE) - mstore(0x64e0, 0xF2DFd239A49bB5AE852eb975cadeFDDdd998cdcdd77d7A05BB50bd52aEA6aaBC) - mstore(0x6500, 0x4BaaD6CbC7b5Eb6ecFa55555341331FaFaFa0abBA152e8ce9bcd7689bA535fCa) - mstore(0x6520, 0x164a4Ee69aBdFA97E79f585d1ccdACE9b50B49bD538E06D07FaaE8cBbf40f0c8) - mstore(0x6540, 0xb2Ea48943eBEF84DecfA0dD8e261CbED6dAAA7e5fC52ef12dF9993acF17cFA9C) - mstore(0x6560, 0xb1a5Cd1165c416cA287fc2Fc46F1C42ece2d57CF1aCD7Ddce9d3AeC34e3fe5CD) - mstore(0x6580, 0x5c12FA86adaf73FCC2fD5e7B18aEac56804840e3e83E5F05cEb1AbF23fCB80BD) - mstore(0x65a0, 0xe020178e106cBe3bF1dCD5a5475A93d3b8a9Ffb7d99637f820F6Fb1Be65Df105) - mstore(0x65c0, 0xEcD13Ad266DBBD3224DfB260c2c8dd93765e33e0EDE14eD0b7af47CBee9b2eea) - mstore(0x65e0, 0xEc2d899CB8ccd2526f0FA2e602BDa21F5Ab48126591daaed34A2BdD82CBfD99d) - mstore(0x6600, 0xE9Eb4ff7704ebedc7fCbCEB6eCcAcEBDd31EBd84C9B3b9BAdd61dAba8dBdA1E2) - mstore(0x6620, 0xE79A2eBdC153bEA2DcABAbCFE62D0eCfd116b62FDcbf0f6Cd9cDFBfD1FfdeC4C) - mstore(0x6640, 0xf75BA414A96BCBA486A2A54fb2eF6b02B0cC566f2F12bfA0DcF448A0B7036bef) - mstore(0x6660, 0xEb5c8e0DfA87aDcFBF89f8ed5CA2d6BC4e1e7DfF4aB4f12AEACbfF4abfE61F7f) - mstore(0x6680, 0x85f2814596d3eCD6E57B7130794f852E5fcE0A442fFf46e5f70Ac346e607A83f) - mstore(0x66a0, 0xCc4cfC3D1BAcfB6ba56e001ef5DE3C2CC6c5fBc680A2eA79bfCcFaFc38aC2CDB) - mstore(0x66c0, 0xb8F2e1aE68DFE3D337a4acbCBb950430A0a5DFCa2137f99f5Ce5DfaF10F1746A) - mstore(0x66e0, 0x76Ab9c90b3CF96A07C6CfDdfF58f8AdAa79Ee93d682BA80082f69ccB19c4e4eE) - mstore(0x6700, 0xda0ee4e878CAcdCA2B208A8DFbb6b1942F5DF9Ca896713ACFe6BF7BFaDbbA38e) - mstore(0x6720, 0xCFEB6135Bb873ae8aAeAa7dBAf87E59Dfecb05D8163acADdB7a1d8eBE9a3bcf5) - mstore(0x6740, 0xD2B8ce6ECe4f3c6Fba6f630eD4D94F0f05f4598f5B3f9e751ffeD8e3b07AaDdf) - mstore(0x6760, 0xCA820cfAA37E6CDcF68ee1C35B53f27FcEaBfeE5FCcF63cB5e522C06901F94aa) - mstore(0x6780, 0xC5E8c4a60FEe6ED7692C7Cb5EED4fc7b5b8cBdcCcaCDF1cEba83C7eFfa59BDee) - mstore(0x67a0, 0x0cD87f1e92C2cB9d6cc81E3970D429Ec2Cb8dC3a3EFeFffc4C4e8CF5FF6b9e68) - mstore(0x67c0, 0xa4F042Fc98c08CECAbE4cE35d24BaDAB2e1a63Da89be1361c3956cFCaF649f67) - mstore(0x67e0, 0x1ECDA5C5C03C29bbb8DDfAeb3A1ed9C21246835a10BD11FEd7aCBBb0a588eC4B) - mstore(0x6800, 0xc0FbA426C115aBaF47f95Ed2bDF8eba2e026FE83Cdbceb7cf228c0ccBcBC6BF1) - mstore(0x6820, 0xCDeAEb74CE009Dda8BD8F94Fef4BDbC7abCaDb6FfA225A612c12236cF8F793F5) - mstore(0x6840, 0x85eaEC4bAA2A46ae6b54aedE15e65DAeE020b5af364DD2a7F9bB0c638E4802e9) - mstore(0x6860, 0xce6bFef962DBF09B8c31c8Ba27C0c3462eeb9D176be8e54E1B48b6B60b2DF29a) - mstore(0x6880, 0x80C7dCe3B35f8452C173F6791C0DF691F6b5Fb9A3fEf30DEbaEDf711531eA941) - mstore(0x68a0, 0xCCD42d0af39DFbbadBceF3acae7c160cb23B0cB9ACAe23753d6C79531af9C7af) - mstore(0x68c0, 0xcB7ade6DE23Db683F1b774Ca605Ddea2BF4FC7dCA18EA9e1FcB24beee85b5BCc) - mstore(0x68e0, 0x6C6E157bDc9aB92A8D0CeB7cBFCED2C67b0c1dAe4Ae2F4b5aDEBFA7a905F2e2c) - mstore(0x6900, 0xA9cD8DB18Bdca2c3B5d25C66C1e67FEf9F7cB9fEAEE37A1eCaB4ba79CcBAeF2e) - mstore(0x6920, 0xFbfc47bd7156D8a0B874BF6F682BCA75CB932a89b6B3f98d461c9822C8B4dcEf) - mstore(0x6940, 0xa42fe83dd96186f9c1608B937155B6BCeFDbb87b6EdefcFDAa136DC9DeFB7367) - mstore(0x6960, 0x08BcF87Dcbc0BBD038196fb3d5d3Bee8FA9447f3eeCD0885c9A5Ab08e8EEf3c7) - mstore(0x6980, 0x344E17DaA70D9C0EC4FaC33b1A38F9f2EE651bA92B2F09cBECaF34861da68ACA) - mstore(0x69a0, 0xA0C6F09a314f0eDBb748b8e1BcebA97bbe2CBCe54d9eE8aC5d67e49100b8B2e6) - mstore(0x69c0, 0x0eebDf4675Aaf4567D86c449A0C6FAdEabefC33A8B10d55Fdd1dEFcA9e8a7D6F) - mstore(0x69e0, 0xbeb969E22dFaE30DE1E6AC0fD2dECE790cc67e56aD942AEeaeB718d7B6c7A6Ba) - mstore(0x6a00, 0xa6C79a9FD4CAcbd6728eaaCe0a2fDdc72DEf73d67eC4eEDad8d1adbBBEDaDBbA) - mstore(0x6a20, 0xdad0EC7864Ff9618450Bc76e820F17A5f90b6f91Cae78a0DAa69517edA4DB6Dc) - mstore(0x6a40, 0xDdd01158B2BDF89e1c5C98323aD760B1d0E91Ee39C34F7CBEd926fb03Aaf44DB) - mstore(0x6a60, 0xA8983B6AeBeccEcd63573E5Bb9f005bb3ECeb72f826365f6fC0F9cFE7fe82EB8) - mstore(0x6a80, 0x843bF4c37601cd003dAb6d357FEeFfBAdD8fFdAFBBD2616Daa39aABf222b85d5) - mstore(0x6aa0, 0xeD90482cdADE774D6B0e02B2bEeD638b29EaDEbcF9d0e97cBA6AE46472AcE233) - mstore(0x6ac0, 0xED1910bbdBeAdCb874b8bE19ea9e250645ccf9FaccbaBF76eCcf10F5ce889ECe) - mstore(0x6ae0, 0xe5AdbeB31dadE6FFde416a9387d5324BFAa76Db6b4E5EEb5CB28AD4587dA1ddc) - mstore(0x6b00, 0x393Bd8aE38bA42bb4103FeA1d4C94d16BF73EC67516a63acde9f664650C4B584) - mstore(0x6b20, 0xFdE8CC3d36BFdf6b39cB7EA1Feeab616F0a31e71AD0EfAFcA18de4E01a49D3B1) - mstore(0x6b40, 0xfE063ed2d688aDA697aC6A9B625224cd89ea2Fe582CDDEbD6e41BFEE0CdC8eDE) - mstore(0x6b60, 0x532ECa855dEB8c4b9bfAEbe11e1CDAB65FB61da8e0820e7AdBdD23FcA6A6633C) - mstore(0x6b80, 0x76632cd1dFD2Dd9e1AA1cFFFea56403FcCf9Cb4cf57ceAD5669a62CcB702C0E9) - mstore(0x6ba0, 0x7426FD5E6d9413Bfcb6f1cC1Ed61B51e9e4D89EfE7b585F87e9A36C5C6e6028f) - mstore(0x6bc0, 0xDAcbc0E2db09cec7f564FB5cc1Ec32A33090C307af7bDdFdF6e35c3b6aAbf3e6) - mstore(0x6be0, 0x7eEfaa4Ca5ffDDcB2E81Eb5fc0ABaeaC3e7BF51a2fC5b0F34c6eef1E2419DFC3) - mstore(0x6c00, 0xd373B0B8E5ceBAbDa38c4DDc7bc8227ef55aDFf32EBa30fcA9B5b0396e7E91F0) - mstore(0x6c20, 0xAb0ffEA5A6E9187e1BE3Ca39f245cCeB087b3b7d5701dB5FaAAc66b8dB67BDFf) - mstore(0x6c40, 0xEf2d597b94d5d08813A46775e8Af217a13eA3cdcD03AC8ce2EbA73a6e6af8d67) - mstore(0x6c60, 0xDfC10A44Aeea0F7f2A267ceB498F0CECbbbb8b79D212A9edb87767daBdAFcD24) - mstore(0x6c80, 0xFb69A0b48A0e0F24f1a1Fc1658877b1AeDdBc8e9eFAE635eDe1d836Cd7cE5ea9) - mstore(0x6ca0, 0xd2F3B7C5Dd3218A02eD6EdDE3D729E1B497D905EEEb2E36CC8AFcf6c1EbBBccf) - mstore(0x6cc0, 0xC9FEB7beb2D0A1AB8fd7AeEdACfd25A6b4cA0BC16Da55EB08EFE7B7fE68d9db9) - mstore(0x6ce0, 0x72dB5A6ADAeA4ac3B265eD83A805cdEFD9cC619CfCC0b5136C469fCAdc8aCab2) - mstore(0x6d00, 0xA8Dd85637756A65eB0Ac77b5Ea6Ed45CbA05EcdA1dFa0a77acf6DcAA98cbBCBd) - mstore(0x6d20, 0xecE9aFF69fE6EbA778DA5985De8baF5CaaaC144c3bA9e7fE41c081bBCf90a9fe) - mstore(0x6d40, 0x014b48eaDA3daa6b5E652Cd50620dDbcc29fBd5E19Ce9d9aaa3Dd6007d36aA1d) - mstore(0x6d60, 0x1E3aE371cbdAFFa8B57c1CD41bf54FD9bFaD66CCc66dDAaa9A837f6E08Ce6C76) - mstore(0x6d80, 0xF5dFd1C504dC1F65AF4F46b7c95cC2eFa35f19be6edba0F90E815fDaBB7D62a4) - mstore(0x6da0, 0xb6Cbcfcf7Da0ca47AcbdBafBD97AB3BfbaDFee4A6A3859f5D4bA1EFd2c7B4341) - mstore(0x6dc0, 0xCbbfB5Ffd8d3d03fFd452ea0F81B01Cff3AA8cd0dACe00EA2C1b34eb1CEe27a9) - mstore(0x6de0, 0xfF1A6CDFb10baD4D1B7b2bDcE50ffde47C49E13dc34BCcdc9780156ef412c4A6) - mstore(0x6e00, 0xF1ab2BEDBd82b20823C9aFbC1E4D6CdEddAb4A3923a609B1bcF7e11E0F54eE5e) - mstore(0x6e20, 0xE73aF5efd7Aff4034EA2445bAEFbeae781546CD12C0E4956a63A901EAc4cB462) - mstore(0x6e40, 0x8b97B6CE96CBb8AEEcdBB7e47E9dc1C2C7CCd9eEfdCd8CEd6F5cC79b6F577Bf9) - mstore(0x6e60, 0xbC0bD394F8Dcfbe695931f875d55fF15e325eD39631D843cE30DecC115387E94) - mstore(0x6e80, 0xF90a361DB7DF11b55893fAb892FD2dee4Afc4Ddc57C2aBCFc79a4AA09a25F213) - mstore(0x6ea0, 0xd8daAA35c61F95b2BAf32B8CB5F6966eC6ae35bc55fcaE7Cadad67fFD90CA8ac) - mstore(0x6ec0, 0xDeBf5eE4b8F2232B6df6a4BeecB4bD8DFFd0BE7e24fAb01AcA507BCFEAd3aA9d) - mstore(0x6ee0, 0x2b1aA9D78c485C7E6f0F4378f3DB8a0bf69F6AC03267Bae782Ce21A8Ee4cea8C) - mstore(0x6f00, 0xE5aeac0F511a3D7cE1dB8E54bFCbF1a76DeBCd31108FA3A80E9C6EaCfA2aAcaD) - mstore(0x6f20, 0xF1a9FDabE7Fd21bfa1dBeAbeFb9d6a4B9c1a54fe46d6D34A53Cfff1f3D1Df5ef) - mstore(0x6f40, 0x3f72eE8c9326A8fdaccCCdDbeABd4fED90e9Cb72FE44A6EDE1545C3cfD3A4FB6) - mstore(0x6f60, 0xbcA7BAfF6bD3E7947B6C5BA1d434AdDB8F0b3BfF52E46c3c74ab7D7DAfDb5e0a) - mstore(0x6f80, 0xD148a7d407E5FaCD6BdD9F761b3dfD66c030DaD2Be03118BbE5bCF3bf57b6fCd) - mstore(0x6fa0, 0xAfD57bCAcbeBed2cAad6a0D1dDdFb745F8FCeDaBEe6Cb1bBA0EeCfA9B27BE095) - mstore(0x6fc0, 0x88c76CBb6f0Ae9fedDD1cA5d8CfeBEd5Fef98228AA6eD6bEC756AA6AdF37DBbb) - mstore(0x6fe0, 0x2BdE5EcC1Df5B50b9cd30CfacE687D3Cc18330F3916CEdF03F3f245d2810Ee5F) - mstore(0x7000, 0xe0B4Cb8C114329dC91e0A82EEB21EC8Debb15bBb8De56A471a119005904feB0C) - mstore(0x7020, 0x3d3cd9D8D8bDA211dA43C94A4562364b08D32a6DCc8469d57c6B2A71ac7aa3F6) - mstore(0x7040, 0xCDBF1B3DFfA2EFDAAf3424ECdFEe1DcbcA647eAbbc690CAeC6F8ca3fe5Ea3832) - mstore(0x7060, 0xBe3b3C749D5B0F75E470Dc44ca25e17a487797CBA3ccfAbE6fE0bbbeED1c2880) - mstore(0x7080, 0x11ece3eb78bFeD3a358355AaC4FbffF2cE7caDaCEaDDb2EfF4F2063a74DC7bd2) - mstore(0x70a0, 0x6A2BD2D3EBD5c8dB03d91E7e865A417ddF778470Dabcd12FdB82CFCFeD7D9A1c) - mstore(0x70c0, 0x7d7ac6b83b1D4EcC5e71BAB9accFEFA4098BB7dB6e0Af52AF5BfdDBA3BAdC256) - mstore(0x70e0, 0x4B0AfaecBECe16EF762cd7A21dF6a56eeE7ff5130F9dB297d2418cF970dDdbd5) - mstore(0x7100, 0x8DabedAcE64d9ebD667c563dabEa9c16CC2F1DF9b575F10f56EeC37aEFE681a5) - mstore(0x7120, 0x294Acd9993dA4C6F6cDDde84DB32Cf5Dc5Ab67eFE5eD7DAdfbC90cF63821E1ab) - mstore(0x7140, 0xcc3deFAA47C0EccBfF4ADC40f3ccfFefe45411e012F57d9CAD93eF80E91fDE1F) - mstore(0x7160, 0xF6fdcAbC7DB9F492CC2c17E426094dD449Ae322FdfdDd4FFddC2Db5273135db1) - mstore(0x7180, 0x980dD756ea067AD1A0CCFeCd350A5120Befc151B301CaB80DF557fBAc2FEA5FD) - mstore(0x71a0, 0x648a9bEeBdB5A03f9A30cbf0Bc2A92FcED53BE8e4DBA7bAcd1D54d08df77BC92) - mstore(0x71c0, 0xeD286E65fCc6Ea4792D9fe3E3b1a155E66ecF3FC41fd5E6BfE11776bbcfEfCf8) - mstore(0x71e0, 0xdeBbeDaBcBf8f8dF9Bd526FbDd3b3B89eF2BA9C9c68fD7FBb7782fc3bEAcfDbe) - mstore(0x7200, 0x42b3ED4CF5709F880eAba723f1EBe1169172CeFBEEC85ff4F8778cc86Fb3D9A1) - mstore(0x7220, 0xff50E9Bd1bCF2C05EAC480B28f8a0AfD10787F45703DF6a84EA8ea991F51D86D) - mstore(0x7240, 0xBb91Fb000E47EaD6d1B6cdC2fBeaacB36BB217Cc49f1Dc6cDAfebf3A6CCb9a1A) - mstore(0x7260, 0xe0189bb7bB1fe06830D180C2FA9756599b9B0EAa09ad2cFdcd3c1df711F66eb2) - mstore(0x7280, 0x31aBd3d45aBC2e7733A30cD52eBb65Dd0aD4FE2fD9Fb011fe41c7e99EB5d9Af1) - mstore(0x72a0, 0x9cf3f1b1BBadEcD6FCAa1b00b5e4E83AA5773EdcCf1e6A6e6ceC9a1AcbE4DA1B) - mstore(0x72c0, 0xb93Fbc4CbCfFD10dbC7FBDd8c257FD70DeBa3abad9a3cB31c2BDcF806CcB8DcB) - mstore(0x72e0, 0xd0dABCcEdDBFFBDae690EFFccc8415b23ec1A0Fe89bdd6b6c99dD5e22c8Ae9C2) - mstore(0x7300, 0x4BE404b6fa85A929FEAeA6F4cFfeb763DC5dd88CbFfaf6FcAa1c61Fd1DebBdbA) - mstore(0x7320, 0xB2c1acbe1cdAbC9e658114cBb9c84f2cf7f102baabF5684F5c1CbD5838eFCCaF) - mstore(0x7340, 0x8C88F734E1b49Df4C7e25bE16e92DBf276F61E211cbBdd6221ef823e51fA45Cb) - mstore(0x7360, 0xada9C6cee02E27aBeaA648e61Ce3847BceaE5FD960770d7cAeE3Dfea90bE0F61) - mstore(0x7380, 0x5a34e141e0c9F3b95Ff505eC38c3dC8ca4D6Ca35FF1692c92Ab0303A6E36FD27) - mstore(0x73a0, 0x4EFb6647BFF3BD6738EFffE3d85BCcc3c82dFfFF94dAabbFeE92E2f98ebBa9da) - mstore(0x73c0, 0x5BeDe6b39B8d8b0aBC9709Dff20059bf78FE57CBB9785ac7DcDd5efac295e72a) - mstore(0x73e0, 0xFdfe49c6a0Aa842f358B812feDEE3DaDB94bea5c3d8F1e4AbEa16a7F9fa7d39d) - mstore(0x7400, 0xaE4DDcfCba758EFEe14d6fCAdbbea8ba64BdE96feE8FCCdADfF9F8ac5ca19adD) - mstore(0x7420, 0xffFF1bb7DcBbabCff4Ca7A5ff4FaB0eb781Cc292EEF9F4D356C8D4A29ebB261F) - mstore(0x7440, 0xeed61eAa041aDEeaFE5BF40593788c14ACC78e975d4aB4b88CaaeAC2De3F287B) - mstore(0x7460, 0x9Ce5cCDb7cA47Bac9317aaEBdc7bF64c6fed69803CdcFFEcA0F6B65b113DFC6d) - mstore(0x7480, 0xDF518d8BF9Abea3Eb90aE0EBb8BD74e0c83B4E3ff38FDd1AdD31AdaEBD99a17F) - mstore(0x74a0, 0xDAe5c879cF25fc8474F7881Da91B1e8f11b5F79805Fda5fa243ffd3E62c63556) - mstore(0x74c0, 0x36096f302b9f4e7bE397b7CC33904FdA84BA9795236C6240E9e0CFfcc0FAB3a6) - mstore(0x74e0, 0xEf5a48cc7FCE6Eae5378AA8ba884F5dCF60CCF2ae0bAEd860Ba992BD646e3Ddb) - mstore(0x7500, 0xBDccdCdF06cC4cd7a2bEab1D49b2aB1edB6b01E1B3d89bFEb784726deb0Eb92c) - mstore(0x7520, 0x3c174ba6F9C64caB45962Fe09e5c5A60df28a3D1cB46A2F11b498698349Ca011) - mstore(0x7540, 0xDFDc737ED380872F8Ccae4FAfE8a70eE82cEaABb96f9BA10aFDeaCa2C19c9AFf) - mstore(0x7560, 0xb6ccd22DaFcEa992e69d0Db0195c0f5c22cECB0b7AcbEA5aAFCD114A11BE7AAF) - mstore(0x7580, 0x6fA74A9c2BFda7dF46345EF0FcFbCEA034818d0ec2Ad863ced7E6A17d49D05e8) - mstore(0x75a0, 0xAFfbba24e3BFe9d1b9A0A7555c430e3AF82BFE76b0FD8120A90984B18849A85e) - mstore(0x75c0, 0xc2B4AaD1e3D1d5121715cdDD03325Ced4d53a086F8850992E3A529116ddB4EcD) - mstore(0x75e0, 0xE824FEF313B92016176eEE0A0C847Fd759Cf2964CB881bA1a0F2cC4CAeAc9FD6) - mstore(0x7600, 0xaFd3d508fb02EA441dF83aadEdbAfDE6Fd6CeDb10250E3de30d3fdFAd76Fbdcc) - mstore(0x7620, 0x887D6E5c73c3a0239d75Eb37Aa0eDfA5c621AFd0af7aF42fFab0D3bd6eb6B031) - mstore(0x7640, 0xde4a57F8d8833dcbca1E9f1Da2A3fc5aCcbA2225A4a3DbeE78C3Da4F3eD2Eb07) - mstore(0x7660, 0xe917B51E446911C6Fb36cC6CDEDaeCE2Fd15446349296daa7bFb9AdEFd14de2E) - mstore(0x7680, 0x9e9d4D1bbB8FDDEa69CCb128E0db86E98A91c6E875C3ec9faF0bdD2A08D5128D) - mstore(0x76a0, 0xFe6d44EEd7AFa75eE8CCCa3fac2BD78e08A3eF3f1E1b5f39a6c0EAb9b2B8c00f) - mstore(0x76c0, 0x740F2Dd3EBDacD971A9340cE1e6DacafbcFdf4FD7A860c99e363Efd5b4F4d48A) - mstore(0x76e0, 0xcEAd810acCad9fcf22cAD0EFE57ceaF9738eb2ddeE3B3C9b612987bE5b5caDa7) - mstore(0x7700, 0x63781d3604AADe0D27e33a3Ad1F8ce97E3EEe1bF524c43dDe1d25DEDFdcEBBa1) - mstore(0x7720, 0x1D8d6a1fcd537Aceff24972DcbF82EAaDbCdfc0BaF2F5bDC0bCe8Da0f63e0Dd4) - mstore(0x7740, 0x8cA14C5c51B6db318d01D6e07Dcdf06AffB1905C43Fa3AA39a6b2a3A7a14CF4b) - mstore(0x7760, 0x59e4E98CE90EF8ff38FBB3591eb0fdb2C6aC02a35C0Ff86D8787D808bE210552) - mstore(0x7780, 0x5d32d1c2aFE04BF3fE54Cb8247Ff21a3E63dF4EdfeeA516A16A269ebf6B2A1BC) - mstore(0x77a0, 0x5cB3AF1cc5d82f4d4B208cbAF330a7EB9D9F8632dA22cd3604DADFABFB855f17) - mstore(0x77c0, 0x2EFb00Dc7AEdfcdA31C2e82a2BFc0EBCAF4d5A0587AB647F9e0Fd3c7Cc4A5CcD) - mstore(0x77e0, 0xC87BcF3c0eD382Fb296AeAe0ade7fD0e37CBB8EbA3C4689CC86a65DDbAa17C3c) - mstore(0x7800, 0xAE97d39D33E6f8dB0CFcB4A820B808cD9ED56C08Af9EBfdDAbabcd3C59De7F77) - mstore(0x7820, 0x0530C29A58Ff567Bb4445E8B35D575CC921BA3Efa9b2bD762c41E5e6c7abd733) - mstore(0x7840, 0xcaa23dC210f93Fe804A33DFF23fb64Ba3FB4CEA931Ad039D195e3278ebC810E8) - mstore(0x7860, 0xE93B1Fc86d75aF04eF1849b3CF658B5dB0AEDcA357509e56eBbe677d762ff860) - mstore(0x7880, 0x8429423e8Df6AB8d9B0BbfD8FdC5FE5b343fA52BDFa5C57CD74CD452cCCA013c) - mstore(0x78a0, 0x2694947bCaEEBBB4f24f47e9AA8bDE3D195E7DEBFAAf61Caa35Ad29FEF5C9A0F) - mstore(0x78c0, 0x82BA4ddcb46EE14Dab3FCbA8bb309eD0bA65Fe2DC6F56A8daD544F9CDDc04F9B) - mstore(0x78e0, 0xBc9EE0384Ac1030EED6Cee2EcaaEE0f8D829fFecdfe384787E79d0cEdD1fb50B) - mstore(0x7900, 0xb2C5c0c07aBdEAd2eC7fdA2acee1b591ADEFfaDC4C41a8aEDf492b7460ae4633) - mstore(0x7920, 0xA17bCa1e798f7FEeb7e4Aae4CF6a369B0d4E9EBeeB82D7DbC10acBb36777Aa94) - mstore(0x7940, 0xc0153B3e9AFf7B72A110db730C4ECEb23aB1A506aDdE2A619DdEE0ddD8c00c3F) - mstore(0x7960, 0x32DF55d85fb9BE5519abc8b82662b715DeAbb97fee95BFBd168Fb6dAbB43C8Ed) - mstore(0x7980, 0xdfCa682eC36fFC92C8CBe20ea1c8Be49F54a807D9E293271eDdf4Db41dBDD3f5) - mstore(0x79a0, 0x4E9BD9d491669dABA510f0D8F1Ff83Cb450Db40f362E1abb62CA6a1f1FcF2DAB) - mstore(0x79c0, 0xbBb562aCDa878903b2CaeF71243cd359fdaF5aDEAc92faFD77ef1D9B1ECA7903) - mstore(0x79e0, 0xa9cce50A7f29Ef949F469b3d2F8fDCe90aaD7EDDEfB7eD1d8A755FEEDbEA438D) - mstore(0x7a00, 0xAAAe9dC319F2bDf8dfBbFa9fd6531749f5F54989F1a95b3a9b33fA6F571c6c0C) - mstore(0x7a20, 0x3A0510AF9dEE01015B2AE4c8186Ac014CaDbC39fe2072eB9D7c292CC89EC47fe) - mstore(0x7a40, 0x0C8887046C0ef6BFAFd3BFD6639e327E4C6d835e6D9dD98FBa3FEbf4e7242d1A) - mstore(0x7a60, 0xd4c8a05607aaBA459BE2629AC2C7ABBd41c5a4ECe5713Af8493d42aA38EdC44e) - mstore(0x7a80, 0x986517BA91D903Cefab1Bf9881309e02517F771BCc1ea52C9fBBbcD07cBe4c30) - mstore(0x7aa0, 0x0Ff069aCe82a6AA9efAD48010103C82F5c81058ea0525AE0Be14D4fFeE6C5f86) - mstore(0x7ac0, 0x2379be548a5e45067e022eCfC5Ac036328a2DA3d9e3C002b56A0fcD04b5BD965) - mstore(0x7ae0, 0x96B9BebEdF06acDd02d493b1A9d8fe952eCE2DA2D3ADaC8EaEe7b3309C00ECaa) - mstore(0x7b00, 0xcc11B4BdD47d38aF6624aa35Efa6D9fd37930e924a4dC56ca33e286Cac8cD36B) - mstore(0x7b20, 0x7b81d3aC235A4E16bCCc5d69e4D59a54ee9Dd186a590b8ec73afCdAb9c8d879a) - mstore(0x7b40, 0x4ea5cBcb75a180Ddf5aDc9d4B132edAfBADf0F1bCEA2843118Fbd8EF44Ccdc3b) - mstore(0x7b60, 0x0A2864Ac42ad487EF8Df240cb105BbcE2E122a6bcEDA3cfC7EEaDC77BBeFA060) - mstore(0x7b80, 0xE79dA8e75EF5bF6c7AEAFAFaFd0e2eFAF2EB573eE38F5dfa5C8CBafBF15B7653) - mstore(0x7ba0, 0x3e6FB78f3CC16E3bA1fcDDc494a108EFfe54Fa3e57971EFB99cdC51B2a872eAf) - mstore(0x7bc0, 0x3967DA71dabfB9FdCE9d39E2e2aD8F3DEB510B668CbdAaEeCA701bc2FEeDa7A6) - mstore(0x7be0, 0x0566aa0dFCeCDaEc07eD2BBa5ACEBf678f8cf6A9d28F5bBBF2fBb67CD210A6d6) - mstore(0x7c00, 0x9afEE60EB2c5c2c9bD9bF9b2F5eCEEEF13a4cCECa9Edabc9B4D1eAF9e1D6ae67) - mstore(0x7c20, 0xBb93D9a8cdaDEa18CBc58EB5bbda8A78eEF5C20dccb0Cdc9BdD6eBe1AEDEE6Ba) - mstore(0x7c40, 0xecBf1C40bB3FBeB5dDEc56Dadb82aBDa0044d5dfAE9aed13DAd1F851b6ad52f8) - mstore(0x7c60, 0x15f8DdeEcad8262723CD5f3dc530E15C7Cbdf0d08eAD23d5fa3Eeb274c5d0374) - mstore(0x7c80, 0xe14DF98b1662e91F55Df4E890d61dEA14AF1A8b4b6Ea1aFb80C3ca228E2f393D) - mstore(0x7ca0, 0xC2Ccbbe70bEDc9303ce9D73D4EFE9eeCa4d39659698052B53bab793bfb45e1b4) - mstore(0x7cc0, 0x1a3C0cc6EB04004BfD578a0f9b58F8FE6de1abF007f41f42B6fb5ACC33eABFa5) - mstore(0x7ce0, 0xEC7a93aC033E8A3dD61Ac6d1D7ffB1ADd6F7dce7383C8adDd2a792e0F4B6Ad6b) - mstore(0x7d00, 0xCA3f4a0381A31B99dBabC14Cf2C256EDfdFcEF6987779b706669a0C9cBCafDEb) - mstore(0x7d20, 0xf908C2cddA99dB42CAfaFa3EcFbc18Cd3142e0b367EC4DA5CE475f9123e7142A) - mstore(0x7d40, 0x29F43b0CfDEBa706A9CE303174bD6dab7e76e2a1ECE5E2a3aeefEca645fB0FF2) - mstore(0x7d60, 0x67babfdF3cfa1fBE6f47E4EE9De9CacA7cDfFdA8F4aC9d4DC1F142dfFAf94Ea5) - } - return 0x1; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/Push.sol b/crates/vm/levm/bench/revm_comparison/contracts/Push.sol deleted file mode 100644 index aa2b33f8c7d..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/Push.sol +++ /dev/null @@ -1,1021 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract Push { - uint256[] public numbers; - - function Benchmark(uint256 _amount) public pure returns (uint256 result) { - /* This generates a long sequence of the following opcodes - .. - PUSH32 0xdd15a3172beda9cbabc29078d70db1e4a7e6e90743a5d72c041be9d9aa1bc193 - PUSH1 0x20 - DUP3 - ADD - MSTORE - .. - */ - uint256[1000] memory accounts; - accounts[0] = 0xdd15a3172beda9cbabc29078d70db1e4a7e6e90743a5d72c041be9d9aa1bc193; - accounts[1] = 0x3292f362f2112d2de241bd3ffaf3fb08658a99cb2539ac5843918e5ceb4345ce; - accounts[2] = 0x9a207f9737e7c944f5fc54447a3e1d4968426cefc55dbcc6fe917390156bce5f; - accounts[3] = 0x56948791940313a9c4430188cf6f8ce1fc344c570196910d50d8994c98ecffda; - accounts[4] = 0x3720a59cc366cb4479a1e2d7f18a40b622252783f31e1fbff34e41718659bd2e; - accounts[5] = 0xf6a8356cc2ec7fb9fb16e19549f0bd5a146346716a491ae2cfade6f0a848df56; - accounts[6] = 0x1bd8ab3b7ae5e41b6d7031da7b75bba074349f6c474aa615724669f163958ba3; - accounts[7] = 0xd7742197fb0a53b179020521d7172203056a385654e2855bc5beae1aecd217f; - accounts[8] = 0x6570841f5d3debf156ca11269412d361c81a4dbd349ba81e603298d59f3fd5e8; - accounts[9] = 0x9f5baf50b34dee2c16708b7a34a95f5274944236d3143045fd4bb8f4280c484d; - accounts[10] = 0xe774c5113ad4c14dccb7b231ce346da60a310fa56058558c4b419119c13ffb6e; - accounts[11] = 0xa984cb87501566787240cb8ba675a70c4c631b237fdab17927f9be115b0150e3; - accounts[12] = 0x467ade8864385a8dd6c99cf1681343623ed9fbecfb36360ca61198ee9ee10b9c; - accounts[13] = 0x8ce9d7c9eba62a7483e35434c33a3497561a3658cb1d4c2d005a3cf8f4b9e187; - accounts[14] = 0x7c4138d0f008fba217c697f8e6567027cf72f2ac2a3a5a1a5fb8d67fe7197626; - accounts[15] = 0xeb460f497b117869fdc299bfaa69c126ada80a129a49c69737656004cf7f7622; - accounts[16] = 0x4b957d17b9527617955624c0c15049101dc0ba02156bdfb2b85fd596503ed196; - accounts[17] = 0xda710f3b2e405ee41a36a1349c3a7d2b9adc844d6849cf4f0691604dde989d3c; - accounts[18] = 0xedaaba82e4f988469096c90429ddd65cb9e5a9d5fcf72a10a6d596d07d041170; - accounts[19] = 0xd59c33cde4d4f790b8a517fbf928e02e813a540ae0ef25e4c440216ddab4e1b5; - accounts[20] = 0xecf82602c8f4c25972bbd24c667e72d21bd17e87e767c092b2b4f69b89a60afa; - accounts[21] = 0x1f77ee5167939ed72e2e46f9fdb89c50436965f25ac33c4d5ad0ea0a259ad3bb; - accounts[22] = 0x84acf1dab49a696415c5e7a28922b456a3e10743d9ee8d47a271ac917fc0ea27; - accounts[23] = 0x27605b86562bb21362787fbae7b4569a55196a2eb39d778c0b149e1466da0861; - accounts[24] = 0x157c9fab0c8c94e7ff61436c463ba09aa7aad73dd574e77d4dec87ef88791723; - accounts[25] = 0xe94e6b3034825625133cf6851c6cc886b3a9c04d632fc40d4e865196ac532ba8; - accounts[26] = 0x5bd164a593e76ffefb27f8b6fafe3156db1709e0184a757f5271cf648f44c62d; - accounts[27] = 0x94a2159c8c9295cc767527ca2b4f57315439306eca803954e34ab1168d668e1b; - accounts[28] = 0x2d8464a6b579e86e23c189c89c1ffb8cef045058e0b772ee7e35ae0a0ffa5a24; - accounts[29] = 0xb4216fc6686cb2f388529256ee1e946313a3673df945b406cc8d77eb9ace14d9; - accounts[30] = 0x7a320ac4a3bee48b8e4a0fda7634eb91f3cfcdea1aeba596d6f7393f2a7c84fb; - accounts[31] = 0x5d9012920b3b2d584c56cb45d48426293ed2a395d43ac03abf26bbfb02851032; - accounts[32] = 0x37837a24d89286a8f530f86f408797234689f4a1b10af607abed023839c3a774; - accounts[33] = 0xaa6decf81f392889301cfa495444bba1643b87f3e5d977e5a0837751fa71ecdf; - accounts[34] = 0x6249a2285ee61a8bcb9d77d8d1bcfa779296a4e6707e1b925c65c9b74686bc58; - accounts[35] = 0x1d6cbdd13bb0b6df9f791ef368cd49b5987a6908dc77118909aecccc71e9b531; - accounts[36] = 0x8dd0cfdee4074c35c721d60f245f7ef154859e73e5a0d7725a1080903a6fb3e1; - accounts[37] = 0xe08616d56a694a1b77e41f94dd50a7d7e0acb98bc6b2165af33834b0c1d2af9e; - accounts[38] = 0xb547035e113371d706171e843e1ba6825fc63a3af62689e8bdf4500b2aa6f8cb; - accounts[39] = 0x356f9a5f0c865de35041c3a25ce85c131eb9ab7bd729a64657e6b9136b5d88a2; - accounts[40] = 0x6478c7b2f164ad30c783534f28fa71c915bb1642678835b959c99f03e67ce61f; - accounts[41] = 0x47f62094bd37a4e76a0aa0f466126f929d914017859d1a0ee7c8d18ff9ae2568; - accounts[42] = 0x41ae63eb551dd8f4bd37742bf724c6c69d237ceda0d04d23b94f940e7087d415; - accounts[43] = 0x270be7d9d25ad6130f76d12f17710a9b0f535189a32bbbcf18dece58a3950010; - accounts[44] = 0xabeb8f30fcf447680132c2f73fbaf41445a76219824cf715df275e23722068b2; - accounts[45] = 0x32ee6ff8aa5f937227464fb4a623d1dd5ed9c3ba8c252214e713dcb0cdd8fe5a; - accounts[46] = 0x71a6b33f95cb77e62142afc60f7f1b8e27332b9be4ace1591eae30a5b9e7c2e2; - accounts[47] = 0xd0995330a916ca9214c1a4da5eb2eecefc3096eb0dc51d9d0e26c113bc43344; - accounts[48] = 0xb51a327b1314bb04bcf5794ce717c5710e16e415bd6bc8b9077d904dea309e63; - accounts[49] = 0xd312cb4c6f1e940bc49a92a76ceecf11eaaebd624684e600cb7842f5722d7917; - accounts[50] = 0x33ca402031935838484b8bffd6b12cf10a4c8f2ad11dc60a412d7e8f5edaf079; - accounts[51] = 0xe2cb22f3f93e1c32189bbac1b7de51d6620b2f8abcdccff5e40c8a1b941c496a; - accounts[52] = 0xd9aa3b3df29cc4a01b05cfc99f68c18f2ba90fecf303a705cf4e866385d4120; - accounts[53] = 0x6289685523d96a344934202eeb71b6720393a657d30798d150b030d5ae2e8c04; - accounts[54] = 0xda8a51ab2ce81a7431ad557535ccf64e82cad9f436ef10f2d55c07c33a0d0ecf; - accounts[55] = 0x7178d477dc03e5f92718cef321a2b7da9ee249f67a556bd371e1f1fde9b9e85d; - accounts[56] = 0xc4f1193419ed8a52e6d0c4763cf0fc239cec2548c82be6727d247d751cd4bf3c; - accounts[57] = 0x3e9c34b1fccfcc64b4ee89e35961563a02a4097eb4dbdbb1fcf8d2cd91309550; - accounts[58] = 0x658ca40092ee3034562670661ec970879d0cace6c98d0a74d69bb6998833f04a; - accounts[59] = 0xc454420b3966abd87a5675a5d5c33e355619fb468c057847e4fe5a992f881da2; - accounts[60] = 0xfcdca91b62ab964f6a98bcaeeecd7f393a04784e0501a62c54be1a6f1d5dd43; - accounts[61] = 0xaba8c04d2173fb21569ae6e62f0756f5b8b1ea3361abb0d17c043d4ded44f2b0; - accounts[62] = 0x8337b0c2d72191f324b2af14c602802e387d89a8d6653113de6885e6b3553077; - accounts[63] = 0x34827ab42f4b567e5b7eae03e8fb76ae90bea8e028f3a716108185c8d960709e; - accounts[64] = 0xab44824ac521997303ffcd73f9d7f703dd67020726030dfd4c8978890ac040b0; - accounts[65] = 0x357ef43a5369c0402b8b7ebf528acc8e2b07d7e7c5f25bab558ba3196bdd0d8b; - accounts[66] = 0xc8d4316f8f92c915a261a529989e9ef418ff487f7530b5b3e7f981e98d5c762a; - accounts[67] = 0x8ba918fcd883aac551584305ebb41200ef9fd14f8946d8c351ca1bfec7335752; - accounts[68] = 0x7a3a74eff91a95b8ab2881b1c6f48d672f676973deb536a1f9471e2b50448f50; - accounts[69] = 0xef853f48be8059caf27483f9803f67b82ef56014726405a04788b325c9a4113b; - accounts[70] = 0xfec896f3a1817330346ad913c9f3e3c2c45b59fb56480c2268665dc1d81c7756; - accounts[71] = 0xfb6a71fcddfa3cd5089b7610b5b55c7bee7449ea2f3fcd7c4b594c3d0e8b1d28; - accounts[72] = 0x7d34664495e2a735c5faa0a7688ab59c5a8da088a0826f5ace3d79be5ee8925e; - accounts[73] = 0x2e99790f94774ccecadc4b2e74c40d914636b200ea0981799d8d232cc1dc50eb; - accounts[74] = 0xb6962a484b083ed2b751185af3db316eafa3eb326a6675499886264135342673; - accounts[75] = 0x8402dd3f37b692cfda2db14919b9fc1577ea879ee20ba1300c6a69c525802ee3; - accounts[76] = 0x7d88a05c2e920cc080499124fcd99f4d1a49385c82fc994dd5eef0b1aafed527; - accounts[77] = 0xb4d278c21dc18d627dfb6e410f65818374044f4f7c7d3d53bf4f84f4a3309c5a; - accounts[78] = 0x6701e5b02eebc0f4126d28a5cf82bf0905f1c2e92d2381ab511eef85cc941f8; - accounts[79] = 0x53a14c13e8b6b402917ed01ea48a9e6221cc74e466b0233491f9aa42d0aafd89; - accounts[80] = 0x912102cd548be19cc7d2c92bc543286e1903937822931ba0b4b0022e9559d3eb; - accounts[81] = 0xaf78e97f9029858aafa2a67927cf759a450ffdafbb2d157385210e91ea5c09a4; - accounts[82] = 0x60f0cfb3e63d825a3c8951e7803efb1bf9cc678dc92e12ff638d7cb2ddbf2252; - accounts[83] = 0xc2e917e9b21d8b8cdb2ccb923ec881aecaee56bf717c10244006e16d75fcabc7; - accounts[84] = 0x759737099ed78f3271f573e3935a4953993b6d307d175ca7ddfed5d181649ad8; - accounts[85] = 0x3896e534bdb83f4ac1a67cfdb7f2b4a54440e66e9d82db0f9abee7d2463d8392; - accounts[86] = 0xbd4f519b6abe004c338647d5d2e4e8ba5273634781d7e858524adc0d2c5cb201; - accounts[87] = 0x6316a3608f298fe9e4085aecb50629134f22f9b829d6a1549669ebcb554f1091; - accounts[88] = 0x8f2ae147e0e6a0fe41d5a717c18fb8e47a5a7f434f4f09cdf2e6712e3f34ba66; - accounts[89] = 0x10c1be1a414ceeb61458b478216c8defb5351f4125bab38530427b8a3c6c7e5b; - accounts[90] = 0xb085cc0848d1b364c1b895ff68ff150c26a8cb4a2c2ca17580f4937b91a01b20; - accounts[91] = 0x1d3efc40107d604d703fef8a09c11186a1605e90d18a09ba0b04bc3cae47d6c0; - accounts[92] = 0x10f2cc8a2afac4eb4f28c05a40eb556daeb59138bb612de7ca555dfaabb57e0; - accounts[93] = 0xe5ad9f2807c09b9efff4a7b9531408923bec9efa6c5dbca993151c5d1cd71cf0; - accounts[94] = 0x48a9015accae8827c3bec5fdaf09872435253110df10dbb4e6e3fefa72978596; - accounts[95] = 0xfdc540d1ca05cec057e375bdb79dab1b64ec36e788b428fd4283719300963a50; - accounts[96] = 0xcf718b7d75cf6816772dacd90cc07e0110c6f9c34c72b4a0d90010ea32158bd0; - accounts[97] = 0x999a8508f2c8c3808df830659a414e875f923a945d706d849eb1cef6da277b87; - accounts[98] = 0xd680456e4fb61c3ac2f3cafb3a84f1b0d937ec11a6f2bc7698b9420cc4c12305; - accounts[99] = 0x3995a59cf2d560acdeac1bbee1a78b23d79d3f725cc1cabc4acff01464f1338d; - accounts[100] = 0x5db1c7f4349e6bdcb1cd26cf38bbcc8379b70d0c19b7e0c6e57cef20d6bc6e0b; - accounts[101] = 0x8caf3d94772cc9454c103ad9f9548d99a989c76b1f914ec2f03f9968d6a52ae; - accounts[102] = 0x2cce69f5834bfc6a6152d18ce5af09098aad877d7045f965f2d10f16bb0f500e; - accounts[103] = 0x3e8b84701aaa6cae5edb61a89472213cc9f40202f368a5a4b26bf5db05634415; - accounts[104] = 0x1db08dd8fe5e2405ef9a11c3915417798e9ec75c814b43d609d5b4547a1a3859; - accounts[105] = 0xfe73c401d28a87d9a6f2f73474c1759e4f2ba79d31cb18d84d0ed2fb2f79e98d; - accounts[106] = 0x7936e1489017da2bf6c77b2f04069deb16dbf9e50cf83a251b1010a52c3dcfd2; - accounts[107] = 0x53210fa5c30313215348fbc13c61f8de24e97b0b95087e95d2a741a5e3f17fdb; - accounts[108] = 0xc3f670242eef40115171c227dc850d760ce0e1192dffd6c7a8f727d29d7401bd; - accounts[109] = 0xbe8fdd1705d277b226adfcbc465d38b723e0e7993b891b738b0510d8797fd82e; - accounts[110] = 0x209508dfbb53d4d50e4f82b75e0921e3cf57ed7997ac42220eb998de8ad458d8; - accounts[111] = 0x34e919181f7e3f27557ea08261c8e2f1738292d877f2bebea1fcc8215143c2e5; - accounts[112] = 0xfb2e80fd2558fb3485a5cee9dbf1070d3feead6399415ec14599611b4d90c2ba; - accounts[113] = 0x9cff0aad3eb57107d179b9ae6615c8da5dd091da16a3b027f36fe2ea79c43714; - accounts[114] = 0x138b68ed97dfa662f7557766129b57bb350d4424c03835049c2b0758d0516782; - accounts[115] = 0x536c26531521941f97a53d9f2a458b71861eb9c8ad7473289f88f0c1a67d8bf8; - accounts[116] = 0x89dd560279191c51ce3e6b4925e52d806c17200c7ba3f8e35b1cee93c9b4eb02; - accounts[117] = 0xdeb52a804df8a28e4f6d1a475c084e1503d6751982743953b90ed02bc1a3f566; - accounts[118] = 0x18d28bb3408d6c7ea5be12827cf9f5caf36cd805816c28e685f5cd4c49b8416d; - accounts[119] = 0xce7a46b0ad5aacd78147bed302ea7f5cf0e559231327c868157eb2dac20b6e9d; - accounts[120] = 0xf90b32748b97b14a87c582bcb40006782246a536874c7e8889a4c17d5dded99; - accounts[121] = 0x889d80040c2bae19606723b8902400819740c4c5d1fb790bc5e8437272258f91; - accounts[122] = 0xe0598e6df8e1e6f86f8d1e7d9e3d84e4f96aedacf2458726034de801dd587911; - accounts[123] = 0xcb2ea191754ea77d3c62e2876f8c6e1357d263b6680d3725ffefe1bc4367034e; - accounts[124] = 0x36fd762f2b8ef1f3dfa8fcbbffecf8ccdfb9210ba513b8f79c688f8deb5480de; - accounts[125] = 0x8d94bab6c83d222ff650b8928fe7e206f4142801d516521e6dd8eafb5e796369; - accounts[126] = 0x6f15b493af6da0a502426bbeec6457c7d75d38951727d6b7ea70c32bfa295ef8; - accounts[127] = 0x1597437a8cd0d33c90727e21d8b83301fd2870e9519b6ffcc3ae2ba567ff24e0; - accounts[128] = 0x7feae968203a40f5062bcbf6c0983b75df169348e670e52fb428dde7a68f3013; - accounts[129] = 0x48ed79018833a836e4505e7c196c94cdc18948a30865360791c3568baa8908af; - accounts[130] = 0xa0673487b5c2bf1e8d691ea80f6fef96600b824ac6c930256c4c8047280c4b53; - accounts[131] = 0x8abf0181c9d960131a30f66ccd853f7c9ee35c089e7a3fc2d140d763e6276953; - accounts[132] = 0xad2d855fafa0c91f7e045051688674d5e22a79da0de0e2d2dfeb3a97f518249; - accounts[133] = 0x75b85a74a520c06bc777c105914694bc017b178a697e53656c3b5060d1debdad; - accounts[134] = 0x39c5647f665064d726064225738ae2792c2fecc085fc335d0483482330c5713d; - accounts[135] = 0x8543d84c237b30683f95b56cb7b5326c87537d44d61dad5061a1d86e21f79210; - accounts[136] = 0xa695cae2c6e113fcf92e2b29debfc420c3dd6c61c4906dde82cf45d878c49b41; - accounts[137] = 0x17f7c322594b9a6a5b08d94dc9e6cffcdea1be481ab0b8c1770fbbb149ed1e57; - accounts[138] = 0x9f29af17a3c9e400c69ba2a2ed65c97d79411dff6343d9bcb85360098e20daba; - accounts[139] = 0xcb1cecca456ee051aaa5474568552f637b4161afb920087eed812b1f27808abb; - accounts[140] = 0x831a9202ab57cbdc0ceafc9778a866fc8f2721996f418ffe894735f37000f073; - accounts[141] = 0x55035eed00d3dfe2900f57d67ea4d90cd7dbfc8af216c1573d1350c0ea3994f0; - accounts[142] = 0xe8a6a047a9bcdcdd7eb7105239122d888fb262a78ee8054401cebdd232072c78; - accounts[143] = 0x41683596f0075b3884d37ae574c53558b13dd76d1ca904118fa23583870d36da; - accounts[144] = 0x9de34672ca1e755c14d036e2ba2fadf6ee4eaa0059f41adb751251f4a6096960; - accounts[145] = 0xa3545cf05e94136201c2fd2e0f31f09b0a46782072f0517d17d973c91db6c295; - accounts[146] = 0xad665d95df44163210a1e732f1eb64c77f97786c0bce3ac03b70bc6db88b60ec; - accounts[147] = 0xcf9318151d8689cad5026cb665cc96d5ad3b4968d10dd77caaea3f64e57d935a; - accounts[148] = 0xa4c64fb135be8ce201b5a47c1c37f0004fe167da9d3d228ede5d1700662b6338; - accounts[149] = 0xd81131cbbd2c91fcde5cabce01dc8e154cbc0d40ab17cac541e023fa6bbbf4f0; - accounts[150] = 0x509731df3979c572e4d2754732c66515a9eb826ee69430002c8ce3585fb83688; - accounts[151] = 0x3f51fe0f746912f401b9baf9137d3b643f09d9cce04ad850a9ceef580eba3dd9; - accounts[152] = 0xf4a2c57708f5bf995969b01f47e9f0e1e855c58014774e804585e68b32cf223e; - accounts[153] = 0xa5f2cf2c4886646a2f9e464c33398576d8f282ad390f7ebe9dbf9b6c887a54e5; - accounts[154] = 0x864b1bc7d2481bc9daf91a7808b3dfdebb68533a57adf3a832b5ca4246c88209; - accounts[155] = 0x5d1e59476df25d426889dc5cf061b4ea993dee8fa68b35048ce6cbaaefa142e1; - accounts[156] = 0xd7a26e73297c7de899a9749155451614de630a9b106869785a4ccfcd768b1bc6; - accounts[157] = 0x93b56630a4961532587c27a2bd0e7141b3d2866781dddab0c34e8d18805c1a52; - accounts[158] = 0xc5311723c61c5784cfb095a1e11d7bcd3c77b46283b352399cd105e591b6a36c; - accounts[159] = 0x7b93a4e404a8053065f62fe4b39951ede9b859184eab15af7ee2fd26a8f48703; - accounts[160] = 0x31fed95725f1aa1f3345eba1c6808ebd1a2618908ee35aa5ada4fa85351db4a1; - accounts[161] = 0xccb57a65e91e1fafcf5004d47b7529a7d5f20901be04129f26081af904cfa09c; - accounts[162] = 0x9acd28d052e2f45f7b4a891f27f30d8c91cafe02e8fcbaf620e030c13e40bfa9; - accounts[163] = 0x9e6bbd3d2e39a4387a1c3dff5938d5afe203048774988adc3cf17c5c412bcaee; - accounts[164] = 0x5bf1b26e1fde3b341a823667704d145270e2c88d0e72ad30c5b8f7b9ba8f806b; - accounts[165] = 0x853293dc7b5bc44889ddede6051a805123b2f48fd673dc4870998f706711049f; - accounts[166] = 0xdcbf1fe48389eae0381abbb4816c7d91190452151afa248901bd12b1f06ec682; - accounts[167] = 0x1271bb56a93cfd255e6c8a5d55cac9e0866361362ee15a2325cee2505d38adf; - accounts[168] = 0xd02a367287edcb3818dc8e3247418c7112e32478bfd3df3ca033c4a624238ad7; - accounts[169] = 0x856b2d5f303d8fbc25fed82b698bda62f650457d4d5f2b956589d3fb4dfa8d55; - accounts[170] = 0x6fb4222c0edd72fdf2b549f41df0c42b9f4c03aaa475e5f0682ca9317a4bccf5; - accounts[171] = 0xa6e66ee4c16b1163f4320bea35a411fba78a91667438137c60ff4e50a9608cc7; - accounts[172] = 0xbbbc4dba733fd81b73fb4966ac4f1649b6465294c0853e08a948c2798dfa0008; - accounts[173] = 0x74ed1e89af0c2815b6b07408a062a2fcaa7561f6ab5933ab6c80fec44d689cd8; - accounts[174] = 0x259c0b6da6aab14629d8855624845a5ee7f9ba49b9343df73b108feb7c7c57b7; - accounts[175] = 0x67849df54c36882ebe76126038c55d4b9ca961f473c218bad4907c9e33366eef; - accounts[176] = 0x73a096e36a65f00a959927a6d49406a4c05519f74342f7db48ade701420de8a7; - accounts[177] = 0x2db44181f8f7823338ab2af43bcea6eb1ae64b9144f999bd895e84efe8e9af48; - accounts[178] = 0xd7865e50d393865f27aa44d86410325787e68477868c15382f7ca9b578837b41; - accounts[179] = 0xabe5980b21d0c2fbc248db9a8dad8a743ec665ead5a239cff528d465c3036009; - accounts[180] = 0xb7bbd3bcb1feecbdb5cbab0b2bcea3f299e1a82e320778f5a5b14147cd03d3d1; - accounts[181] = 0xd5fbc245c77faa3668a66957f3ddbb40aaace1628583252d11857b1036ceb783; - accounts[182] = 0xb695b4faf917e22bdaa6cbfd59b650870166effe4d2b6172c215d8a7e8a2a167; - accounts[183] = 0x2732107fb80b27d9093f8905974193db0883973527aba39e4db26b44c3e65668; - accounts[184] = 0x747f617f229f609dd5b32934bcd5a304e4f0cb240050cd4d2430c2679c1a0007; - accounts[185] = 0x931b4cbd00f3de9d908e25b398560478f06e5a1ef377eee0cfba000eb25d3d76; - accounts[186] = 0xa4508dbdca4657d5d8932652a65a02ec1237b5afc825a5314b88760866cb45bd; - accounts[187] = 0xa0d385c6724c2a4665f1caf55bc2f7623bfb395ed2a1fb7540e845f5e6a1e8; - accounts[188] = 0xa3c711c5a9733dff68ce956c8842de21915d229d30596d0c4f3f7e289838c4c6; - accounts[189] = 0xbc8b5b7968c4f349913821491b20f01bc5506e787d301992aa6dc5f9c7d8c57; - accounts[190] = 0x5962c6538f967b5c986396af2c4321589d4fae8ba375b17aa1cdd426fb8b61a8; - accounts[191] = 0xa54baf4c77981d1f7c18835f70a59b42a033ac953c267ab417c216f6f6b23c7f; - accounts[192] = 0xdb7478edfc6ec8b13a3af40a6e16f4248e40620027323c2813b80d25128addfd; - accounts[193] = 0xefa45939e61b42f0f8d6e183ad1378fd41bb0bd8504c0b6c455bd392c4173657; - accounts[194] = 0xa141dd29d8fa165eb9aea140726a1b74df24b9ee1957e30c6afb49d7beba8a9f; - accounts[195] = 0xf7109c5ffd947f433bf2013806be458d4216a55a786373d9dc0420a22118d7c7; - accounts[196] = 0x120d95577e1b85a45e6feacd807edaa8a851e1b5f64c2eff73e055a541bb87b4; - accounts[197] = 0x1eb2f4bdd2d1646a1731d718fbff74a8a84648fc45b506298da81109f59eb867; - accounts[198] = 0xaba599976b00521cd1f10dc5b59f59a7329ac75d7aa1d5334f865031fa2fa460; - accounts[199] = 0x979ee2da485508d53760bad652ed1231a3cf69e397e60b2db930fa1b7ab8f5e; - accounts[200] = 0xdf19cf631fb83d1c30b4cbbb12160e503e2bb93b8e8e312716b1ca33c1967152; - accounts[201] = 0xdc948b6912d9f2427b8ae5c717ddc7db598d0f1da555151e8015be074c1d4606; - accounts[202] = 0x81ae571a2cd1991a1b8311fa4f12732ed2f8147e7cc58faf8383d99733da3d56; - accounts[203] = 0xe9ccaf1420fecaf0a33ed3a3f42464daaab1938adf4b88218c6806fe5e56faa4; - accounts[204] = 0x409a86ff4d7ccc97c093ddc13efbbcfb29f65940fbc2547604241fd66ac446cc; - accounts[205] = 0x60adb7f8710b1631fb7b109fff0b7d0b3f6f0ce9e981a108e4e3b20a1b82ff4b; - accounts[206] = 0x914e08b4a2369282e41500610368feac6b202e33d8c020571daf65021c4b82f7; - accounts[207] = 0xc1c7575b0b4b5fcc508a1aa1468d121d716549b3db81a0c6804175778a4e88e4; - accounts[208] = 0x877ebef5096c8a191a5a725aae45e9cf5d2ce444d77cf7f12979866a54758748; - accounts[209] = 0x8cf3ad4298adeccd083f10b07513806dac7ff58b3d0575aba1b4655adf8482b3; - accounts[210] = 0x74c6119c586465068adb1d35be5162dbecf50c35b2d2dde2f41bda54060ee6db; - accounts[211] = 0x9c7d413160e57aa680615eba8cb244126eeac022796578a8d7bb1d1792e71193; - accounts[212] = 0xe0981b40671f57c7acc5b47c8b431a48f7e58c3f7b74cd2b4bba677bb031e6af; - accounts[213] = 0x5186b0bbda7b2ae0f81b3b8028fb0e0c473c2d4df7727d431308da6a9e3b69e2; - accounts[214] = 0x9de3e62dd566badac2de47a3fde8f4de92fe241968bdfd22cafe73663cc982c7; - accounts[215] = 0x5401d339c8990d14ea93ec2c9348d6d3136fa679ab7c93f3efbca8001f26e10f; - accounts[216] = 0xfd4959e0954551ff27fa3b35bb69ce82c3d9540ea25591f01792ae1e87dcae6e; - accounts[217] = 0xb7250b2a98871efd51d008de31329453dd94499dabc8a0f072ae8555ed802efc; - accounts[218] = 0xebe2ef19224048ecd8bbb1bcda84f4788403f93014ac7f506e255e545b05a11b; - accounts[219] = 0x6c67816a000c7b715dbdeb0f866865c0816e8553826f745dff36df56e2ca94eb; - accounts[220] = 0xd6a220c4a9f877708726a82bd7079f85eb8bc11c4804beca07e3d21daf71c920; - accounts[221] = 0xb616ddf46ac8d932bc573c3769b974fb1d45da59b0b9947782193e3c35a43729; - accounts[222] = 0x4e9c501bf31cc5a0a8814631292d41607cb691a3445c5703f1bed6ec687fa31a; - accounts[223] = 0xa6c70a4fab80e0494d53e56369dabad6ffbf20af67eced66bf1e53d94dd0f438; - accounts[224] = 0x39460200f5f9c7dabf68579f9ff19f0d126ec158f5bb6609aa9289ebc07df94b; - accounts[225] = 0x1af3e8996a9b5c33efb3abd72b533bb7f6ca181041fe02a7c736f35e011cb09c; - accounts[226] = 0xaa1e11f3d13190e53b9e2d681ed23b2df1303d80ca0fa4c73ac34f5a5e083c26; - accounts[227] = 0x993321fe35de8f2ff1895fb469f8b6a6e9c096a91ee4e630c536067c5e8b7f0; - accounts[228] = 0x31b9ac76ef523f890f64c859e1dfd21fa87822c688d22cc87c239d407a4f68a3; - accounts[229] = 0xc7eadf89c6e2f6016e93e4840b36c3c61d7c83a6366df4eabe237e7f6c1ee104; - accounts[230] = 0x6c58f1a6914d763c271596389f98f825e6686281c3fb64dd32fcc1eb1d14bbed; - accounts[231] = 0x1ba659545b67d31dd74635a0cdb5c63e8762c0edd10535f2a032a576a40b9197; - accounts[232] = 0x36f2de03329871c050d183b559b3f94196a38eff6b22be603145ad23e2a967a2; - accounts[233] = 0x43eb72eab49d20b0d45f3d7ad3728c618d2f3e2e317b9c3285cdc674b8c7d63d; - accounts[234] = 0x7391bdd745394ef1bef5cefa4a4cc8a13fe91747bf0e6d572e0f97935ef792bf; - accounts[235] = 0x4d1febbe55281cc668f8d52b940cb01c4d6ce59e610bd95770c08d1423a37c53; - accounts[236] = 0x4e4cbba461530e72e1f16dad36289bb901a641378e8d69c460eaa0ab47cc70a7; - accounts[237] = 0x4bccca92fc775befbd81573c4120030e1576dbf524827754343ae1bdec9a2ddb; - accounts[238] = 0x6911e5c5099e9c49c655f1bb23c7ea5343dd230ecf810ad053e8050e60f4edeb; - accounts[239] = 0x65b59e505693d1856c728ba86412ba5121625246370c54b21fbb31058a339296; - accounts[240] = 0x31eb9243bd648f28f64da9476864ac577a0cda30b7288ce9a655a4d0ebeb1937; - accounts[241] = 0x1edd3edbc2ba2aa47791e231fa10a8632020613692f61015b6524e5f1d829d7e; - accounts[242] = 0xba405dc7925c3ea06692ef7c9f6f038e4bac788c69872309a7cf7b8c24346204; - accounts[243] = 0xcf68487a485534aadf17522242154b994bb6cbe23bebd64bde64caafc46e1e58; - accounts[244] = 0x4f3877820b12c5f8e0c21c227bbafebf8c2b0bddde061cb700c6a0364f8c549; - accounts[245] = 0xdec5879287aad0ce691148ce74ab47423bee093899f01be63f71cd2e4a95a87c; - accounts[246] = 0xf57b27788af2423e025e49b6522f0138305512739d01dd09da438b2ab95ec3b6; - accounts[247] = 0x9373f6457fdcdbf69e5cd851b403e0fb9e9688f5e5364ddd513972ae11e58221; - accounts[248] = 0x9fd7da826f5f004da81b693dfdab9f2dbd74d50a272a7a7789e16e3fa5d90885; - accounts[249] = 0x5609ff38e7d41c435e4e6fa6ec38c21d04f60c30007a0494e2b525dff21c4f46; - accounts[250] = 0xa2c88a08127deecbc07a9887e5cb580232ef0a26148dcf8df08dbf55363ea309; - accounts[251] = 0xa9de98eb4582bbdf4d0f7caa71ddd9e24afbebc010140b0328ee5a4816c872a0; - accounts[252] = 0x9af38487f719ed842f3c11c40468ded919ccc56ce44eb7b6a90ae354f5e6e44a; - accounts[253] = 0xb2952a1f20b64a4d3af35785459becd535d39574201b6cca59defffdfad29360; - accounts[254] = 0xc91a458ff6a65349f8c5e48e3fa07b28c85be5a3488b1ca10c3329b7e748fff3; - accounts[255] = 0xde405f4a5c5c05c0837aafa63827e147361219cb1dbd967f24c2b43735137ed4; - accounts[256] = 0xe60e49f78a5a00438cd38144884640455f5276cf257d297e689daef841c02bca; - accounts[257] = 0x28f54f82a6c7dec93fc882e5fb687f4e15266b467745ed7074cb798695fd799b; - accounts[258] = 0x2b7eb1162dfcdfee0b698717bb69394c151a6438e6c5e1e4a77083cb62b56baf; - accounts[259] = 0xb4dee0f40fe0932b668137b2b705b7976cb01bef3acb7cb9b33ec28e03acf4e8; - accounts[260] = 0xbedecc2ebd75531f276348ac6a24b2071b2633fe2fe3d4652bcce3770cc8e4f8; - accounts[261] = 0x4075e9231c04b92b42976140ab52f511e47f7ec51b484b306574edadb8eb2b2c; - accounts[262] = 0x7a8c15e8041ae8e553d19e30f973d2108663b4c7469ecf8f49500c7125cc27ce; - accounts[263] = 0xe0182f05c4fa8bf96be83f30b5f586190d92d210f2db18202c8490fa2c51cf5c; - accounts[264] = 0xf09f7cbd218adbc8b9c6f537635d07a997199b82c850a1f1bbf258a9d08a068c; - accounts[265] = 0x4accfff98ac59a00866fcba437f2ed8eadda2e607068d77647f955f23049536d; - accounts[266] = 0x3109a6e598da802dd577ab852a05f2029fe94df1a90daa37a665c8ef821fff52; - accounts[267] = 0x6629b369bc07c57419762bde254c1440d46663974132aa8d24cfdd7746c42ca3; - accounts[268] = 0xac2c7704acddfa90d30899e9df2a134dfdebfda178b83acf666c9c8cd3a0b68f; - accounts[269] = 0x5539b600880167c434e313a6b100a2f17e64dba84fad0f9f8346b2a4ed33c943; - accounts[270] = 0x8574299f93630a4e4a0f76e59e97cc9bc7af705a54d45561d4bbabdda262e2aa; - accounts[271] = 0x6669441cb5e38973b378298f6d5d06cddac976ab29bf7744a843162d1c43d4e8; - accounts[272] = 0x4690eff83c22f0d17f93c2525c89dc5fc8b8e2ccf752021e90523dccf666ded9; - accounts[273] = 0x3ccfbc7def4e8930a4d4af8ae02274099b5dfdeaaefe0d9b443de2c30da043e0; - accounts[274] = 0x28235a8dc7621edb4c3782acafb2a44bd4e3affe7b0f2d7f8773ab0742203160; - accounts[275] = 0x42322f38ebdbcb846d1cad5dc9f23f69498dfbf29f333df7f9fd2def72a44b97; - accounts[276] = 0x2dd6836e7e00c9bb226e3616da78fecfb51eabe4eca402f7f9d657297312598e; - accounts[277] = 0x3bec09b8f19828fa56dd9543eaa4dbd13fc1a06f37d144af43fa83fff79d3a32; - accounts[278] = 0x42591eb9fdce0acedd04cbec020292e950e15d2700f9edeb178927fb125c54b5; - accounts[279] = 0xddea31ed0f964b6ea63348a73c8cf5f02820a48ac315d6532be601da684fe89e; - accounts[280] = 0xc76aa26696914c1c914cdf2b8cf758e2ac1712408285dd648ad685f8a36ec941; - accounts[281] = 0x70da23764afeeccec322dd0091ba9961538f0e9978635802897860cb506fc576; - accounts[282] = 0xdfa7139c44c6147199b8852cd9f76a1d857d68a22253ceac20a1d7d66beac365; - accounts[283] = 0x11c5bade920d44247237972aa110a70b92fc6452b4898f5127a321d38eeb0ecc; - accounts[284] = 0x1b2574aa61e269a1d90fd0061fe20643a67aab7431f22d4da46bf69ba848675f; - accounts[285] = 0xc66a06b066e35c6bd4fa917bce914d5b0aaf27e3376ba55e450fcd6ff230f3c7; - accounts[286] = 0xb50596325286af77e060f2724d2fa78256113f7b5b003ad43391134ccaccde5d; - accounts[287] = 0xf5ab48fe9b302f153ee359f3a31551402a3802a07bfdb6bfa8c0e0aa6c5f5d03; - accounts[288] = 0x833d847890eafc5a8b236bd1a996eb46daafe34d710c36ac514006e5f5d39cd5; - accounts[289] = 0x98f93af7dc860ebd3caf20ff291c10f9e5e7a12edaa66b60f43dafef7a4319e3; - accounts[290] = 0x923ca64708e0c75dbff023489bafe6b75b25d91d888c535ec7633da6e717a0f; - accounts[291] = 0x236d77cebb89d7a56950baec84c92481528a0324e733855e21cd3f3a6c101612; - accounts[292] = 0xa899d67627db344308e9893538a196f685cb3f3c5c2ed0f6ce755b7efc9c86bc; - accounts[293] = 0x2bc64b44c022b5143ecf86c26d2590a800fb8ba8a59ae8667995984a6e103a3c; - accounts[294] = 0xa4bf2361f4b91ad37321192d1c0cbd2553da40e7833c2472862fd5c944a5bb5e; - accounts[295] = 0x2267a0a9986520af8914e104ed936c90ada6baa41b83ae32245bdca38444fb8; - accounts[296] = 0x934ff6c98f1060ea77e46ac67687772e011091c28d2a40f2327e11c58b0bce30; - accounts[297] = 0x9e7a45b9a4aa9ee9d9be2b9cdc9a1fc9a6b5bb91f405b39f2b3bbe918937b54f; - accounts[298] = 0xc4f234b2d73e00c87e85535228983c465bb71bea67792ee2c0834028b41cc386; - accounts[299] = 0xf4673022cfdfa1cac35458684c9e334ccfc2c32672bee6f9c5bb8f1d91c84070; - accounts[300] = 0xf50bb11e062dfc07631c6c7eeb71dd9a35351d007c18fb28a3491b25c4bd200d; - accounts[301] = 0x5af9135ee732c33e95d4e47f8d634a0892f1345368e98b4122688ad8c920b1cb; - accounts[302] = 0x470e0776694b7ddb7dad054d9de133ff0fbbd4db270ff7c79511475f8e9397aa; - accounts[303] = 0x5ba86ef7bb2d2188de19e929a191d7fed1378b053010b9d2b9d89877e3121ca; - accounts[304] = 0xf547e7722c471bf32250b0702bf8887d14d8e2e7af10d5fe6cba67d19674cd53; - accounts[305] = 0x6805fe9ceb5fbdf3dd31033dd0029e7e468a075de990b256bd62d58181c9f9ca; - accounts[306] = 0x9904a23af0972a386a01f3e06dcb93886125ead85c9da54fd69c6f5039848997; - accounts[307] = 0x10ae631d2c3a472fbff6b6bb104916079dab9924c3bcb55dff2c30789bf5043c; - accounts[308] = 0xeabdf10671d7a4dc9fd148c12bb9ff6254831051ea63f4362ebd347e7464c9fa; - accounts[309] = 0x6eb38ef41ef6b9d5d6c3d7a81e36ccff4175f08a7955334ae0cf522eecb06ecd; - accounts[310] = 0xe8e0c58f792676251c93f2cc583bd98662cb51458977634e4d925df699f00d4f; - accounts[311] = 0x3b6c8fb00033450daf704cadedf07201d83462b9114460343aecb467e22eba73; - accounts[312] = 0x862e97875eb231c5e7b88982863ea30180b500a755a25208430f8e230e583204; - accounts[313] = 0x8b597c8d8015ab820f317a8409c0d8ad906fcf9c0b3c227e62aa30a907dcbf53; - accounts[314] = 0x67900d89d40b2092d1e8984386a7f7ce070e34fdcb726dfdcad282e3cdee5c74; - accounts[315] = 0x1b3fb4fe720b2a38f815bb5914365444b06d8d44b7728209efde0f97cfdabea8; - accounts[316] = 0x965e87d96e8a5bdaa6dc1d17a92c5c9a516f6c01ec897ecadb8db5aa0780102a; - accounts[317] = 0x915ad17aeba3d31ff01cd02d10320de9328f8ec698e679f30fa2408e530c26c6; - accounts[318] = 0x33b549cd27196be07a3b7afa5ca2e43576cc07bb1e80373308d1efa613bf42d5; - accounts[319] = 0xb476064bde9fd38b2a745712216caf576ee00e0dd0ede5f54e891d614017ef94; - accounts[320] = 0xa641840a1c1eaae5d7db44270cf21cbd7924b54f36954c836dde40f670e55ddf; - accounts[321] = 0x7b58e9a117876ba4c777139f7d2c521165a0a33b2a9f86358222da8fc96177b2; - accounts[322] = 0xc70fc87e0df96558b6352b18a6b3735c0d03cc01109354dc7fca298ea83a7515; - accounts[323] = 0x18dbe46416b20beb88c9f562b86600ded14033a7080578ae02155f4629c9d358; - accounts[324] = 0x911505ff560a2469d1c8d31c6427a0f994694eb544a1769b3718a1c35218ab19; - accounts[325] = 0x1a0d32fec645b4dd60956727e8d56addaa51dbac5b075011ebebfbecde88002b; - accounts[326] = 0x549104571cdc346b7b8d96d7cc1c08f6e7ae10e8ef32a56b7297640ecd1dff01; - accounts[327] = 0x18c78c7c457303a569a10d87f383e2c77de0ca6ce0dfe465887cf6a5d5752a9c; - accounts[328] = 0x970953377fea376f86bd0f2ce6efd7518e40b615a312ae5f7d8aaf176de42238; - accounts[329] = 0x918c5f17ea78fcbc3daac6a1116e64a7657c36e4cace3ebd3dc9f5c1b0d237fa; - accounts[330] = 0x42e2664712d3bc26d2f350932a26adcaa4ea44808c985d30a2f95b0b6bd8694d; - accounts[331] = 0xe1359e150b7e0ea176d4139654e80939c80d6976ff48fc045afed3671fa329c9; - accounts[332] = 0x9ce8ce43ac93c2e704ecc4d418ab5aea5ea283bcc41129b3e2536400ab705005; - accounts[333] = 0x9730d4c4b10149e5ce8e649b77617766ffa646f8caad9b222113cef6c767b27; - accounts[334] = 0x4093d3b9d717b0206e42c8518879e9a2938f55f2c67d368fad9b02481d039632; - accounts[335] = 0x66f96c3a67bfd3768133c21cdd306c27dcf23b5e04ef0690c7419419ac5d7374; - accounts[336] = 0x9af6df9f1c682b24844b76888972d52363286bd299a05f71460051c3a431ad1b; - accounts[337] = 0xd18be1e7e4729dd95493da3029c262aa025114de749f8b20e0a0e06d456909c1; - accounts[338] = 0x448832cf90dfbe416b83b6df6fcf0d4233f6c5ad5f05ca0bb70fa9b9989a5a75; - accounts[339] = 0x5d54b64cfd83eae466614fe92c6cd4445f47950984a0a094cb82876e559c36b4; - accounts[340] = 0x7ef4358115bd9868bea648ad39d50380688f65dc302fe6a1eae52a3d72255739; - accounts[341] = 0x3582c07d9534c30bf917f934d3447d69c4f9ccb961d8860da725590f6fa7f359; - accounts[342] = 0x4e305bfe010f6ea11b2a5bf13533bf1445a3e7356cab68bd1c2db00f9023f154; - accounts[343] = 0x8b1fb5b21b5a08e3f682db543249d8d24d1d139fce147c485c7103871998328e; - accounts[344] = 0x3fd874a1916abd5e318207dee8ea434a60c36968b447444b1b3cbadd2508eb05; - accounts[345] = 0x48d282095befada7cccf6e210d3b6ffc0317699c3e296cedecd92d5d9e8c947c; - accounts[346] = 0xd7e9d8e3be8ddd864bdc0dd5a12db33897c3406e6acbb26beef54ad3df26b763; - accounts[347] = 0x77418d797f0ec2123a160cfcee2c724f337b9a19dddb123c4c5ec4738a2ae4f7; - accounts[348] = 0x76b1d71a301c8166da2c1c8fbec6c68f0f8f07c1f8e8835cdd5559843cf58fc4; - accounts[349] = 0xcc8d9480708255f09da201cf2f426c2c8dde829f50687e16a1216fd7c648b89c; - accounts[350] = 0x33f8bf6f0c4d019c1fe809a0fad777ab89a2cce703561c49febbf704375e142a; - accounts[351] = 0xcb16f47baaca87ca46395c8a2407cf1b54b79ccfc5a39ec8ffd4823966b1adc3; - accounts[352] = 0x40875ce189a371f96cb919f3848b066a3887ad1ec80877ece919c3bab67ed1b4; - accounts[353] = 0xa53ab3324d8f9b33549085fbfc2dd3569d7cb11c07e99cec3af0ffc688e355b8; - accounts[354] = 0xce88a1bc64f757f923047ee505dcec6245abcb7794babd4a0b232d6535f373cd; - accounts[355] = 0xa312f91fb21297eb3cc23bbabc280c090836b261237682cd716be35fab16f4cf; - accounts[356] = 0xe09689faec8493fbe8e96ebe19ba94f541aeb9faddeafb5d38c191b2d5f4235c; - accounts[357] = 0x100fbc5014b73888df4de3cd7ec3f1a21b4432d0abbdab4cbd026d1ccd511f97; - accounts[358] = 0x430ef7a85e41d08895d4d8aef3656e09c72758b1439ca8bb2b21aa45d1eca5e5; - accounts[359] = 0x7a89114244113fb98f4fa1c3b9f59c0db38a6af7e760e0dbeb5d68cb7a1524a5; - accounts[360] = 0x661d3c6db8f41789410d045c977fea5c0f5102ae57fdb170c137d7e5a2d39338; - accounts[361] = 0x5f2f8fbc2300c05d34f5539d3d070f66ebff05213851aaeb684bde5987ba1232; - accounts[362] = 0xdb6b3e2c09ef41b52260f5e002bfa7f138f8fdfceea9308e6ca3acfefb7a44b7; - accounts[363] = 0xb4b3a45f86c236f98f9a39033f40cff251ce59198937793e0237b3a5705a8a7b; - accounts[364] = 0x75262cacfd477de6107f48abcedf5a252c45880940779d0141a0eb725bdc5cc0; - accounts[365] = 0x72b2fd3dc1dfa903e2eefbabe591c7d6c77cdf9f4f049f05d4a85c3a50768099; - accounts[366] = 0xbc1beaa4e1b8ee63804e8b5149b4a5e85d1f4fb1f25e68c532af3b143dcc7d06; - accounts[367] = 0x173704c6aa04261618962efafa9218a363157bb84aa1e8d61df2b0f9a4db01fa; - accounts[368] = 0x96d6f0ccb497aab254e49b9d480afd0903d050a819b5b77d0caa169e80c6e132; - accounts[369] = 0xe7e51f2fb2b7920dc36ecab964820f70f33c7ea2384d917291543f212c5fc2e0; - accounts[370] = 0x513cbddba187c560b4a438af760f175cae0b96100eb497a4a9900e73261c20ce; - accounts[371] = 0x7aef60c48a20ac97bcc410585d3c258327ce0846536a685302b4e7df3b17394f; - accounts[372] = 0xb331bc9a1fa025d5ca3e818b3e045957635dac85f69932b955cda68ee21b5a02; - accounts[373] = 0xa530615b450749ef27a4e8cb1f610464cd30aa8307ad33d9065804a7198372ea; - accounts[374] = 0x4575a53c82d16bb7476a00b05aa8e6b2272b57f5bc2054c732bb914f54470911; - accounts[375] = 0x13930638ca3a86be5f8960b927abdd5d6e4f58f26b4a04b1a5ea798e04e4661f; - accounts[376] = 0x47eff25d5a24ee5007bfb0110b79fa071ae1cd4daff01246b815aff33ae2eeda; - accounts[377] = 0xba03d54d7a5d50f7094e47427cfb0949d2225a311a4085ea01e1b80d88e9090d; - accounts[378] = 0x441940070788a6350e67b915a6ea45121600380901a69fccfaaa7f4fa45bc164; - accounts[379] = 0xe3628963725ddc2e141f73f91e1198a19b5660da4abce24184c976fb397c3a89; - accounts[380] = 0x13e180050808edd021fec7e23bb8891f5a5d6f053d79b7887de03bab6a8cac99; - accounts[381] = 0x763a0e450dc58264392037121d44d5b8a94e1c4b6f2322a10395b3aa6b443e74; - accounts[382] = 0xb30b6a150e83bb8395c43a382de030a62e2fbbe27079cc194d1239d75121b8b2; - accounts[383] = 0x3fd5ff8b8d99d9c509339dd73472900450a6e76b115675ea4ebc507d92e7af23; - accounts[384] = 0x2bf5208e10add28c41e5d2e51fb3d10f204696e280593e79a3331913142ad224; - accounts[385] = 0x31b475078842d134444df361460dc951ccabc9b58039676377f5050b5d00bcb4; - accounts[386] = 0x518687dea8e2b98abc76a28e917606dbd8488be3ea8ae9d071281eb5c2dccab1; - accounts[387] = 0x88a491da5bf176781a84acad0f67df088c6c6b962911d63262e1df77ece065e1; - accounts[388] = 0x61f5a7da42a3427231f875f183e4f022cd89c6586f91218eced74a0602a5a7ee; - accounts[389] = 0x1d80167ebb3ca7ea3e82a0f8cc837d21b7715f1f455b42e642e5645e7661bcf; - accounts[390] = 0xee94bcf5453b8641419d9c36d0d6b251e79f682adb50769520d41851f9126fb8; - accounts[391] = 0x18d42b1334426d271e7b6c0fe45176af7e92734f8b038756702e5b850d822bc7; - accounts[392] = 0xaa652937acb1d79491ba86a83635d06c9e9424785c786ffda3eb98b9665078e7; - accounts[393] = 0xe53733b72e4601c0afb8947a323676012be417b54b54eb25bf9509ba4bff241b; - accounts[394] = 0x42c2589e83664381fb807a63e4cf99843538fcd8e802d2c0b1c9d3e65c95f752; - accounts[395] = 0xe4315554f247301539605ad0533df3871ea550dffe4ac753a83410ab0edfa459; - accounts[396] = 0xf71537c610d5abbb231b3d028d50c3203dd61fe1b46bb61b0dda53306b00eecf; - accounts[397] = 0x3f63ae7e87bd4a6266264e27efaf03be4dfff4ae4d661c417cc60e501d7642d3; - accounts[398] = 0x3b58238f42f1e9fc65aa9bd485d04c965d7e64e24c3616b815aa971690cfaed1; - accounts[399] = 0xde98958b3932ff0509620929235efd077b02dcba748fc93fd9b7bd9fd851bbc6; - accounts[400] = 0x4775efcbc8a979dffdbceb6aa0a9afd12e573d64737d5dfe1ad416c7f2a078b1; - accounts[401] = 0xf6b494ae988d01b24996aa9de2f4bca60bedc287cd71b3d75a51a35567667349; - accounts[402] = 0xf3d4dac6b37eb722e768e4c3699afe04439f764b2e53d4dd339c5ae7fb013edd; - accounts[403] = 0xf204163eb0b62fee758f42ae54ae92f1c38f4474630fc68630f3bd21835eb74; - accounts[404] = 0xa9aeab82eb1bcd4cc44927ff3cb136ccf4422755257ef1a78a0d40c01d89d5bb; - accounts[405] = 0xa31c4e146ca0ddf22d7f4861a2af9183701746fc93442419c961b23b3041c87e; - accounts[406] = 0xecd84abd2aa0bcc30848d7b138b2f3b36d020def718fb731ba786199e249c048; - accounts[407] = 0x7b6fb5580492b90f9a2f4d41d0dfc599786cd39bfbfa79599899919788951d4a; - accounts[408] = 0x16cd386fbbbb323dcbddd378184971c4c22d5c620754cf48b616591c5db919e2; - accounts[409] = 0x1b3cc0f267ece98166d6df9819b792d9c4b6e0aace010dd77edc128e89e84eb0; - accounts[410] = 0xcd2b6a9d7bf2a6ee237abb9316f24a0e4441710dd8467b56e895cd430e1caff9; - accounts[411] = 0xf5785a0dc71bd74f280fe31efaf92ec31dbe3e807c120328091d19e972ba3997; - accounts[412] = 0xfeb86f6dc0cf578efe60d1610d40b1347cfe91564130d2c7f656d0970e48c4ca; - accounts[413] = 0x35107b8905cd6f0556f3db100bb9eb239cc6357933c79ac4e4aede4a931315df; - accounts[414] = 0xce761d9c0d51ce548ae85bdefbb36f1aad82291644eb37d621c1aa709266776f; - accounts[415] = 0xf9e5fae22d6b5002b230bd35a4fd785c22d2ab49e34e89bb5f9f83d7052faa37; - accounts[416] = 0x6a349360b0c1f5fb02a895d59bc0c8b571f940341286d75d72d1faf526eeaae7; - accounts[417] = 0xa301260992c1e5f3e657f048901b8f51e69811ed3241cc38b5492200b12278da; - accounts[418] = 0xc70a075a9ec45d7dce4f45637b06484001c330deb6b07892be4b801057d18d0e; - accounts[419] = 0xfaf62ddeff4e5f2ab326acc9c5f85a53b52e67349a18d4fc095a6b8c121a253c; - accounts[420] = 0x827eaac1f77ac3abd7150903e7089c03a4da735e425562fcc824c5a90ccd9d1d; - accounts[421] = 0xb18679be22e44011a3fdc9931dc2ca681867a82e2393cabde944b3f05cf4af90; - accounts[422] = 0x793e216e1a4015046597efe7f291f3fbfbfc0cbf5b5e63f3b91cf53519945556; - accounts[423] = 0x98cee402a83e673c4e95f161f95046d7292f8f0b1774b41e081322cc5b3347f6; - accounts[424] = 0x611f6fc8ed31e469c1f617cdbb3d22d260741dceb018e77eed92820c95b9f26d; - accounts[425] = 0xe768e1546c803e8c3409ef9edde4c9c468addab5ada3801c28db87614bd67b57; - accounts[426] = 0x323883c246fbd6c7629226f9b76c84f0e49e692d8f5ad1d2e357ed3ce6c36776; - accounts[427] = 0x3f9c9745dca447ab54216295dec5708ec7f108d260a2fd91085f3e5be95c788; - accounts[428] = 0x633d6bc5d939fbb3ea842f9f53697746bfe6eb66376df7744eecb33323f1784c; - accounts[429] = 0x5eb89d9951af07c41f650dfaede963593c39914b3625b9ea65662cbc5e0a27c; - accounts[430] = 0x8c0097e7bc5011ccd125a0fa24c84d98c65bcd01ffa4a47ce8358cdcd487c9b; - accounts[431] = 0x33a324fd4509488c77154265a26ecebd637b81b071b2f0d0f42a2317e057799b; - accounts[432] = 0x3dd1909baea4b79a2fce24f2c86ae68f17ec402d404d873871025e511dda9b77; - accounts[433] = 0x25acc77e2c79521e40c940b578ee4b9b8f1fe9503ca001237648e8cfc5bff9be; - accounts[434] = 0x5c078547e95272c8f2fe49f79b60bb684484d3a138d85b329cfc4b3fafe091e6; - accounts[435] = 0x42012ee6a7e9118dd3acf3cb5830991c92b49748d3d0ee0c25ce4e601010e46b; - accounts[436] = 0x363d67e5913193766737ead0328831fbea43a62cf0becad34750e899d88b04e2; - accounts[437] = 0x59c1279413891890b8b8a6e742569a83ea055f625d23c741e5dbf14ed285f618; - accounts[438] = 0x6f0734e10e9c68c914da92b8108da42382b56d2198bebe00a7721affe919558; - accounts[439] = 0xad0d846cf1ad934b7d8c0ff1b0c7495d101c80f28557a2c340c3341f244d771; - accounts[440] = 0xa9523ec2edad54093309ec840f826b041d60d0ae6733d31af16b84e36eeba7a5; - accounts[441] = 0x29dfa078ad43c11b586e1ca898d582f85b442c688438bea135a0980fafbdcbe2; - accounts[442] = 0x4d4e9c81584f2d02e202739a1aad2ec7770ef0fdf4ac30ce956fc9aca69d7007; - accounts[443] = 0x342225af6a636932324503c5d5c98b0d527f3dfbe4e34ea7cd1b0d0d591f9d57; - accounts[444] = 0x686c1322ff113a2db194eede4d52c0dff8e6085ffcea58720134283db415c818; - accounts[445] = 0x177c84b999749d08d7055b5cc8259868f6d02fe662e76dce2c6de74fbb41d43f; - accounts[446] = 0x7a4e5b52adbfd5c755bae8f00762dda966337c5c8627dbd3019ded212e99cd3; - accounts[447] = 0x4da4fa20229ba510d60f278bd18aa13fe7417068c6d053dd72fde5e06c1f8273; - accounts[448] = 0xad2f8326e247f7effaaaaeb49b07edecae126e4fc6c15320f74df3c9bcef7829; - accounts[449] = 0xaab2bad05501554f698137d9c9eeeeb09a25884662c462eaaf41656e3aeb1dd7; - accounts[450] = 0x7ed73943f5fcb3a1828f298eda1b16191382479ddaa2edb2034f9917ad95b3ce; - accounts[451] = 0x7c028118257c9631e8d821e1f9a860aeac15945de070cb1bcc7c4b1c470a2dcc; - accounts[452] = 0xbef2358d8e77d7c6742cc0adeecec359601a8f43f39516e0142717329b355e98; - accounts[453] = 0x7beb5a8460384144f606bf5b3de799b4ecdabc8c1d9c77e2d4be3f139cd51294; - accounts[454] = 0x347b0619dec040790530eb72ad369720644b3e569d4cbb2c1775d84d5c1d9066; - accounts[455] = 0xa5af9c57ef8b92ca155431fef4ead293e6907522df73a6f8e90759db9cb01325; - accounts[456] = 0xf1b73d0f0c30519b97f823b66649dafc6086316f29ab35bb7ce510084d07d26; - accounts[457] = 0x536dfe324bd17e881c5e7a4ff669cfb161bc43bfb924dfcb710cf6637573468b; - accounts[458] = 0xbdc79089ad722040c9e821a261972dfdacf68161121ed19fcf012d9fe7f08c76; - accounts[459] = 0x7205029aa58f2f215299b1c2e1638feb8aab546790d5085ce6d4c4b968fdfb9f; - accounts[460] = 0x1a3604e847722dc6d259e1117eb7976d4b66cf11c688d830e18775c779f55bec; - accounts[461] = 0xda1ca3ebcde72700df460758ab8ccd0755a54511a24f1fe5ef9f6a9258972ef7; - accounts[462] = 0xbb65af416cb3140f92e0616f6d57978788660911f028149c79d96096a8e99e61; - accounts[463] = 0xbd06a3cac3c12c2c4aad16228b77de736e213eb2ff13c2529f066136507f271c; - accounts[464] = 0xdbdaa3e867de8d2a4be2493e147d647463cc448d6bb08a5458c04a2421211590; - accounts[465] = 0xb99ca93ab87bcd5929345ec76f0940793a3af72252b824abfb3b0e3ed87d1955; - accounts[466] = 0x4911369e96652ed0f6ef4900ee94d7d01e352bada68f951579220e4eba789367; - accounts[467] = 0x26f794bdbeaf2582c7bf0610d13501aca74a389cec460bda9a93850fc3f859f6; - accounts[468] = 0xdcff3368cde8a6e491572f6bb724c7342b08a082615cb26a456c102913b1460b; - accounts[469] = 0x843abcba3792e0050422d313631c11a7003e5288fc7a16cad92ff927adaac4fb; - accounts[470] = 0x704f69824815c1462fffe6d1e903ac5cf43177dbfc2ccf7fc79c777331b1ea11; - accounts[471] = 0x1161970e6dee7f54cc19cd69373769139bc31604e3aaf8ad572433fdb7db18f9; - accounts[472] = 0x2b16788185699c3bf5dbbcf1ff73be7d42bbba053534de7242487f9e50c3252e; - accounts[473] = 0x4074aa5086f3710a27d945c9c35a221871a76ef853f53a2f0402c31f5bdf481; - accounts[474] = 0xfc2abaa15360c5e1b4b6956fb0378005f352f1ca7b02e4b1de87a0346325913; - accounts[475] = 0x6203e399259a7867bada992c3b8cad5e42687caf850ea57f82fab277fdad6e20; - accounts[476] = 0x778cc1c03fe57add03cee5dfd59f3615e556f515885c6d9a51bd4dd1b7053fdf; - accounts[477] = 0x7f4e0b00c417f6c373d049525884c102b15cca3902b789ec2d4b5ad53a7e5fe9; - accounts[478] = 0xc1d293877b442fe999c3a086ea23fd7c158e0b5fe8c9656f03c489cfbdc4e489; - accounts[479] = 0x12d1c95239e96f1ae68454f442d326d80cb12c6c813a863ca91c0903a8404d24; - accounts[480] = 0x5c9a9544a65cfa098369c0330c81425c6cbae6f84f404b8949c966691edffbae; - accounts[481] = 0xbb778ed797dc4c913cec61a667e97f4e5c9b236042845bb52f2d4ceddac3e641; - accounts[482] = 0xf8f382d268617cb239811ca3766032a839d4227dd251bc9825b3cae5767b66c; - accounts[483] = 0x2ba33048fcf2081a12c8dd245386b7678203080f6c79ce25b1019c3dbccdb0c5; - accounts[484] = 0x9493c8f58eb37552c92532df1dd603b7e6f175c8096db9776bf61351da22a707; - accounts[485] = 0x86b271e6b7cc4b7748e72c43d9ec28e562084fb9e71124dacb6748f192b3804c; - accounts[486] = 0x5cae28c1501fe254a06ba248af9baa02ddd6c8e22840bc1a59217bf22d7370ff; - accounts[487] = 0x30422a087cc02a924e33fcf326c5391313305c55046920d9863d525ee297e2d1; - accounts[488] = 0xcde847071c212c618f11a7dd68e854c00d419f2d1a8e0ed4788d3b382a5573a1; - accounts[489] = 0x782dc860924820bf6d578404af112c9f13c249d89e50a0cb0f8b441d571e18b6; - accounts[490] = 0xe989d01cc6646beb59cd9adb44c8e535b8e8b1392f68f9b6f52a39c061e96bb8; - accounts[491] = 0x7b6bd4a891d275e9d10691dac48d092f321a915292bc86c84d20a6866be7ce8a; - accounts[492] = 0x706de2c8eebcde98cd48175bf62597383486a28d1f966fc4406f100211b593ab; - accounts[493] = 0x915c9953bfbbf81a7db70a16f293a19eb6edd49ed56db6d737aab56ec3d2b11; - accounts[494] = 0x9b479785348a6e60faa7e6515251670bb4841cafd35e1d981dd3a80f23e4b6c8; - accounts[495] = 0x1cd86df0ede3a8bb7758f78b6d937595f534d909759ae8dddf2cd4ddadd71f32; - accounts[496] = 0x1bdfea40a218a9db5339d7d8db47125d183abaad82efd0f7fef9c84a46a61f9d; - accounts[497] = 0x58104d5e0bed1d3cec3764f44eff712892fa1c94d082cc6ebd6e438ef48ffc7f; - accounts[498] = 0xcf8d2ade0511789c1f511e557ccf581f6610cd37dd26d9e852b3e65f941a9b5d; - accounts[499] = 0x89e84650947cf9723af4e244b86f03069cd20e71d66b2a81562ebbb1f209a13b; - accounts[500] = 0x7036bcffdd0a5726f3d196fb6f50fb8f5510452deda342877fbbd281ce31e76d; - accounts[501] = 0x7b67825943645cee5b334a27bc79a0ab8e847c260f1c9ae0d833659454b3caba; - accounts[502] = 0xbc0b3d208af4f9c5ad38d878a4999189a035230ea7a32226a7ca228c3057486e; - accounts[503] = 0x4418aa1a90e8a80741de5d2def56b6e8050661c3664a35b329230a77d70f43c6; - accounts[504] = 0xdda0e5d23faa8a42656a600175979e960bb03e1df69f1948abbe1bf74d2d2a49; - accounts[505] = 0x44662cf8c0ec9b5399df670daa91a1be59150b94f281e4fe26d0970c67543bcb; - accounts[506] = 0x7d8244fe0606f56ba1a34fe339b3059d7657243ca32bf48a9dd143634de2d2c6; - accounts[507] = 0x435bd478ed1bf939be6b116719fe49ff138337b04b28bcd30e0201dadfc4c89a; - accounts[508] = 0xe94d33172158085a6b8339bfd24ab524ab5ede69f3f9955bd18583442b24e17f; - accounts[509] = 0x98c17b48b9046610c6404bd209c4e8ae692971dee075df5e7baa73a1ce48d809; - accounts[510] = 0xa9fca2be0f9049e19beefa2f619c77756acfd18bf775507d684a10d55ed928d2; - accounts[511] = 0x118ac1ad40379a6514bba010eb59d427af92c609b1f429b2cf72472bfe8d0f10; - accounts[512] = 0x13c1acc294f9007adbb32f8e0a4aaffa08126672fdf79686757c71dba2e1c277; - accounts[513] = 0x4cec481e54354d20080259e02b2b1e5ba39ee7156a2d096bf7c89129fc293f18; - accounts[514] = 0xdf1c72144a2c356f644e2e7c5a519707ef96e91d9334303773f5094319e60aed; - accounts[515] = 0x46b2c44c463248100d9214548c56d06eaa1be02744ac972a19abd808652cfc6f; - accounts[516] = 0xed7ad1c311333acd8716c8b619fc6e4f3c9e3b3499f42781d6eafa231f05ab32; - accounts[517] = 0xd8311ca67711e0b0328c1d4b9027ec11dcf4625a1c7df80ba2c9e73c9275f15a; - accounts[518] = 0x5c34116845edb58ac0a7fc8bdf98a40b6855f699d1c44cb805e41f07f1ab0972; - accounts[519] = 0xfe556f8c24181c93a1a5501d8a685324053e7c9d8f08d87b70184711155a3caf; - accounts[520] = 0x30103715c2b796ea620dfe65a42ffafc81c0eed2c8811edc50f14efe12bb0a6; - accounts[521] = 0xf60f14ef4f9d2a9d2bffa3b23b64c887720d4781b093e2ae8f8a0ab317abd888; - accounts[522] = 0xdc3ff9943552fdc33f0c07b59dfdc92d9e113fb323a9d9a9c9a79fea06cf9c0e; - accounts[523] = 0x1bba99ab3296d82247bcc5202a927f9ec4994400bc6af44db1b8c579cc707ae0; - accounts[524] = 0x4fadf1068fcfe71a8a75a36e2acddecea26470dcc141e8c8d53332ba43ce7699; - accounts[525] = 0xfb756ddebb7c2d4cbb8c1895e3bc2bd910a1583ae9be1899c98ae6d317d636dd; - accounts[526] = 0xf8e26c25bf279e2ca8acd2ddea8ff09a7e31714e8fe80bd099883b1ed0c2cb31; - accounts[527] = 0xe1779a487e6bab922ae58dd240cf513cc9421d1820753fe663e851adcf730293; - accounts[528] = 0x38202b74c4263d0936d92b2e836526dde14b1a1e6c0695080afde363c1fbd4e4; - accounts[529] = 0x10ba1999a11b579318ebac04402be3c4c8bdb9654c5695291212f8d8f3940902; - accounts[530] = 0xe545fd66ae94a9b6a4050ac1eaced94ff0a452b7ad2080c50e0defec0211fbaf; - accounts[531] = 0x427d7a82bb97e93bcfa3acd25cf501601b2e3c46e76172f80b2fda4e07b3f3a1; - accounts[532] = 0x5627760f2085951fafa86c81dd0f310cf220aa946986adc0c0ee8a0f7b2613bb; - accounts[533] = 0x299497ff987dd8a4c70b4dce031ba45e4ca339b121e6547d7c2191db80783e7c; - accounts[534] = 0x4c42fc438a3d5fb7ee58e80a2b965aa8148e54d98fbe0746aa47484969125c96; - accounts[535] = 0x1c81bd02f64d6284042298d03598bfe3935351ba26a7ccafd8fb034f2d302670; - accounts[536] = 0x4a00abc7ba6e817df454aad84569208ee653147a66886952394e9a95d3b4c0de; - accounts[537] = 0x41bc3e8ec1850e7d4a4fdb5f8cc9d0c59516e71564a0e24243554768f26c4dd2; - accounts[538] = 0x49c2c1e4a51cc0715ec23cffb3002056449e82ef9a2d9ec25c37b68b6a565665; - accounts[539] = 0x3c5e1ee39a11296ee0e1c8c580aa0ec2e03f3807b600d91705111086b3d18b71; - accounts[540] = 0x8a0761941f1c614e612d063ac53b2a7f345232951fedbda1e4b6fb6a78c68a1f; - accounts[541] = 0xbeaada28414cfac0dc7a80e8dbe9a822f3ce6fab96aaed6137bbb3d1460b3ef9; - accounts[542] = 0x2acffc299fd0c94ae5d9c24a11719f8f3b973fec19c58be56cdde330c9d7be93; - accounts[543] = 0x2db9f5ea84a0edf660033da92c9b3b62bae9ad22d48536d002eeb2472ab47c93; - accounts[544] = 0x6a99ad3e31ec9199613e18ce5443b637a3d6011c329794ffa11404b92fb7fe30; - accounts[545] = 0xbd817a78bcb225b120842587e205c988c8e66523cea95d72443bcb55245c2b75; - accounts[546] = 0x4b9a4cf7d46980c8f10901448b2d4ecd43c05071217a1ca7e3b710735a7daaf7; - accounts[547] = 0x697de08778e745adae4f21bf53805614b78f0c03a4bfef0b688fac509b9f490f; - accounts[548] = 0x719138e4dec1109908171a120e84589e49355bc2c99e3863e11b1cdaaf9484e3; - accounts[549] = 0x54ae10c12c0f31b5d1db604fc6e80d8b67b76c4ccea36359d3f96af237999c48; - accounts[550] = 0xb9da490caa2a8003e9d13e3110193d3c2e885efda85f507556bd70c01f440c8d; - accounts[551] = 0x5f246c3b90626b7fa24db6c61a0b85ca3ba0ecf84abb2de3936fc1d80145e14a; - accounts[552] = 0xeae629ff160eefa6b093df5f7829e60ab05e55cf9722924d44efecfebc0a8f03; - accounts[553] = 0x7b920a5ad3d4980cda196b275c8e157c36b29e8cf4a33f884b98db58815bdc50; - accounts[554] = 0x4c48112b6d547d051fb833fc55cb16653cbf68286592b4b90a5a7b46cc69a4d5; - accounts[555] = 0xc14c27be2b294bd41dcd3d0125eb641df6c53cfec56237c1f3986dcd30d15b2f; - accounts[556] = 0x4a4e540badb5f59097ff6b068787282b8f43f91804b74ad543932b479bebd75b; - accounts[557] = 0xd75cae7612a87fe721e1eb37bced7b94a4f0c8ac97c27b70e0784e8b006a9e78; - accounts[558] = 0x677778095d00683010e469690384ad2b83c1e1f4b49a683d1893f1e8a05bf07d; - accounts[559] = 0xeeeab7d338b67d82d69fa83a5a33c29ca2b18b3ffcf7efc5f53dc873e03ba0ac; - accounts[560] = 0xb3277fc134fd96f66f8debb8d5bf322aef192191e27b1b0c6e32ab65f48dfbb1; - accounts[561] = 0xc3b59bb664fbc068d577ae2475a9a5d5e1486ba981c2c5b8eb142f2aa0921f7a; - accounts[562] = 0x7197c05ab4596d822faa55b32fe2f109b22661632078fa1c29e563a24bda359b; - accounts[563] = 0xfddc702d9b2e8847f47e55a68f54b596145ee2501f771abe977220dedb72ad09; - accounts[564] = 0x39af779d7199447bc4b1d6d373b58d7f83b325a73820dfc87b33cd954d99b06f; - accounts[565] = 0x29ec1fa15061b94166684739843c492be9e4e7619e675744576046418ea9dbd2; - accounts[566] = 0x63f1d3362c175c6fe2fc545405d28dbb329ebccb89641cd873d8ceac1cd31b65; - accounts[567] = 0x5d6e742ba16bc53c0d358c0d1c8a052a1c15629e4477cffcbde84f2eda83b4ee; - accounts[568] = 0x536ed4d9eb111e054df2c8cdc24ed3c2a63724fab9c20c061fb179d0695218b7; - accounts[569] = 0xb9814373b6abf3107df813b02156e2643f559ebcce73c629de6ac46e430dcc2e; - accounts[570] = 0xbe4831d4a7257ff9b75bfa1be1d1ac09ccc9b3def702ce8f0566b1eae33785ce; - accounts[571] = 0xdbcb70954497f74410616578918a7ada9a83f791d8a7bb4e6fd9cc373a0809b8; - accounts[572] = 0xe1e061ac871c410d7fc6b27655d1fd2abde8bc9bf7ef55cebbf5250d175ab9a7; - accounts[573] = 0x81987858b06cba81463bf8ce83746c379560b27ea5fd56907b02b190ccbaa17c; - accounts[574] = 0x10b4c1630772562221d45d2ccf515fce602fcc618dcb7cce035adc9bafddb00b; - accounts[575] = 0x5af5ff323d58d68b10f1b741a7db274f1f0e1f95265fd01d8c1f66a64f3d8859; - accounts[576] = 0x508953413e661760d392fef5a91338c852dcfb2b51b6fee8c4b0252bbe2ef4; - accounts[577] = 0xd2ab67ceb760705c06b762e7e7b1d01135a01eb8d7650e9a6185a36c68ed904b; - accounts[578] = 0xbe83aafe6deec58052db9dab484a16080e31f6914067d0bb324fd2ef4f933434; - accounts[579] = 0x31f865953135ee402e8f4780be91448d42b63fb417abeb339f8b73200937937b; - accounts[580] = 0x78715faf07e43002445a08b0848b21cf48f021b0853df15894d23580ea334171; - accounts[581] = 0xfa03f6aee584dbebc8a244f808f9faca1009ca205b8740c7d09de8091235e3af; - accounts[582] = 0xdea4b33cc153966d84cdbea6a00d0f2f23416020bd4e4fd0cead1900e026c121; - accounts[583] = 0x70d3514e95bc4e44e2a26188b00c52bce8fb9599428cde067df02edc50c459f6; - accounts[584] = 0x91c9d682ebe6bafda1254c628b5c7d6cc25d9798d0587f86d779fe13d50cfc0b; - accounts[585] = 0x88bb79d5217e968aec91a1b08ea5e9869e6064c0ee7f50a8cc66e2360b39cfde; - accounts[586] = 0xe95c0a7c681d0bcfbc2dfb4f065209a7bbdf881b2e64c0dc8a185a6fa3675060; - accounts[587] = 0xae9b2a40146c1c7d88014429138f1590c6187389e63aa486babdfdca1af03a49; - accounts[588] = 0x24a9112722d37627cbc4f35158fb17a747d7c5407d1fe250ea1928eabd54534d; - accounts[589] = 0x166ce9a79c4b14d3fcd9622cbff4c853d4e445dd80dbddfde85e57b0f658c6df; - accounts[590] = 0x8451cc09f3b0827b93cded20c02bf59914430a1f3272c8864c2128f5757704b0; - accounts[591] = 0x1e60c74d1e17d322bd82448d082a1096b0ce0d6e80c541324a1071b406534032; - accounts[592] = 0xefd58819878ad55e4fe2ba80d8abc13ae2ab47cf748423519b07020114beeba0; - accounts[593] = 0x360941d61cc8506b3e3552842a370f7402a461a8600298e6b73ba50257696fe0; - accounts[594] = 0x2b92446e9fa8bbbc2cf817cd59cb1dfbe45841554c32de97cc444e03fc8bd78e; - accounts[595] = 0xdf29ff67765afc2a288dbe8af0b4e239d9e81e6b918a0b53d07714820c1697df; - accounts[596] = 0x2534741b9f165f82c1492d2009a6902a8c20c4928f85c0aa1ffbe5720467bb2a; - accounts[597] = 0xd1bd7ac7c54b7a04a2e501725323bef5ed52ee4088dbdd33de7d4f99d1b2264d; - accounts[598] = 0xb91133b0a3d2cf05a76c47653b05f0cf66435dcaaa785691d1b5f220c96a8352; - accounts[599] = 0xa451044c4d6291221f24f6c8cd99b98f9c805d7c16727d11cdd4b24761ed5f23; - accounts[600] = 0xc04b429fe8c0f7877f95b17e923484ec96276c22ed41bf45ba319da9b036bff7; - accounts[601] = 0x5e54c0165638cae17cb5231d5bca73dcb798edf6605f83f01262f01e04fd3ea9; - accounts[602] = 0xb68dba0b9dfdf22e8b6872f64bbefe00cffa509a4bc85b79bad5f761a9df7ff7; - accounts[603] = 0x549d9364267ace5cffaf5153b3f96a39229f35ad17e0e0de75e32970fa221e3b; - accounts[604] = 0xa65c265191b248ee74c0f50079b37000318838bd52fcd6484b33ea5341af5426; - accounts[605] = 0xaa0342e3352cb159991eac7399f36b2f08d4727bf93a37ebf0584ad6b70b3e24; - accounts[606] = 0x36fdcc9cae943fd85100a12ecd32a114d32b134be0a85857cb63164ea2ec00ff; - accounts[607] = 0xf84bee6187ee7f6eec22daa30b1542dc6a3a506788676f62f65591d7db5b04d0; - accounts[608] = 0x198a5e9e78f0e316451340738fa8f12ac0d879d47a6371147f43b99512344edf; - accounts[609] = 0x40e09fa4ac7d65bcedf8e0ba12472b85189eed6bda6cf3d2d51581964049dff6; - accounts[610] = 0xef5bcd5a3aef159ed99e1412f03d9787ab57fd83a046e188d51563d3586d709; - accounts[611] = 0x65735b758643668cefa331289803a6f027402c914f31620201f7f2517dba8c16; - accounts[612] = 0xea12c2f399ae4578be93162475b080d075aee0a3cddb8c0d301924cefdb53917; - accounts[613] = 0x336c399fb19757474bb1336c40327cc1e47de79821fffd80041dec43ac8760c9; - accounts[614] = 0xd72eae680cb12c0d1510bf7da4d067c64c7ecf1b9fff6ae97d50988d27a25f13; - accounts[615] = 0x1d83e76b6aefb3fd599d24dcc5193984ae6c949c1ac6937079bd26b64f173bac; - accounts[616] = 0x91a80c3022b0a22da1bc34757f8acc2ac5923ba75c04e0d5cef0c7be18f8f578; - accounts[617] = 0x6113f0e25e1ad02edbda6ad321279d971b823aa9fd5a0ea877d2a97a54c63a85; - accounts[618] = 0x2f2fc147a64885660c1738a2df8e3d2c1d9e82775f37a8b755bbf111fbc76b7e; - accounts[619] = 0xdbc62c6ccfc957ff676e6819cc634500055adf50dd872b908018f217dfd648ae; - accounts[620] = 0xa0f91b4be0d230c67d4bb9dc58c32207c34985c21481c87c1264301bad421fa2; - accounts[621] = 0x9237d7fb36f71083ff34534ab8e2500717709c84621ed28c93d8e626c79a6244; - accounts[622] = 0x10c35e8b5b5153829c8c862bfbcbeff76b37f120945f494e72a223a842762dad; - accounts[623] = 0x466b6985a213c50cdc9076782f11785433ea014846d88cae798a8b1a69a8787c; - accounts[624] = 0xaf0c9b6bb09847413b62e4286bbd951ce5ccd410362f5203b52eb21a21594155; - accounts[625] = 0xe5d2a49ddf4f06f52c161ea0a8ef3ceafc3ac6d6418542307e8272798a35210a; - accounts[626] = 0x15e907322c2bc59a80a1ebe307a7b7bf66e239ef53446099b401058e840e966f; - accounts[627] = 0x808f1394899c9ab1eae7c073028b2ee7495e7fdb17c55ae3a1152c6f48b758d; - accounts[628] = 0xa8398eccba4fe2be38aa1e6f68a7d5fb94416ceecd1a46ffeffb5065234d273b; - accounts[629] = 0x16bc2e4767a3728086214a58c6a3670e07762d788c4e4efe77aa8844bf50894d; - accounts[630] = 0x2bc8fd7c366550d47e930ca5d6c213294d47841b5b5d9034c349c5d6fea883bb; - accounts[631] = 0x7e07e6f220edbc42cc0f51e83b469ef99885197d83c0ddf00a54de4a9146647; - accounts[632] = 0x84866cb140d2c155fd584a4fd88aa52e5dc46c58d776ebc4745211c5e9c7e299; - accounts[633] = 0x901773eaabe589c0c17cfb4020bab5bd0a7178b263311778c7de02d0bfe35f0f; - accounts[634] = 0xd2a49fe2e8f9396f8b43003d2321e63a0a199abbc13325db33bb4658de443004; - accounts[635] = 0xb4a67e8d5e36fec2b25a0d87c45ebf6cb77065279521a0fde35afbb8f403270; - accounts[636] = 0x97bc621eea29d25cb038ff6737648ecd606a33b5ba32e3c3489695a2f2ddf3a5; - accounts[637] = 0x33edfd30fee3deb7fad1b1523db8cc4856a9b5c6411a384f283316119b5dc1b8; - accounts[638] = 0x993643d045ce0bbd31530e82664890ae5c16911d367287ecb3846a6d23d69c3f; - accounts[639] = 0x52de73169cf7663144ad26f244257391dbe8a6887c2013f16d8be7582e3a6a80; - accounts[640] = 0x5ada58a1d598c546bc2802e3880982319b1e53a65cc95199f5db3bc5d9a7aa5b; - accounts[641] = 0x424c4a9bee7795fc86fa6bf3323d616cd10080894144fa6c4d742183d83d4880; - accounts[642] = 0x3a533adedc070131593a7abd8d5d8855878b8b47d4c6de7bd7e9e281dbba935e; - accounts[643] = 0x2fc68af61637662bc07b4029841ef3b9a1dcf61842de9c1e3114403f4adbb607; - accounts[644] = 0x849336336facd19b9718fe58bf00eeefe4dd3fa8cd0aad45841ff52ee2c531d1; - accounts[645] = 0x6d43c67388301234d7fddd9ae5705a93ebccce3952ddea3d505d698fb7b28b5d; - accounts[646] = 0xc6a4464e066e9eedb1df7f6649eb0eb00caecdf1dcfb0c574598b399ec40ef30; - accounts[647] = 0x9c199f72dcb27aa96f503b296279489b618e7bdcbcc92121ade29295f82009f4; - accounts[648] = 0xb50aeb2aadfa531fa8b8e3898ebc2dd0fd77a98db61756d81f7dac9681a04b2e; - accounts[649] = 0x1776cd354ef597eafeac2a9cab1454ad01a714403ee2cc6ddff4f2fe2300bcca; - accounts[650] = 0x1c0f5860590059d1fd256d521d34812cabd5509b7a4eff14e97b44d98a6695e9; - accounts[651] = 0x89b554993e7295ef546d61870ffe7cfb59600689536a1f7279ea5b3761ce4c34; - accounts[652] = 0xe9b2a2944e1b6ee635c0a2e2856df34a7afe922f4f579f9d7772470b31def174; - accounts[653] = 0x4be521cfd753da5edaab6a4beb240029bedaedb26aa7542489bdb60dd655cfda; - accounts[654] = 0x97aeb1cb2ad21f736dff2481c8a816d00c8220b324541f459911c1d13bdd6a0e; - accounts[655] = 0x3839c58bcf2792befb2b6c55a717d15315c47b0e0f78547446bf4790a2339388; - accounts[656] = 0x7cda516db6db3e89d7cb57ed330311241227dee0e2e96b580ac8e0ac19cfb85f; - accounts[657] = 0x8992b0a0bb57c8cc8f799747370c39a3dad06714f5c5878e64375cd58ef19861; - accounts[658] = 0xd0bdff91fc2d76ca8a44d867ec91642df228c7c3c6901d0cb3988ebb3f87409b; - accounts[659] = 0x2b327bb5bc4f7df77a35c59c1c853cb33517a282215c721f4488381c22136b4; - accounts[660] = 0x711da32f23e2b9b65e0d0ec916777f06a8f4f0e25c522ee972504a7b2c349a2e; - accounts[661] = 0xebdf63b3251634bbbbff7ffd63f2ab83f3042ebe7ade9babfa82c5c0a53933ef; - accounts[662] = 0x6744187cf5b77544ef816bb16d445cf0ed275b330a8864c0945d9dffdd0cc310; - accounts[663] = 0x9b565b85e313c827dab0c4ac94f0d9ffe4e4b22280eacb6a447e73c9694105a9; - accounts[664] = 0x89f4741359d8b63a149a0a23af03fa599b73a5d15398715868dcdf68f8953053; - accounts[665] = 0x88fc639a4b937caac5a8e07b120b913608b261e35fa8a1609e77ceef6b8dbf1; - accounts[666] = 0xd6e208dbac23aefc7e52c9985b9535abc0effbb7a97d67b97f5c2ef849bc8150; - accounts[667] = 0x382e1b1110a2a55001cce64c770d8d04ec6832739aa5538dbe2d1a353da32ea6; - accounts[668] = 0x2097ad60d0a083af6d45062d8b2476d65d57fcfafe88c9e40dfedbb413cfa55f; - accounts[669] = 0x2b1fa0e3032142853556b7c592cffa33a232aba76e1e98715700d98289950dd7; - accounts[670] = 0xe9415c381f6c2e81f5df23fcdaa63eaedad56c324039fe9067a22b04e8ce306b; - accounts[671] = 0xf4cf0ebc8fd2866663af5a089ad7d0143d6d5dfcc17fabd5d4b8c133eaa873d7; - accounts[672] = 0xa7b036941c35b0e2a9d88c15eed45f0624211e4f1936f7f953a84bc1d87204af; - accounts[673] = 0xb816e72fad44217b983f4b02aca3c493244296dde45b26c7c2ee08a46d3cf5ae; - accounts[674] = 0xc43a546325b8cf7a1cc030c80d2b471b7d262192a7e275df1d0acb9cae2533a8; - accounts[675] = 0x9fa55dc4327fcc5af3bd15f9e43f4bdbda56ab17aab5352c8eed42353f74a05f; - accounts[676] = 0x9bdc0dec29de1dd1fdde49a28b0a8ee419aec6282b97d669cd19738911d132f2; - accounts[677] = 0x5d585ba21edd5837a01bb7b2a1091fc3e2e2fdbf5eb0061293ef69f471166dd8; - accounts[678] = 0xcbac756da3f1caa6a2577080c30dabdc2c335c65c7e463980bd0eda43304df8b; - accounts[679] = 0x71ee03c3e2e0bba586461def6dc8dc167b6b2f25a9a607b21a65d3b0d56f98ef; - accounts[680] = 0xeb52729638a679b63ef755dc94ef9a1693bf13339c1936f8df24cb974f72ab4d; - accounts[681] = 0xbf29e66a590607b1c4aed589fa4222275fba5251a8268e46ff159e934264e848; - accounts[682] = 0x8a90a5a51e745c08e9d643c31a8c7cae48a4d2b8aad38962285cbb8c040d44b6; - accounts[683] = 0xe1f0c6239c2934c73e25912d5ff12ba3cb331c5e6d7abcf8598812b1707ef5c9; - accounts[684] = 0xb5e200030051d4fb6e236306ab65b4b165e4cc53a7395e9e8f5e36ce5909e792; - accounts[685] = 0xbb422c80483c335b10cba0552cbd2c96f2d4132d5ccb77ca707edf5009c483a9; - accounts[686] = 0x3ba447d84404bee585443cdcf82b55d9671ca4e39609fb9acd32786c99a66c18; - accounts[687] = 0x690e1e2f7b4c60177bc8fb904d0416dc03e2bdac9c61bf22067b7e29961ad21a; - accounts[688] = 0xcb2301762a64894141bf6267683f6b21d3215ffc4c30f957f99ceb751f7988b6; - accounts[689] = 0x34dc9b6d91b431d04b91c57e7fa4de10d332deed3096a936c96e126f18a0bcb0; - accounts[690] = 0x5ca9910bc7e8504320db0696aeb46df2a03ad09f4638f5455bfd883982f3b89f; - accounts[691] = 0x5b27682739b7df6c9db6f0bed5c067e78099e92911338cdc752e45fc97f63ad7; - accounts[692] = 0xc0a0cb9d0e01bcbeba42347ba7031daa1d74502484fc5c0c09a93375badc6f89; - accounts[693] = 0x6ba73e3a30fb490dff5913ea7671ca1a71abd67db50b66bb43fc9580612e2ce; - accounts[694] = 0x70143caf0134a5627e0984b72398a24a446e09d6a1e6c0d339fd1555df55a89c; - accounts[695] = 0x75a32f28711e973d3944e275daa24e724ce041f4132f6f6a5d9f59367ca70ca5; - accounts[696] = 0x13de373e9316ae894831a7aa0879a2eddeff5e51e64ef0e067146ae3531583a6; - accounts[697] = 0xce2e700795df9d2243e339ca012d1e9d1807f3a01bcb5d981fb08c95858541d9; - accounts[698] = 0xb0437144fdbe715cc2f254fa02fc6dc49818bb83caafb580b13ab744a6ce5e1a; - accounts[699] = 0x41c111b9ea5fc61f6f5c81640373d33d901c91ccad67953025e846011cf9dd97; - accounts[700] = 0xce1154f628fd3b609d70d48096c540720166317918b566517aabf8fc4d718d3d; - accounts[701] = 0x305dcd27e17a3f3c0ada7b2524d9626824824c609ddac4622a1638a5af3f5a56; - accounts[702] = 0x2dcda2996dd5d3523f5d21cc2aaad8638774e51f353c1cbf22281a9e3f3844cb; - accounts[703] = 0xd07bd0689984494cf2efe92019951a6accb606a4355873b6c28c4cfa370b0a43; - accounts[704] = 0xcb27a84ef8f2ec29cdae46ec082e14ffeaaea281c7e065b69c8e6ce24eef1b73; - accounts[705] = 0xbf7581067ae3a22339139500c3ab218f101101a2114a088f8b033535f1460801; - accounts[706] = 0xfa6c008a0a7d2c28479cea58af78ab1ee4cb9b981b545df3574ce857459c1768; - accounts[707] = 0xb8f99264b5b97ccd265cfa6cbb1870ff15375bc2dd24b0503777f08b20a1fe7e; - accounts[708] = 0x569e4671fcdac46083c10c91ffef54eefe4c507f403052f1e907bb3ec9a43d86; - accounts[709] = 0xc546454ebd64c12cf54fa4c1fc14cdf5a38df2a46b76289409a0a8d620a5c010; - accounts[710] = 0x9be7c9dca38311ade6675686f6f397752a4cacf12b072ede07aded6b0ebaf8f6; - accounts[711] = 0x253347b19d54cbd342249be9c6a09d7f862084b7f2d74ffb7a3c3705970d0def; - accounts[712] = 0x954aae7185dcbae53b42282d47f9144be74eb8919f1173450921b2da7c6b2043; - accounts[713] = 0x8a6bfcacfd03fb309d7e4987233cdfef73779e2bd3f0c18ce0fb91c66f81d3f6; - accounts[714] = 0xd9647b28cb466b088029c233345f3907d42669d17a991032c5ce4f086d04895c; - accounts[715] = 0xad786ad5a6f561a6c21658520841c56cee46a8d394d4a419db6b9b400ebc3800; - accounts[716] = 0x410a67c3b6aec8ac28903367a7e8a73bf244df0c0087e67433678ee0545a88ea; - accounts[717] = 0x41764c3aa6250f0f2e00c5a8390f19af69ee98d6493802eaafd06902bce16692; - accounts[718] = 0xc6d99e4880eb12e842fec165e2dff7596effe289740a98e50f40b9f287467105; - accounts[719] = 0x6e9ae512ee0a00588a2dafd6669ea2609dcab04c62181eded94c28f6558b2700; - accounts[720] = 0x1cbb97b9196c2a7b8dd937acba95c960cd17b7503abaebc4e0127f6b7fa76934; - accounts[721] = 0x4531d3f85408ac0050b311e0f77af9fda1a342bc4ecd6d1091b89a9ba1a3d097; - accounts[722] = 0x7cc4cc4858b2139aca0ed85499eaa5133789f4f44bb725b363699bfe46005663; - accounts[723] = 0xb98bda222d3cd1afef82e95ea4ee0532c0130cfe14e77e4600da1f4ec37a0797; - accounts[724] = 0xdc9eeb323a44f03049f108342d76891b1a554e27ca5258e61a4ccf1f6c2355e0; - accounts[725] = 0x1bd15d6e8c576a6b6fd57cfc7ec1ab89d6a147d0e387d539f5bc5299b40bf6aa; - accounts[726] = 0x422d9d9f62ae390ec43ee0d59ad7e46b184fb6a7f7186e28baefee812eb978a6; - accounts[727] = 0x4f1714c73e3f23c69b0f7782304d686788c6fbc8a9ebbba124fd86148f7f9dae; - accounts[728] = 0x2a4d77092c9958139b56079c50cc73303bef9749fe56abb5a5594d257741d3e4; - accounts[729] = 0x985659398afc0290bebd9f7c17f7f16933639b79d3f7769639a334d8fcd9aa19; - accounts[730] = 0xc7c82a2558221a7116a60810960bb568242a6d701dd1e06698a00bf159bb4fbd; - accounts[731] = 0x58b3a9f6d41710277eaa7ed78c2792ad7e1e3ab70301e1484b08ee2cf95758b4; - accounts[732] = 0x9888a7bd269235f300014bef4d87d66723b2b7302e81ac85e71c3e07d278cc76; - accounts[733] = 0x4975a40dc8405999629f53baca2dc2fcce4bbbabc538b78913ae5a0e710aa37; - accounts[734] = 0xee937d818086f10a9b7a6ce19640195e98e49623f035fbee21431f314eb75097; - accounts[735] = 0x8635f426874e2d27cdb366b6bc8a67dd9ea524def5eb7210477d7bd3f29eecc2; - accounts[736] = 0xeb2a07f8ff2dfdc787576165e9beeda66c4397b636212b3c3b48d999959fa419; - accounts[737] = 0xb70f726541ad1bc530b8ff660d3705ffab6d74d4a76a5814cab326349aac69a3; - accounts[738] = 0xddc91d24c52bd12adf5a533b117f5b035e392ec5ae14ec2132bc52ec6ec6c9a5; - accounts[739] = 0xf636faa81c7636cb6d87f719d6e69bb53c236c128a796657907817f44e799051; - accounts[740] = 0xbfa4de5b552ef7f2ed5319d762bb4b90ec91201f00f5e1c9b99b8bfb2c328d00; - accounts[741] = 0x9119708ba086e7572db6989bad811fc081ee91265d4825aeb5a80c0a6406698e; - accounts[742] = 0x44f14fe64128ab44a1b7f251b0710d9a7b3e72e558818b8445d886961f93ae3a; - accounts[743] = 0xfdbb456aedcd3ff27ff2a595608375f41b7a6c787b5d6d6566277a62e911d2ee; - accounts[744] = 0xe038a3e9360f681200b5170b446179400b2394adbc669cfe9f24286ef0a45301; - accounts[745] = 0xa781f706049f2d7cfa7d16d24a17a667b45291198dd875761fc0117ae5ecd4e9; - accounts[746] = 0x4cb7c0ea0a96a1c9faced1c7eb635a21f07de348558052645dcabea3a7130e09; - accounts[747] = 0x7ee9f93fd269e1b9a5993aa3e3bdbc5565c9d74b96c977f07daafc2e4be70615; - accounts[748] = 0xc253c5940dc57d909d19037118b0ec17036fcadaa88ebd015765067a4e028e04; - accounts[749] = 0x3243d5a590136cb0bc65196eb6a2c188246605159218cfa870cd8c488bbad0f; - accounts[750] = 0xa3800a4839d5ffd4655a7a2a8c338a7664fce5538bc68243a1d4f57cd9eefb34; - accounts[751] = 0x6da50dfce207c64d3c9035d73bb20abdc2bf1617168e0f2a2e13543ea04df347; - accounts[752] = 0xbf0c321515b45a666735e52101d419b9b5b0be32999993f6fe29e918c2dd3a95; - accounts[753] = 0x3136da190df5986e25b443a39b1718c44884d317d88489799eff1e94feff1892; - accounts[754] = 0x8c8154e32a760eff64f698f2439f126eba0dc0a5369f541336e7f3c8c5c4bda2; - accounts[755] = 0xbd47cfbd1b8b7c5b02d667096ce7d83a88ecc932996a6fe52d0cc8aa0f2f5f0e; - accounts[756] = 0x605b5763b4cce9230149ba396718a01eb2382c4eb032fedde585bee2b7c262ed; - accounts[757] = 0x2486e5355d493b75704b8b1da0f2448975fd89ef738a16c049e1c38537cf5cf4; - accounts[758] = 0x6d462c98ac564402f26d0149b429587357626f53e41332ee440e84f5f8b1213; - accounts[759] = 0x8f252a343b0cb15e52a3e3b44323c57a9264fc6a53c1cffcff7ade0bca95645a; - accounts[760] = 0xf20334f5fb3bd4cb975f9767e5eb65dab920aca8415e3b0f127b82f8bb74d576; - accounts[761] = 0x3e2c75cfdfef1fdd7cb3def5c58d29a933306d9e9b4174828618049aba5fbdd6; - accounts[762] = 0xdee04bf52f95075203cbe00e863684477c3b5077f8717e3a9608cb6859e8e4bb; - accounts[763] = 0xcee92d6cf99d0b548d06d1a2180a149b8a0cb3434c5359f50d1f4642e4931586; - accounts[764] = 0x6905ee27053d0faaf9cc05942b7cee617fa51b557b4e4816e3fa597699feeed7; - accounts[765] = 0xb61c2666bdb36842cce193eea1b26de2406e2b34a60e3e9d135dbf6d4fe7acdb; - accounts[766] = 0x709ae8d9ddf727d61a03cec2168598ba7769709e44835c41b88bd6bc9dc161be; - accounts[767] = 0x9f23799f19bde72be5cd97dd88ef9cefa4af91de8aca64fffc85d1a7d3a0f4e8; - accounts[768] = 0xf0b2ae9330bdda3eab9e58393999417707ad330d1c2b04b3fefadd0b0d27cc51; - accounts[769] = 0x6b0eb5561e7068baa84f5aef6b7c1fe51407fe68ec09a5f10d0514f1ae811471; - accounts[770] = 0x761cc346b9fec9341b73ed7f4877d6a31606190b59190e5b66ce7e06258787f6; - accounts[771] = 0x399dae8353f7cbc510c9fe1f8243261dc7db5d5845ec1021dadf7a4098d053ef; - accounts[772] = 0x67c58f6dc51e2d1da6a284617ec13bce821de1ad687a36bbe3f77d388956a02e; - accounts[773] = 0x4ad3ca599859e95e6ecdc5257e598d7d56acc6075b48af6d27882ce77846594b; - accounts[774] = 0xcaaddea9cef9f3369d2fd9d4211775d995665d35ccd38732f4be61df660ea7eb; - accounts[775] = 0xed4bcbec309527bf2d8379da593ae7cf3cd7694dfd0341a0103e2c7b0bb1a51a; - accounts[776] = 0x53cec75ae9e6499959818d87a57f22dd57de8b755689e261f1858ddd6085d9f2; - accounts[777] = 0xc432af8ba5c981f3c7c9d283343fbc8f2fc223f378d2191b09c1ee9b53243e7c; - accounts[778] = 0x75e8574b22f0d054b63a1aeb477bec53f566dbf826d6bdaacec59acf8f2bb678; - accounts[779] = 0xa43a5f1f4c0ed617cdc9546b8f999a15bb369c2843ef5bcce645285626b605ae; - accounts[780] = 0xcaabf2fb3ca3505fea7da9682f1839b54e66bfae2c47736c36a2c1ac3bad4c46; - accounts[781] = 0x59e209c6a463b8ee3848199de505171eea38b1faaae5ba9f659eefdb02df91ae; - accounts[782] = 0x4ef216ecd5074a81ad25d751cfd5b4be30cf9aea0c54259a92a8f1d44c844f21; - accounts[783] = 0x5aef6cd0f299836e078f525ae9802c11a06fa86cdd358cdb75eec60806c4bb41; - accounts[784] = 0x8f23437e90c25ebe7568ef63007a5f22a76d11e45f821ba7618b33389d89311c; - accounts[785] = 0x8011b1a7a5341896e0623f8ae76b2b60e644202459edb95ddebc3e55802276f7; - accounts[786] = 0xd305a196b33a5c7781cbac744b65cdcda0d2481d32fda1d6766fb4fa3c3993be; - accounts[787] = 0x414b4ffcf8be761af2dfa7a393d42b50a72118c438c8ae8bf3b146d90ac73cc0; - accounts[788] = 0xa34864515ac71c03340daa70a7d71aa8c0e287bdc420e795e18b976a05fcd2a8; - accounts[789] = 0x53e747d5d2f383dcb78dcd3d07ff77b192126494cb577d85430c51472614bcf3; - accounts[790] = 0x69465af5336d3bf4aa4c3df86082139014c23963239f63d4fcde89513fb71367; - accounts[791] = 0xdfd6cba424a3c8af132881d7cdf0b5626163522ce343e9f1daaaff80297564f0; - accounts[792] = 0x2210450b92530f655b241dbc497085267ddd677981a01ea6d05d1a999a4d89d1; - accounts[793] = 0x5f15742cd8ce22e295c39a232120ccd266c9f20ada2dd3f11c64cf3d1b097f23; - accounts[794] = 0x846f863723b0e3adc07fc35844a5b447ce77d407a519611d2aad260fe0295553; - accounts[795] = 0xbbf8e0c2c03c267d6cfea16979f2b2e1aff71002fe61a9bc8d60e3330768457f; - accounts[796] = 0x41950cb6f4d9d6877cf14cae1dec7c07a7bf52a24370fd128309d94fe60a2d7d; - accounts[797] = 0xc1096f3f0c1f85686b9dee406e9deb5a36c34f943a899e6605b9c9fb0f1e585b; - accounts[798] = 0xa6427a5f6564aa7bb00babd990c9264cf07684ca44dec2d9b77770f25c1830b7; - accounts[799] = 0xf6860af8a68d78e29b9b918261f59384fc980ebcce3e045c068470f701e7d286; - accounts[800] = 0x76abb1abf82962fcb6a1ae7d7ca3be4bf49df589118d6a3558d1eb57be877434; - accounts[801] = 0xeb7190b0f7e8bf44d7af9fe826d33a1ab0664a630fc0b13f910c40d4f7370a71; - accounts[802] = 0xe3909cf78b477735cc460f9e074b84fdec92fc996346fdef8005dde38cbca442; - accounts[803] = 0xc6b41f10636082e9f5fbfc4c5bbc07a3d7b13543485f713ffbe4565c3a7b161f; - accounts[804] = 0x8f38104eefacdf925f600f03257014260d024cd690718a32e5fe8d2b82b9be40; - accounts[805] = 0x5b1f1533be6cac00d2f3f2e8e51173d267f15eb2a96f6e98a42d5c88c49a9c67; - accounts[806] = 0xe626e96e6e291cc34b09180183fc7118698f261ab435e24bcc745a364d59f8d0; - accounts[807] = 0x6cf7718671e0ab4387f6a306b73deeaf59ab208bb334b8585470e81edfb21c27; - accounts[808] = 0xba18d910387054ae3de16e72e0e7a4edf8d59b379cecf73a53175c8d08047497; - accounts[809] = 0x3751b9e3454e58b2960a5f70bdd50bb067de2c012e59c81b8b3310ae86ff13cd; - accounts[810] = 0xa3d6f8c3bb7dc3723dd44efa8ad5e4020d0a0dc4fbac45da0848a08bc5d2f186; - accounts[811] = 0x35c890087918ed1cd0c01d012f84493a458b21b81382f63f151cbaf0d55792ca; - accounts[812] = 0x64d6b267fcd62caa539d24a618b463e76d5786dc327d28cb0593669e55d37cba; - accounts[813] = 0x2dd5776efd530be33e887e0f5d37365665551c4f778fd6d8c3dbec37d37db1d1; - accounts[814] = 0x31789216d6b85be92af31755fc8ded73db37a960a4b3fa347a593d040e4608c8; - accounts[815] = 0xf6766c290b77ce5cf255c9e5a9cdf388774230d3598958ed3aca498317c1378d; - accounts[816] = 0x3d66dcae14539b9e6c59ab63b9b333d5b2c5c66d9c63526b09f70ca75aac7571; - accounts[817] = 0x3fca6a87cb81bd72b00a376ac9981bbd2b73becf1207d94c1e1aa6dd98a055d9; - accounts[818] = 0x8ceac4ede0bd4b996800dd3f33b731d4b21fa962d35c45f1cf5cc5a9fa06873d; - accounts[819] = 0x5dc7c5089eb107d22e30fe01ebabec08b1c3e3f2cbe3f4ab2ff27855ba6873d4; - accounts[820] = 0x45979112130880fa3c1e90f8c99411de2d752be3a1be229fcd75692944bce7d2; - accounts[821] = 0xee6ccb15725e4f5e567b7d7b25cf1ac8264bf2a67a284d06b048a07e5cb39eb8; - accounts[822] = 0xc2edc0f09fa83e74a0ed8c5ca8fab0d6451f47b42ff4088e49b6ca3a158509d; - accounts[823] = 0x82e80f3382664effd9af65001e1c0ca8a43f1891c0734391040964e9279e7e41; - accounts[824] = 0xce031f11aef3f21bed78e4a406f9455fd3bce721333215ac370d5f787120f6d0; - accounts[825] = 0x8cd90ac06ae976b682af3e4cb134ff331696d0fbbba10455edbf84bd024f2202; - accounts[826] = 0xa8948c359a1642a9861eda06cc4172a28dc3411b6da6c7666eaaf70fddaaee82; - accounts[827] = 0x4f6c24709c21a36b83125660fc7546d7f35079342cea0811a6bfffd42f8a3b25; - accounts[828] = 0x7951ea4cc4ee05f279be290a19e65453446fa6a8fac87ea74875c58bfab99899; - accounts[829] = 0x7df3eac0d25f92bea2400ce9aa880ce4027923c4c6f621ba6ec26b3ed7863c88; - accounts[830] = 0xa3aa2b37a62e0beaec9ddc4578fcea92145cb6400b35de99935743d8ea6d099b; - accounts[831] = 0x133529b25fd6a1c01fbc012725de7660be6964ddb323362108f7844a46232aa8; - accounts[832] = 0x3a29c27e7deb5bbad9008a226acd9c20e90a7d190d6362a755d28d351dc0cf53; - accounts[833] = 0x3fa14947117033cec2bc2c3b548955deb05d53d3f80716cf51898e911fb232f8; - accounts[834] = 0x35f9a0470d79d57d57a94ecdbcf8265b16c20b203de061f5691a26806390bc9b; - accounts[835] = 0x4b018f965054d1a13d9666953be4494c6922607117c119537f7d07deecc7ea9c; - accounts[836] = 0xdef54fe1643b7e4e3715560c86ed8d7be45dc2c5a74c30f491896018f423c714; - accounts[837] = 0x5c86fed1168617570c17a6916266b36035a6675e83956b0be888b4c9bfc39a12; - accounts[838] = 0xe5bb5920dace681142ce6225c6e4f50015c6784ebdf8b29f9f69856037c5b97f; - accounts[839] = 0x6a0686a3780443d46c37bc99acbf7a8eb3a925c2be4edf88e49d9aaf1d583bda; - accounts[840] = 0x75981168a4ab31a4f5253f4c8c90ce80ebce1110bc7979e02b496864b36024e; - accounts[841] = 0x221b27284af1d7841a66b30ccbfb8765c2ba517156de7d025b4a0b0994f98a1; - accounts[842] = 0xe78603384e749d0108f1a08ce0807d68e1a387b2900c96676311351d83b5055; - accounts[843] = 0xbe4c1ae2c3d8bed26c5e9ad2c7d0169f9b0bfb1d5d59e2a74031e5c537053fb9; - accounts[844] = 0xaae0392e3a2d262ea953462a9ad44ca3d3550fbe1d34f464899480a0c67b1624; - accounts[845] = 0xbd3d6012baf3b34432808c7d1f76b80164cc10e0dd0f1f3b1f9bd514da318ce2; - accounts[846] = 0xa5b7676b766aeaf6116b4362c76d8060c27805e72c7ac2655915b013d518499f; - accounts[847] = 0x3e64192bcebe15b955e1500940aca5272243d5296007de5c2a95e98924299f76; - accounts[848] = 0x93b991f416f097b773412b460e32eec9531bc8ddee9a5134b993be6f051bba2f; - accounts[849] = 0x4445bdc44559271735b7e7c6d0f84b8c39cb719178f66d404c9230cbf3249c9f; - accounts[850] = 0xdbd0810494feeaf808cebbdf90fecce2cc03383849bb9401fc0fe1caf7e8d65d; - accounts[851] = 0xf759cd60be326865d987b3a2c298af17286cb87f362500f2d93f23b5bbc8e2cd; - accounts[852] = 0x4a18b959454d274db6e8243903e5684dfc751cb1faf7903c536d53fa8bd2c5dc; - accounts[853] = 0xedd76cea7095f2533572a9f5a560ebe1dd03c6ca52bda61866447af3a0c127b6; - accounts[854] = 0x4ef267ad23be5c89516f95d0ea16ba2b155a80d0075b4c63e48c741b1c83597f; - accounts[855] = 0x5d8ebd9e3fce816a1dc85934ce5b895de6fbe50b9cb1a6787fc769cbf58fb13b; - accounts[856] = 0x9ffd97bbce0a0017f1aa4a32221844eaffa8b3ac0f9b2d1723dd3ea720c38de0; - accounts[857] = 0x7a769e8b6c9ede2f855c7f1158e24894af1d22106b06beea9fc605e2b3e576c1; - accounts[858] = 0xd31ede80c7eedcbf0968c18298bec9f1982d9e9c56d066ab0065d12f1e514d1; - accounts[859] = 0x12f6ca35fbc18f3be8175759e44c99bf6f18b6df44d88b7f2659fcd31e76e478; - accounts[860] = 0xf718f2e19334f10aa3f24c6d74c6184ec3b49c3239c7d45d9bf84e85776ab862; - accounts[861] = 0x704bb7fc0c6b43650aa74c713ab05df90b35eccf9e9eb81b30ecd19b1a092a52; - accounts[862] = 0x5ef996d687c207eb35bbcf960efc479150235beed93f6201ede0663c7ada5633; - accounts[863] = 0x94bae82c3ad2742d2c089eab6c2be21febcfd588359142339375b54c7fff07a5; - accounts[864] = 0x98af008b6fbef8adbed2074f1b4dfe0f206a4ada5ff87e94a66d1ba638c37e5e; - accounts[865] = 0xbc3deded4eda706c962cae2263167ece74ca0af5f48c68f0978937e9025322e0; - accounts[866] = 0x91c8d8b5efbd82ca00f2a88e1537db7d9839abc2a202cbb7ce8a19357dfc8dd8; - accounts[867] = 0x68bc82e0d33e3c7d25169cea1d04140ee132e9fd92a12f1826cf1bb903416346; - accounts[868] = 0x59b6a63ff7168c386efbfb7cda4e72ea252c085e64bb2ac5a504c34eb2d83de3; - accounts[869] = 0xf0b74d6e15daf312cb268a1a7d7aa611b811da0b40e7313349023fa2982820c1; - accounts[870] = 0x34d3d685f7d7f70c02e6e1e39c74f6244cc871944ea0e5a0f8383329f8552108; - accounts[871] = 0xb308eaa0bc69770526d5ac69701e291ef52b1009b9534e0fe2474a899fd430cc; - accounts[872] = 0x212340ec153d181d185f24a3d1cbd1a3c35384fac4d645ddda71884a967b6a7; - accounts[873] = 0x368863f3c1855a935085b903cb5ebd95c0b3891a2f9551666808c564eba126c1; - accounts[874] = 0x39178728c474420bdf8f4109a9431bbf0303715f31bdde050ed8f447c524a942; - accounts[875] = 0x6d44c530bda9a6b607cee3fc84ce8772aaaca2707b2608f955321eb9060f8eee; - accounts[876] = 0x7b383d3c0ab92d978041c9ddb7b802bdd7d1c7fd3e218fb583d718e6994d8065; - accounts[877] = 0xea63342d167e1061712135320b46e181ad34e56f6da12b769d34be575bae6a84; - accounts[878] = 0x2214bcd4542efc45ce17e176e816340c015ac0d557c48bc5c4c3809b2d427056; - accounts[879] = 0x4f39417555f6e8de9a5c3f6782f5cc7bd6b64cecaf4ff53f8a1551a00d3fa9dd; - accounts[880] = 0xf66a8f9b5c93c2e8195a149650530b84f9174b9fc0d49b7dea624f8dfe2f45ae; - accounts[881] = 0xce7b9633a2900fba600398086d12f57af46a3e89d07f549f4ce6d08d84b39060; - accounts[882] = 0xf4bbfa6fb46b10bc96a9341e1e2c45cdf1aeee2c7e4a05fedd7c2c3642dee4f1; - accounts[883] = 0x13e2bc1e8d2d1597ac30783342a2e063b71ec9a9de2c421f6acc825a7eda5378; - accounts[884] = 0x1f1144657872d50edac9171720b8f1acfd9ed39a7e799a528134e7b323597da8; - accounts[885] = 0x976b0fb711024a3e7b39f474d1c7edb7240cccd52063a03cedc5d38531c6b301; - accounts[886] = 0xd7e142af6097a992b2c825d8629347364bec0904e06560068f43a47915d5827c; - accounts[887] = 0xe3aa9a2c896ac5b1550a979af0d71b711a53fbd0e12df065b213fdaa2edbbadd; - accounts[888] = 0xcee7c5e079a72dfdfbca93ca725b7d128816418f37c1e3a22c64d993a8b63305; - accounts[889] = 0x9290ab84e082df9e44e96a6ee6f897baf91925222d5362d4aaed1372127f5e02; - accounts[890] = 0x4b63f3547680d8adaf94593a6497d9e6581ea0011dc834397ecef09fd8350276; - accounts[891] = 0x46e3c97d35f0c8b7311052e4daea110d0c2ea2e0b9685575e612cb05d2184ad8; - accounts[892] = 0xb440fba19ce1707a6be32b4ec3fafbc82c3ef4e2bda27918885d8dd1cf4646a1; - accounts[893] = 0xcc612ab7242d2c8fe935e2f2d034537a5e6025cd986a8b3dc6c51b28b84191b; - accounts[894] = 0x821eb45a2d69865f2d30af8285a129f4c8258b4d0f7f5a725c8d3118d8777217; - accounts[895] = 0xd75176004262c7ce325117a742fdf61f73713319ec0c42aa6977f1a6932c0738; - accounts[896] = 0x7d0b1dee00a7f288b6f120de3a1cafd0d623ca664676a32352cdcc9e3b096a98; - accounts[897] = 0xe874d93e3f37422117e6ed91aa4c780008021fbfe319ff1f3439abba79630ba2; - accounts[898] = 0x1ed048469e42210a1569b6d11809b318935945f8052d24759585f7528fe40b50; - accounts[899] = 0xa01f35ce4e94573fcdc672e9c0ce4df4dc27176a02e014a2d9c998a529bd7fe0; - accounts[900] = 0xce7a64fbe3977c37cc1b7247cdc85e05b91b1f6e6518d8ddcd22fe0684e3a341; - accounts[901] = 0x654bec8fd71d61a65555a3ba00e752437d8fd4f420877f4747f08ac2b27f5dc1; - accounts[902] = 0x53d745a2aab340b29eb2887d0994ec5d0c7b85ee81d3e7ea2da1e691e9f47c7b; - accounts[903] = 0x35f0aa1094ce2bd0ab4febff560773cdccd8d65439a0dfb4859cde597a144591; - accounts[904] = 0x514a9c5270c9d2e16d86925df4028caaac9966db315fc27de37b6832ce5de3e3; - accounts[905] = 0x13be4ba49be09fb4b9c9424207232f8fa2229a830d80ddcc8a78a31591d1b618; - accounts[906] = 0x504899fd4650b2e36466b5a48a71b4457e1f703de0ff8f3ce41966201551fd66; - accounts[907] = 0x7789cad457b28f5bc0b978f081e21694b1ba58ca1de54175fcb79e40ed03c73f; - accounts[908] = 0x8b5f037adf92246665894f47dc587a8c08a87cd8ad352a862dd4cdeb2eede236; - accounts[909] = 0x2d4ce53c38eb6c32f57734150077bc5a220b8a51372604fd00c52292c39a315e; - accounts[910] = 0x2ae218495be483bfed7ef39dd49f56584da3a0c13d6fe3572a28eb291ebb254d; - accounts[911] = 0xc75930c98b2c5fb54730b634ea8875f1bdea22ac4c4b0bb38cca7ae1628d276f; - accounts[912] = 0xeaa8e80934346177a797c27549c0fb7878300a9bd533ee6be09a2572d97a078d; - accounts[913] = 0x77758b0883ba0e84b8cddee1dc5d8390339dca0bbcb5922786957f64b82f9b9f; - accounts[914] = 0xa6f7fca8e087fcc5384f5cd99aea33728ea3f6a938ac6e6f602c91349d96334c; - accounts[915] = 0xa0fb4c3a6d0cc16a2ac51d738b59b2c78d958ea99aa17c415c8478bdee2aeb47; - accounts[916] = 0x68d3def44a8e431fe0576a463c1d2cdd1b4e2a9ee204c61234a270f29ad2d3f3; - accounts[917] = 0x81e942d497e6b9ddff4c3c39904f6315a7a1299b0a3fb0bc1877a93120f668db; - accounts[918] = 0xc997b5b486bdc1a49d5b126bc42bd7927fbeb51c89a5f20436bdadd586a1ca67; - accounts[919] = 0xbc832368de71d75882d9966c31e4b131bb4df465b37f92b4119811bc16f5865; - accounts[920] = 0x3f9dc8a27c35696ccf51b4efb122e877a483abbf83aca5fa223749e6e4df8165; - accounts[921] = 0xba59f28ed27118e490d2debf2fbbf4649d29902afa266373cdbd0703a85e4c9e; - accounts[922] = 0xb2d8e8b99be6315ccdc8a4e4e1eb3d6f398aa280c13b1e51714450cd654f0f3c; - accounts[923] = 0xf043c71d6a5d514bd875c829818571c744104e707ba36417d18ba5c6126abe96; - accounts[924] = 0x6c721b07f4de7047f1f8aa5a29ee17c90304210757ae063220930213e3ef15b4; - accounts[925] = 0xb32a26b11daf8965c6ed99a012a2cff8f3d660921e7e939064e8ae554a7626; - accounts[926] = 0xa7d80b0ec139f0f1231e3d580cc58fc8ccdc947f04cadc5565218bfc296c2851; - accounts[927] = 0xe66f0836321fc9825769baa9f51a8359b9215dc5b6836da7ccfde2eaaf215e0; - accounts[928] = 0xf47317a40cad7bf74a209694559df70fac0f09ab005e13beb739330d4057e807; - accounts[929] = 0x53e4d95a69d26f642b8dad4de49e313670b7f94dbd222ba471bfbb3acca7e200; - accounts[930] = 0x728a24f5f0e311dc6674188a7c743dc56086bbbd9609d9bd4a733a1081577795; - accounts[931] = 0xfe0fc899436abf493ebcae37c0f2c4523f5addd436311125db13095cf302e207; - accounts[932] = 0xf7e7afd0265be9b27f78aaf398e1086299c927d3e0f59396161001422a15571f; - accounts[933] = 0x9fe032ff53f7b24ddf0f29c1746f96fd5949d01194c1e9d75d86a1dbd16be912; - accounts[934] = 0x3b94e4978e741daff095e94cfdc27d3d99850043e03f937d4415a161d58fad6d; - accounts[935] = 0xa7df1b92f0d7e3feb2587144aa85d1f88b83327f27cd63db2880cd2f57c7629c; - accounts[936] = 0xdcbc699db1c580bf1b8169171b0a405ccc42873bb316bf49b84a6e748b6f09fd; - accounts[937] = 0xa7a43acfc97d70cf3029f5de4efd08bdc8f95d33cf3cacc146d316fe8b00b202; - accounts[938] = 0x8afe9361d4260bc61c6e3cc035ab16e0d5ef12c3b3511fc976f28b8c20754ef5; - accounts[939] = 0xe7e8e659be661723747ec83813b6024f22d839a910f48bbc7e8c0eea60fc864; - accounts[940] = 0x929003d7e6f66fea3e058e50a586f7e5a4d6edca0411c50cc342ab3493640b68; - accounts[941] = 0xf6aafcbe8409515c6d7eadfc616184b176604e995bf10011fea7858f7cf7963e; - accounts[942] = 0x8c0d62f472f0b6f7401ebdb284f91c724e39d99827e133954da1b97db71488d4; - accounts[943] = 0xbb0731a22f7bd0985e2f4cd0118dbb258904ff47a484a20a469fe7a947adc7ac; - accounts[944] = 0xb91576dc0b647c8e7f281e1f87379689cd37a8c887d216511f459ad483cb5467; - accounts[945] = 0x9358a0983dec54cd8a6c1bc6294083ea5484c2740c4a3c5a5f773a4f2b2a812f; - accounts[946] = 0x72626ab3453adc6833f411193b5906f0dbe6db0202106e3dfafecf156f9fb10b; - accounts[947] = 0x3bb65598da9233fe0d73874c5106a4c32f4f52518de56e4b4fbd2e2c9e32a3f5; - accounts[948] = 0xa666d672b75d7e7e175ec1d0608d553cd9751f0d46a5435250d4f5f95cb1efa; - accounts[949] = 0x5f2c6f507b85fbf6b1818890c3b39eba90dd5d47d24eafea3ebee1df4d17864b; - accounts[950] = 0xce686621359b5d3ccb6d29f9df5e27c5c728d52276fa4356fc3d4f6b2c8313d9; - accounts[951] = 0xc362e25c2d9974bfd559ddc272b0da8d2890d86d56e2285dc92719c0ecca09cc; - accounts[952] = 0x707971d364aadb0df30b3503dcd275f5d6d1b2152811655986853f75b28be533; - accounts[953] = 0x39c018f99143cb96766fcfe97085fa9dfc6d6712c1334934fbb49f850d25182f; - accounts[954] = 0x218e27013f2df25761453e06d782cf74d02b8c15b15b64a7b38dd3833fd55c7b; - accounts[955] = 0x1587353913f3e4e8a0f4fbbb417669200c1b0ccd6c83d5b6b5c59727289d6924; - accounts[956] = 0x40518ceb759cf244520154c16e771f7fb77da9e6a261e414af41621bec502b76; - accounts[957] = 0x6dd40edee890ef2ad96cb8464f97cc44f66b68c972084848ce521186a8d60294; - accounts[958] = 0x7a0a350d251a9ce303b1c7da706203363df9241dd07f0fca87b6f6d02f01832; - accounts[959] = 0x6fbe0683170b1ba81439dfb533ed8e35faa3cb3943f4d89caa2741ba11cc972c; - accounts[960] = 0x9ca683eeb35a64f697e4b653e2ff7ab33be84306f264f313f4b86d273b67231d; - accounts[961] = 0x489cbf7c51c032f223b97d950a48e084fdd9d8c762f50782f0eea16c8891c3dc; - accounts[962] = 0x77dc433294bb0542b66e9b8adc28ef7dfdd128792823f1848dcdac9a79182f98; - accounts[963] = 0xdc8e8ddb28b16211a8bccdac26715035884e4c71de7256aeee551855632958ce; - accounts[964] = 0x55c96e6b5f71e7a5a13c168cb4f43520230207e8a3b4fad37a07e459c61fee0a; - accounts[965] = 0xd5880f7d9e2f1134c1c87a0e4c6eb904967b95e67a1c1619914522296c0b0113; - accounts[966] = 0x1c9f03632b433e30dfa0cb9e99d480f9eed3858f5c2abd7e775fc79e11f0dfbb; - accounts[967] = 0x9bac5c95649fe4420b745f2fa5750e87136358cae2e75a58678842d9281936b7; - accounts[968] = 0x4bbc2dcc6a957edb259baec0af17ec84a52ac78b43d550d9863bc24510299835; - accounts[969] = 0xcfbb392ef740f3052eff04befb98aed215b618cac989ff78a92c4f12509509a5; - accounts[970] = 0x72bb4ad9733ccbc9946746d5112c48d2bd7113e72570d2e0a48d88abdb836c63; - accounts[971] = 0x59cb6e8fcdb007c4f7a873c5af1517867323a8e496273f38816a11a7085731af; - accounts[972] = 0x803121bbd7d756e0eeb6009d36fea6b8d80d190f511ddbe90f043984fafb9a8d; - accounts[973] = 0x19887069fa2d273007f393c477298e997670060da4cf83f6241e46293bd769ad; - accounts[974] = 0x67e0c3a7eecd468f14d2cdc998938c6dcd0aa3ea7fc93096c3fe3a2ac2f70c62; - accounts[975] = 0xabf886b96c6f004479983f501640c96f2f7a2588d85483e9e9736aad020a8f37; - accounts[976] = 0x6d62b70107e4b2dbcbeb1103f87f9fa792f984cc50c67433f67c36dab35997f0; - accounts[977] = 0xe3ef3b2033d5181e859ff75a414152b6657d49796a600d2ddb28218cfc2ca683; - accounts[978] = 0xd6062a46cf3a49240ab7f6a694e1a28c1ac5eaba69caef65b4818c9f7938e5da; - accounts[979] = 0x74b13528c5303b89a2626d4529a7f2d1771bc9a16528e4cc1bd5580877a400a4; - accounts[980] = 0x27936388f46dbc1403a1058e2f17f0217e921f42f095b52cce855caa75f65444; - accounts[981] = 0xfcfd9e06d02343cf728528811db504f8b20c824d1852c04eb707244fb6f7e850; - accounts[982] = 0x795843ea1091795e72b45b6ef07b09a0e91f8ca09cd257f41ca8c84094961c6c; - accounts[983] = 0x2e890a539e077a0e83c77d6baf8aa5aee4e73733161701abb43c1e397024114b; - accounts[984] = 0x4351753cc9da887f4482877bd83ac661226e5686a6b6f3942b079742fe467f50; - accounts[985] = 0x3e653a28b66720776e1187f59cfcaf470d2771417de8db64a5b094d7f6cea4b3; - accounts[986] = 0x93cf670ae609d4ff80f67d797087f05379f3af7dd720906a5ebc971973fc4f30; - accounts[987] = 0x8d71b4012889c3604489df9dbf72be3fda47bfd5cfea2a8d309487bb24bf73c7; - accounts[988] = 0xfec286ffaa42cc0bb97dfd68a8e6129b67faeeecf0fc4b2bdb9d2dac167e32c2; - accounts[989] = 0x43b0324e858451ccb25786a584d1d6daea05abc8b09b47b9f6ae10323e5b64d5; - accounts[990] = 0x281cdb6a1786f4120e2d37a3cf9c23592e4685dad2f4396fa40996c17196ea9e; - accounts[991] = 0x9eec69a0a446a419b7cfb5f3388147e8c12f786a0d29d16d22431cd19476fb8; - accounts[992] = 0x15a5b9eed2eb386a74c138552cd680c5e2dcce20e41651cc4b827b29867192f8; - accounts[993] = 0xdd9f93fa63ff30725332899cfa3fa3f09148ae1696d50cc4e15ce30e82da2b53; - accounts[994] = 0x64913ecf261245b731cdb0300277f7da7f1fe172b8eebb80a91674e909db1723; - accounts[995] = 0x64af790b191c89d2fd25376fcb71ee127861e0b610a5429109ece732923d3b66; - accounts[996] = 0x8028dd5b3bce431076b529b07b39e062412ad505c6c4b8cc131400af23c6a358; - accounts[997] = 0x542920ccc418c11cf60ec2771d2890959afb007f96daa78959a63356f1f9485f; - accounts[998] = 0x547782eaaeec04231067f807c9e57be29d80643ceb96c81628c3ae2811ef0420; - accounts[999] = 0x8cce618efa12258aaa38fff59599ddcc77eda06f7304e762ad969ad2cde7e38a; - - return accounts[999]; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/SstoreBench_no_opt.sol b/crates/vm/levm/bench/revm_comparison/contracts/SstoreBench_no_opt.sol deleted file mode 100644 index ca88b90d335..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/SstoreBench_no_opt.sol +++ /dev/null @@ -1,5443 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -contract SstoreBench_no_opt { - function Benchmark(uint256 _input) public returns (uint256 result) { - assembly { - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - sstore(0x100, 0x20) - } - return 0x1; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20ApprovalTransfer.sol b/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20ApprovalTransfer.sol deleted file mode 100644 index aa488a8547c..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20ApprovalTransfer.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -import "./lib/ERC20.sol"; - -contract ERC20Approval is ERC20 { - constructor() ERC20("ERC20Approval", "E20_APP") {} - - function Benchmark(uint256 n) external returns (uint256 result) { - _mint(msg.sender, 1000000000 * 10**decimals()); - for (uint256 i = 1; i < n; i++) { - require( - allowance(msg.sender, msg.sender) == 0, - "Allowance at start is nonzero" - ); - approve(msg.sender, i); - require( - allowance(msg.sender, msg.sender) == i, - "Sender has no allowance" - ); - transferFrom(msg.sender, msg.sender, i); - require( - allowance(msg.sender, msg.sender) == 0, - "Allowance at end is nonzero" - ); - } - return balanceOf(msg.sender); - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20Mint.sol b/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20Mint.sol deleted file mode 100644 index 75283ed5ba8..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20Mint.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -import "./lib/ERC20.sol"; - -contract ERC20Mint is ERC20 { - constructor() ERC20("ERC20_Mint", "E20_MINT") {} - - function Benchmark(uint256 n) external returns (uint256 result) { - address testAddress = 0x1234567890123456789012345678901234567890; - for (uint256 i = 0; i < n; i++) { - _mint(testAddress, i); - } - return balanceOf(testAddress); - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20Transfer.sol b/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20Transfer.sol deleted file mode 100644 index 47a87bad8c7..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/erc20/ERC20Transfer.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -import "./lib/ERC20.sol"; - -contract ERC20Transfer is ERC20 { - constructor() ERC20("ERC20_Transfer", "E20_TRANSFER") {} - - function Benchmark(uint256 n) external returns (uint256 result) { - address testAddress = 0x1234567890123456789012345678901234567890; - _mint(_msgSender(), 10000 * 10**decimals()); - for (uint256 i = 0; i < n; i++) { - transfer(testAddress, i); - } - return balanceOf(testAddress); - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/Context.sol b/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/Context.sol deleted file mode 100644 index f304065b460..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/Context.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) - -pragma solidity ^0.8.0; - -/** - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract Context { - function _msgSender() internal view virtual returns (address) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes calldata) { - return msg.data; - } -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/ERC20.sol b/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/ERC20.sol deleted file mode 100644 index 2d3f3d3c203..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/ERC20.sol +++ /dev/null @@ -1,428 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) - -pragma solidity ^0.8.0; - -import "./IERC20.sol"; -import "./IERC20Metadata.sol"; -import "./Context.sol"; - -/** - * @dev Implementation of the {IERC20} interface. - * - * This implementation is agnostic to the way tokens are created. This means - * that a supply mechanism has to be added in a derived contract using {_mint}. - * For a generic mechanism see {ERC20PresetMinterPauser}. - * - * TIP: For a detailed writeup see our guide - * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How - * to implement supply mechanisms]. - * - * We have followed general OpenZeppelin Contracts guidelines: functions revert - * instead returning `false` on failure. This behavior is nonetheless - * conventional and does not conflict with the expectations of ERC20 - * applications. - * - * Additionally, an {Approval} event is emitted on calls to {transferFrom}. - * This allows applications to reconstruct the allowance for all accounts just - * by listening to said events. Other implementations of the EIP may not emit - * these events, as it isn't required by the specification. - * - * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} - * functions have been added to mitigate the well-known issues around setting - * allowances. See {IERC20-approve}. - */ -contract ERC20 is Context, IERC20, IERC20Metadata { - mapping(address => uint256) private _balances; - - mapping(address => mapping(address => uint256)) private _allowances; - - uint256 private _totalSupply; - - string private _name; - string private _symbol; - - /** - * @dev Sets the values for {name} and {symbol}. - * - * The default value of {decimals} is 18. To select a different value for - * {decimals} you should overload it. - * - * All two of these values are immutable: they can only be set once during - * construction. - */ - constructor(string memory name_, string memory symbol_) { - _name = name_; - _symbol = symbol_; - } - - /** - * @dev Returns the name of the token. - */ - function name() public view virtual override returns (string memory) { - return _name; - } - - /** - * @dev Returns the symbol of the token, usually a shorter version of the - * name. - */ - function symbol() public view virtual override returns (string memory) { - return _symbol; - } - - /** - * @dev Returns the number of decimals used to get its user representation. - * For example, if `decimals` equals `2`, a balance of `505` tokens should - * be displayed to a user as `5.05` (`505 / 10 ** 2`). - * - * Tokens usually opt for a value of 18, imitating the relationship between - * Ether and Wei. This is the value {ERC20} uses, unless this function is - * overridden; - * - * NOTE: This information is only used for _display_ purposes: it in - * no way affects any of the arithmetic of the contract, including - * {IERC20-balanceOf} and {IERC20-transfer}. - */ - function decimals() public view virtual override returns (uint8) { - return 18; - } - - /** - * @dev See {IERC20-totalSupply}. - */ - function totalSupply() public view virtual override returns (uint256) { - return _totalSupply; - } - - /** - * @dev See {IERC20-balanceOf}. - */ - function balanceOf(address account) - public - view - virtual - override - returns (uint256) - { - return _balances[account]; - } - - /** - * @dev See {IERC20-transfer}. - * - * Requirements: - * - * - `to` cannot be the zero address. - * - the caller must have a balance of at least `amount`. - */ - function transfer(address to, uint256 amount) - public - virtual - override - returns (bool) - { - address owner = _msgSender(); - _transfer(owner, to, amount); - return true; - } - - /** - * @dev See {IERC20-allowance}. - */ - function allowance(address owner, address spender) - public - view - virtual - override - returns (uint256) - { - return _allowances[owner][spender]; - } - - /** - * @dev See {IERC20-approve}. - * - * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on - * `transferFrom`. This is semantically equivalent to an infinite approval. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function approve(address spender, uint256 amount) - public - virtual - override - returns (bool) - { - address owner = _msgSender(); - _approve(owner, spender, amount); - return true; - } - - /** - * @dev See {IERC20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {ERC20}. - * - * NOTE: Does not update the allowance if the current allowance - * is the maximum `uint256`. - * - * Requirements: - * - * - `from` and `to` cannot be the zero address. - * - `from` must have a balance of at least `amount`. - * - the caller must have allowance for ``from``'s tokens of at least - * `amount`. - */ - function transferFrom( - address from, - address to, - uint256 amount - ) public virtual override returns (bool) { - address spender = _msgSender(); - _spendAllowance(from, spender, amount); - _transfer(from, to, amount); - return true; - } - - /** - * @dev Atomically increases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {IERC20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function increaseAllowance(address spender, uint256 addedValue) - public - virtual - returns (bool) - { - address owner = _msgSender(); - _approve(owner, spender, allowance(owner, spender) + addedValue); - return true; - } - - /** - * @dev Atomically decreases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {IERC20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `spender` must have allowance for the caller of at least - * `subtractedValue`. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) - public - virtual - returns (bool) - { - address owner = _msgSender(); - uint256 currentAllowance = allowance(owner, spender); - require( - currentAllowance >= subtractedValue, - "ERC20: decreased allowance below zero" - ); - unchecked { - _approve(owner, spender, currentAllowance - subtractedValue); - } - - return true; - } - - /** - * @dev Moves `amount` of tokens from `from` to `to`. - * - * This internal function is equivalent to {transfer}, and can be used to - * e.g. implement automatic token fees, slashing mechanisms, etc. - * - * Emits a {Transfer} event. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `from` must have a balance of at least `amount`. - */ - function _transfer( - address from, - address to, - uint256 amount - ) internal virtual { - require(from != address(0), "ERC20: transfer from the zero address"); - require(to != address(0), "ERC20: transfer to the zero address"); - - _beforeTokenTransfer(from, to, amount); - - uint256 fromBalance = _balances[from]; - require( - fromBalance >= amount, - "ERC20: transfer amount exceeds balance" - ); - unchecked { - _balances[from] = fromBalance - amount; - // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by - // decrementing then incrementing. - _balances[to] += amount; - } - - emit Transfer(from, to, amount); - - _afterTokenTransfer(from, to, amount); - } - - /** @dev Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * - * Emits a {Transfer} event with `from` set to the zero address. - * - * Requirements: - * - * - `account` cannot be the zero address. - */ - function _mint(address account, uint256 amount) internal virtual { - require(account != address(0), "ERC20: mint to the zero address"); - - _beforeTokenTransfer(address(0), account, amount); - - _totalSupply += amount; - unchecked { - // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. - _balances[account] += amount; - } - emit Transfer(address(0), account, amount); - - _afterTokenTransfer(address(0), account, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, reducing the - * total supply. - * - * Emits a {Transfer} event with `to` set to the zero address. - * - * Requirements: - * - * - `account` cannot be the zero address. - * - `account` must have at least `amount` tokens. - */ - function _burn(address account, uint256 amount) internal virtual { - require(account != address(0), "ERC20: burn from the zero address"); - - _beforeTokenTransfer(account, address(0), amount); - - uint256 accountBalance = _balances[account]; - require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); - unchecked { - _balances[account] = accountBalance - amount; - // Overflow not possible: amount <= accountBalance <= totalSupply. - _totalSupply -= amount; - } - - emit Transfer(account, address(0), amount); - - _afterTokenTransfer(account, address(0), amount); - } - - /** - * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. - * - * This internal function is equivalent to `approve`, and can be used to - * e.g. set automatic allowances for certain subsystems, etc. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `owner` cannot be the zero address. - * - `spender` cannot be the zero address. - */ - function _approve( - address owner, - address spender, - uint256 amount - ) internal virtual { - require(owner != address(0), "ERC20: approve from the zero address"); - require(spender != address(0), "ERC20: approve to the zero address"); - - _allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - - /** - * @dev Updates `owner` s allowance for `spender` based on spent `amount`. - * - * Does not update the allowance amount in case of infinite allowance. - * Revert if not enough allowance is available. - * - * Might emit an {Approval} event. - */ - function _spendAllowance( - address owner, - address spender, - uint256 amount - ) internal virtual { - uint256 currentAllowance = allowance(owner, spender); - if (currentAllowance != type(uint256).max) { - require( - currentAllowance >= amount, - "ERC20: insufficient allowance" - ); - unchecked { - _approve(owner, spender, currentAllowance - amount); - } - } - } - - /** - * @dev Hook that is called before any transfer of tokens. This includes - * minting and burning. - * - * Calling conditions: - * - * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens - * will be transferred to `to`. - * - when `from` is zero, `amount` tokens will be minted for `to`. - * - when `to` is zero, `amount` of ``from``'s tokens will be burned. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _beforeTokenTransfer( - address from, - address to, - uint256 amount - ) internal virtual {} - - /** - * @dev Hook that is called after any transfer of tokens. This includes - * minting and burning. - * - * Calling conditions: - * - * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens - * has been transferred to `to`. - * - when `from` is zero, `amount` tokens have been minted for `to`. - * - when `to` is zero, `amount` of ``from``'s tokens have been burned. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _afterTokenTransfer( - address from, - address to, - uint256 amount - ) internal virtual {} -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/IERC20.sol b/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/IERC20.sol deleted file mode 100644 index 82a00e485dd..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/IERC20.sol +++ /dev/null @@ -1,89 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) - -pragma solidity ^0.8.0; - -/** - * @dev Interface of the ERC20 standard as defined in the EIP. - */ -interface IERC20 { - /** - * @dev Emitted when `value` tokens are moved from one account (`from`) to - * another (`to`). - * - * Note that `value` may be zero. - */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /** - * @dev Emitted when the allowance of a `spender` for an `owner` is set by - * a call to {approve}. `value` is the new allowance. - */ - event Approval( - address indexed owner, - address indexed spender, - uint256 value - ); - - /** - * @dev Returns the amount of tokens in existence. - */ - function totalSupply() external view returns (uint256); - - /** - * @dev Returns the amount of tokens owned by `account`. - */ - function balanceOf(address account) external view returns (uint256); - - /** - * @dev Moves `amount` tokens from the caller's account to `to`. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transfer(address to, uint256 amount) external returns (bool); - - /** - * @dev Returns the remaining number of tokens that `spender` will be - * allowed to spend on behalf of `owner` through {transferFrom}. This is - * zero by default. - * - * This value changes when {approve} or {transferFrom} are called. - */ - function allowance(address owner, address spender) - external - view - returns (uint256); - - /** - * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * IMPORTANT: Beware that changing an allowance with this method brings the risk - * that someone may use both the old and the new allowance by unfortunate - * transaction ordering. One possible solution to mitigate this race - * condition is to first reduce the spender's allowance to 0 and set the - * desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * - * Emits an {Approval} event. - */ - function approve(address spender, uint256 amount) external returns (bool); - - /** - * @dev Moves `amount` tokens from `from` to `to` using the - * allowance mechanism. `amount` is then deducted from the caller's - * allowance. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transferFrom( - address from, - address to, - uint256 amount - ) external returns (bool); -} diff --git a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/IERC20Metadata.sol b/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/IERC20Metadata.sol deleted file mode 100644 index 982bc39eb82..00000000000 --- a/crates/vm/levm/bench/revm_comparison/contracts/erc20/lib/IERC20Metadata.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) - -pragma solidity ^0.8.0; - -import "./IERC20.sol"; - -/** - * @dev Interface for the optional metadata functions from the ERC20 standard. - * - * _Available since v4.1._ - */ -interface IERC20Metadata is IERC20 { - /** - * @dev Returns the name of the token. - */ - function name() external view returns (string memory); - - /** - * @dev Returns the symbol of the token. - */ - function symbol() external view returns (string memory); - - /** - * @dev Returns the decimals places of the token. - */ - function decimals() external view returns (uint8); -} diff --git a/crates/vm/levm/bench/revm_comparison/create_bench_page.py b/crates/vm/levm/bench/revm_comparison/create_bench_page.py deleted file mode 100755 index 315e68131b8..00000000000 --- a/crates/vm/levm/bench/revm_comparison/create_bench_page.py +++ /dev/null @@ -1,76 +0,0 @@ -import json -import os - -print(""" - - - - - - Benchmarking Report - - - -""") - -print("

Ethrex LEVM benchmarks

") - -print("""https://github.com/lambdaclass/ethrex_benchmarks""") -print("""
""") -print("""
""") - -for root, dirs, files in os.walk("./bench-results"): - for file in files: - if file.endswith(".json"): - file = f"./bench-results/{file}" - with open(file, "r") as f: - data = json.load(f) - print(""" - - - - - - - - - - - - - -""") - first_mean = -1 - for row in data["results"]: - if first_mean == -1: - first_mean = row["mean"] - row["change"] = (row["mean"] / first_mean) * 100 - for row in data["results"]: - change_text = "" - - if row["change"] != 100.0: - if row["change"] < 100.0: - value = (100.0 - row["change"]) / 100 - change_text = f"""({value:.2f} times faster)""" - else: - value = (row["change"] - 100.0) / 100 - change_text = f"""({value:.2f} times slower)""" - print(f""" - - - - - - - - - - """) - print(""" - - """) - -print("""""") -print("") diff --git a/crates/vm/levm/bench/revm_comparison/src/benchmark.rs b/crates/vm/levm/bench/revm_comparison/src/benchmark.rs deleted file mode 100644 index 45c8ede6e17..00000000000 --- a/crates/vm/levm/bench/revm_comparison/src/benchmark.rs +++ /dev/null @@ -1,82 +0,0 @@ -use ethrex_crypto::keccak::keccak_hash; -use revm_comparison::{levm_bench::run_with_levm, revm_bench::run_with_revm}; -use std::{fs::File, io::Read}; - -enum VM { - Revm, - Levm, -} - -const DEFAULT_REPETITIONS: u64 = 10; -const DEFAULT_ITERATIONS: u64 = 100; - -fn main() { - let usage = "usage: benchmark [revm/levm] [bench_name] (#repetitions) (#iterations)"; - - let vm = std::env::args().nth(1).expect(usage); - let vm = match vm.as_str() { - "levm" => VM::Levm, - "revm" => VM::Revm, - _ => { - eprintln!("{usage}"); - std::process::exit(1); - } - }; - - let benchmark = std::env::args().nth(2).expect(usage); - - let runs: u64 = std::env::args() - .nth(3) - .unwrap_or_else(|| DEFAULT_REPETITIONS.to_string()) - .parse() - .expect("Invalid number of repetitions: must be an integer"); - - let number_of_iterations: u64 = std::env::args() - .nth(4) - .unwrap_or_else(|| DEFAULT_ITERATIONS.to_string()) - .parse() - .expect("Invalid number of iterations: must be an integer"); - - let bytecode = load_contract_bytecode(&benchmark); - let calldata = generate_calldata("Benchmark", number_of_iterations); - - match vm { - VM::Levm => run_with_levm(&bytecode, runs, &calldata), - VM::Revm => run_with_revm(&bytecode, runs, &calldata), - } -} - -// Auxiliary functions for getting calldata and bytecode. - -fn generate_calldata(function: &str, n: u64) -> String { - let function_signature = format!("{function}(uint256)"); - let hash = keccak_hash(function_signature.as_bytes()); - let function_selector = &hash[..4]; - - // Encode argument n (uint256, padded to 32 bytes) - let mut encoded_n = [0u8; 32]; - encoded_n[24..].copy_from_slice(&n.to_be_bytes()); - - // Combine the function selector and the encoded argument - let calldata: Vec = function_selector - .iter() - .chain(encoded_n.iter()) - .copied() - .collect(); - - hex::encode(calldata) -} - -fn load_contract_bytecode(bench_name: &str) -> String { - let path = format!( - "{}/contracts/bin/{bench_name}.bin-runtime", - env!("CARGO_MANIFEST_DIR"), - ); - - println!("Loading bytecode from file {path}"); - - let mut file = File::open(path).unwrap(); - let mut contents = String::new(); - file.read_to_string(&mut contents).unwrap(); - contents -} diff --git a/crates/vm/levm/bench/revm_comparison/src/compile.rs b/crates/vm/levm/bench/revm_comparison/src/compile.rs deleted file mode 100644 index 5f987679a45..00000000000 --- a/crates/vm/levm/bench/revm_comparison/src/compile.rs +++ /dev/null @@ -1,67 +0,0 @@ -use std::fs; -use std::path::Path; -use std::process::Command; - -fn main() { - let contracts_dir = format!("{}/contracts", env!("CARGO_MANIFEST_DIR")); - - walk_and_compile(Path::new(&contracts_dir)); -} - -/// Recursively walks through the contracts directory and compiles all `.sol` files found. -/// It skips the `lib` directory to avoid compiling library contracts. -fn walk_and_compile(dir: &Path) { - for entry in fs::read_dir(dir).unwrap() { - let entry = entry.unwrap(); - let path = entry.path(); - - if path.is_dir() && path.file_name().unwrap() != "lib" { - walk_and_compile(&path); - } else if let Some(ext) = path.extension() { - if ext == "sol" { - compile_contract( - &path, - !path - .file_name() - .unwrap() - .to_str() - .unwrap() - .contains("no_opt"), - ); - } - } - } -} - -/// Compiles a single Solidity contract file using `solc`. -/// The compiled binary will be placed in the `contracts/bin` directory. -fn compile_contract(sol_path: &Path, opt: bool) { - let outpath = format!("{}/contracts/bin", env!("CARGO_MANIFEST_DIR")); - - let mut args = vec![ - "--bin-runtime", - "--overwrite", - sol_path.to_str().unwrap(), - "--output-dir", - &outpath, - ]; - - if opt { - args.push("--optimize"); - } - println!("compiling {}", sol_path.display()); - run_solc(&args); -} - -/// Runs the Solidity compiler (`solc`) with the given arguments and prints the output. -fn run_solc(args: &[&str]) { - let output = Command::new("solc") - .args(args) - .output() - .expect("Failed to compile contract"); - - let stdout = String::from_utf8(output.stdout).unwrap(); - let stderr = String::from_utf8(output.stderr).unwrap(); - println!("{stdout}"); - println!("{stderr}"); -} diff --git a/crates/vm/levm/bench/revm_comparison/src/levm_bench.rs b/crates/vm/levm/bench/revm_comparison/src/levm_bench.rs deleted file mode 100644 index f18a3207ccb..00000000000 --- a/crates/vm/levm/bench/revm_comparison/src/levm_bench.rs +++ /dev/null @@ -1,115 +0,0 @@ -use bytes::Bytes; -use ethrex_blockchain::vm::StoreVmDatabase; -use ethrex_common::{ - Address, U256, - constants::EMPTY_TRIE_HASH, - types::{Account, BlockHeader, Code, EIP1559Transaction, Transaction, TxKind}, -}; -use ethrex_crypto::NativeCrypto; -use ethrex_levm::errors::VMError; -use ethrex_levm::{ - Environment, - db::gen_db::GeneralizedDatabase, - errors::TxResult, - tracing::LevmCallTracer, - vm::{VM, VMType}, -}; -use ethrex_storage::Store; -use ethrex_vm::DynVmDatabase; -use rustc_hash::FxHashMap; -use std::hint::black_box; -use std::sync::Arc; - -// Use a constant byte array to define the Address at compile time. -const SENDER_ADDRESS: u64 = 0x100; -const CONTRACT_ADDRESS: u64 = 0x42; - -pub fn run_with_levm(contract_code: &str, runs: u64, calldata: &str) { - let bytecode = Bytes::from(hex::decode(contract_code).unwrap()); - let calldata = Bytes::from(hex::decode(calldata).unwrap()); - - let mut db = init_db(bytecode); - - // The tx is invariant across runs (the nonce lives in the env, not the tx), and the VM now - // borrows its tx (`&'a Transaction`), so build it once here and lend it to each VM. - let tx = Transaction::EIP1559Transaction(EIP1559Transaction { - to: TxKind::Call(Address::from_low_u64_be(CONTRACT_ADDRESS)), - data: calldata, - ..Default::default() - }); - - // when using stateful execute() we have to use nonce when instantiating the vm. Otherwise use 0. - for _nonce in 0..runs - 1 { - let mut vm = init_vm(&mut db, 0, &tx).unwrap(); - let tx_report = black_box(vm.stateless_execute().unwrap()); - assert!(tx_report.is_success()); - } - let mut vm = init_vm(&mut db, 0, &tx).unwrap(); - let tx_report = black_box(vm.stateless_execute().unwrap()); - - assert!(tx_report.is_success(), "{:?}", tx_report.result); - - match tx_report.result { - TxResult::Success => { - println!("output: \t\t0x{}", hex::encode(tx_report.output)); - } - TxResult::Revert(error) => panic!("Execution failed: {error:?}"), - } -} - -// Auxiliary functions for initializing the Database and the VM with the appropriate values. - -fn init_db(bytecode: Bytes) -> GeneralizedDatabase { - // The store type for this bench shouldn't matter as all operations use the LEVM cache - let in_memory_db = Store::new("", ethrex_storage::EngineType::InMemory).unwrap(); - let header = BlockHeader { - state_root: *EMPTY_TRIE_HASH, - ..Default::default() - }; - let store: DynVmDatabase = Box::new(StoreVmDatabase::new(in_memory_db, header).unwrap()); - - let mut cache = FxHashMap::default(); - cache.insert( - Address::from_low_u64_be(CONTRACT_ADDRESS), - Account::new( - U256::MAX, - Code::from_bytecode(bytecode.clone(), ðrex_crypto::NativeCrypto), - 0, - FxHashMap::default(), - ), - ); - cache.insert( - Address::from_low_u64_be(SENDER_ADDRESS), - Account::new( - U256::MAX, - Code::from_bytecode(Bytes::new(), ðrex_crypto::NativeCrypto), - 0, - FxHashMap::default(), - ), - ); - - GeneralizedDatabase::new_with_account_state(Arc::new(store), cache) -} - -fn init_vm<'a>( - db: &'a mut GeneralizedDatabase, - nonce: u64, - tx: &'a Transaction, -) -> Result, VMError> { - let env = Environment { - origin: Address::from_low_u64_be(SENDER_ADDRESS), - tx_nonce: nonce, - gas_limit: (i64::MAX - 1) as u64, - block_gas_limit: (i64::MAX - 1) as u64, - ..Default::default() - }; - - VM::new( - env, - db, - tx, - LevmCallTracer::disabled(), - VMType::L1, - &NativeCrypto, - ) -} diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs deleted file mode 100644 index f66c1d3478e..00000000000 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod levm_bench; -pub mod revm_bench; diff --git a/crates/vm/levm/bench/revm_comparison/src/revm_bench.rs b/crates/vm/levm/bench/revm_comparison/src/revm_bench.rs deleted file mode 100644 index 2e0f0e083f8..00000000000 --- a/crates/vm/levm/bench/revm_comparison/src/revm_bench.rs +++ /dev/null @@ -1,30 +0,0 @@ -use revm::{ - Evm, - db::BenchmarkDB, - primitives::{Address, Bytecode, TransactTo, address}, -}; -use std::hint::black_box; - -pub fn run_with_revm(contract_code: &str, runs: u64, calldata: &str) { - let rich_acc_address = address!("1000000000000000000000000000000000000000"); - let bytes = hex::decode(contract_code).unwrap(); - let raw_bytecode = Bytecode::new_raw(bytes.clone().into()); - - let mut evm = Evm::builder() - .modify_tx_env(|tx| { - tx.caller = rich_acc_address; - tx.transact_to = TransactTo::Call(Address::ZERO); - tx.data = hex::decode(calldata).unwrap().into(); - }) - .with_db(BenchmarkDB::new_bytecode(raw_bytecode)) - .build(); - - for _ in 0..runs - 1 { - let result = black_box(evm.transact()).unwrap(); - assert!(result.result.is_success(), "{:?}", result.result); - } - let result = black_box(evm.transact()).unwrap(); - assert!(result.result.is_success(), "{:?}", result.result); - - println!("output: \t\t{}", result.result.into_output().unwrap()); -} diff --git a/docs/developers/release-process.md b/docs/developers/release-process.md index 3be5ff37558..e9eafde0eb8 100644 --- a/docs/developers/release-process.md +++ b/docs/developers/release-process.md @@ -44,7 +44,6 @@ After updating the version in the `Cargo.toml` files, we need to update the `Car - `crates/guest-program/bin/zisk/Cargo.lock` - `crates/guest-program/bin/openvm/Cargo.lock` - `crates/l2/tee/quote-gen/Cargo.lock` -- `crates/vm/levm/bench/revm_comparison/Cargo.lock` - `tooling/Cargo.lock` Then, go to the `CLI.md` file located in `docs/` and update the version of the `--builder.extra-data` flag default value to match the new version (for both ethrex and ethrex l2 sections). diff --git a/tooling/Cargo.lock b/tooling/Cargo.lock index da18b8caa61..dd49ab32d88 100644 --- a/tooling/Cargo.lock +++ b/tooling/Cargo.lock @@ -78,7 +78,7 @@ dependencies = [ "sp1-sdk", "tokio", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", ] [[package]] @@ -171,7 +171,7 @@ dependencies = [ "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "once_cell", "rand 0.8.5", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", "serde_with", @@ -278,7 +278,6 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "borsh", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "thiserror 2.0.18", ] @@ -315,7 +314,7 @@ dependencies = [ "either", "serde", "serde_with", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -849,19 +848,7 @@ dependencies = [ "serde_json", "tokio", "tracing", - "tracing-subscriber 0.3.23", -] - -[[package]] -name = "ark-bls12-381" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", + "tracing-subscriber", ] [[package]] @@ -872,7 +859,6 @@ checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec", "ark-ff 0.5.0", - "ark-r1cs-std", "ark-std 0.5.0", ] @@ -1038,35 +1024,6 @@ dependencies = [ "hashbrown 0.15.5", ] -[[package]] -name = "ark-r1cs-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-relations", - "ark-std 0.5.0", - "educe", - "num-bigint 0.4.6", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" -dependencies = [ - "ark-ff 0.5.0", - "ark-std 0.5.0", - "tracing", - "tracing-subscriber 0.2.25", -] - [[package]] name = "ark-serialize" version = "0.3.0" @@ -1204,16 +1161,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "aurora-engine-modexp" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" -dependencies = [ - "hex", - "num", -] - [[package]] name = "auto_impl" version = "1.3.0" @@ -1387,12 +1334,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "az" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5eb007b7cacc6c660343e96f650fedf4b5a77512399eb952ca6642cf8d13f7" - [[package]] name = "backoff" version = "0.4.0" @@ -1548,9 +1489,6 @@ name = "bitflags" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" -dependencies = [ - "serde_core", -] [[package]] name = "bitvec" @@ -1560,7 +1498,6 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", - "serde", "tap", "wyz", ] @@ -1599,15 +1536,6 @@ dependencies = [ "cpufeatures 0.3.0", ] -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.7", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -2618,17 +2546,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive-where" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "derive_builder" version = "0.20.2" @@ -2726,7 +2643,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.4", + "block-buffer", "const-oid", "crypto-common", "subtle", @@ -2973,7 +2890,6 @@ dependencies = [ "hex", "itertools 0.13.0", "rayon", - "revm", "serde", "serde_json", "simd-json", @@ -3004,7 +2920,7 @@ dependencies = [ "prettytable-rs", "rayon", "rustc-hash 2.1.2", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", "thiserror 2.0.18", @@ -3195,7 +3111,7 @@ dependencies = [ "scrypt", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "sha3", "thiserror 1.0.69", "uuid 0.8.2", @@ -3262,7 +3178,7 @@ dependencies = [ "rand 0.8.5", "rayon", "reqwest 0.12.28", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", "spawned-concurrency", @@ -3273,7 +3189,7 @@ dependencies = [ "tokio-util", "tracing", "tracing-appender", - "tracing-subscriber 0.3.23", + "tracing-subscriber", "tui-logger", "url", "vergen-git2 9.1.0", @@ -3316,10 +3232,10 @@ dependencies = [ "once_cell", "rayon", "rkyv", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "sha3", "thiserror 2.0.18", "tinyvec", @@ -3352,10 +3268,10 @@ dependencies = [ "rayon", "rkyv", "rustc-hash 2.1.2", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "thiserror 2.0.18", "tracing", ] @@ -3389,8 +3305,8 @@ dependencies = [ "num-bigint 0.4.6", "p256", "ripemd", - "secp256k1 0.30.0", - "sha2 0.10.9", + "secp256k1", + "sha2", "thiserror 2.0.18", "tiny-keccak", ] @@ -3408,7 +3324,7 @@ dependencies = [ "reqwest 0.12.28", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "thiserror 2.0.18", "tokio", "tracing", @@ -3479,7 +3395,7 @@ dependencies = [ "rand 0.8.5", "ratatui", "reqwest 0.12.28", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", "serde_with", @@ -3504,7 +3420,7 @@ dependencies = [ "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "lambdaworks-crypto 0.13.0", "rkyv", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_with", "thiserror 2.0.18", @@ -3538,7 +3454,7 @@ dependencies = [ "tokio", "tokio-util", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", "url", ] @@ -3561,7 +3477,7 @@ dependencies = [ "hex", "reqwest 0.12.28", "rustc-hex", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", "thiserror 2.0.18", @@ -3569,7 +3485,7 @@ dependencies = [ "tokio-util", "tower-http", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", "url", ] @@ -3602,7 +3518,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", ] [[package]] @@ -3624,7 +3540,7 @@ dependencies = [ "hex", "ratatui", "reqwest 0.12.28", - "secp256k1 0.30.0", + "secp256k1", "serde", "spawned-concurrency", "thiserror 2.0.18", @@ -3666,9 +3582,9 @@ dependencies = [ "rayon", "rocksdb", "rustc-hash 2.1.2", - "secp256k1 0.30.0", + "secp256k1", "serde", - "sha2 0.10.9", + "sha2", "snap", "spawned-concurrency", "spawned-rt", @@ -3767,10 +3683,10 @@ dependencies = [ "rand 0.8.5", "rayon", "reqwest 0.12.28", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "spawned-concurrency", "spawned-rt", "thiserror 2.0.18", @@ -3778,7 +3694,7 @@ dependencies = [ "tokio-util", "tower-http", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", "uuid 1.23.0", ] @@ -3798,7 +3714,7 @@ dependencies = [ "itertools 0.13.0", "lazy_static", "reqwest 0.12.28", - "secp256k1 0.30.0", + "secp256k1", "serde", "serde_json", "thiserror 2.0.18", @@ -4373,16 +4289,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "gmp-mpfr-sys" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfc928d8ff4ab3767a3674cf55f81186436fb6070866bb1443ffe65a640d2d6" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - [[package]] name = "grep-matcher" version = "0.1.8" @@ -5269,7 +5175,7 @@ dependencies = [ "elliptic-curve", "once_cell", "serdect", - "sha2 0.10.9", + "sha2", "signature", ] @@ -5283,7 +5189,7 @@ dependencies = [ "elliptic-curve", "hex", "once_cell", - "sha2 0.10.9", + "sha2", "signature", "sp1-lib 5.2.4", ] @@ -5316,7 +5222,7 @@ dependencies = [ "ff 0.13.1", "hex", "serde_arrays", - "sha2 0.10.9", + "sha2", "sp1_bls12_381", "spin", ] @@ -5330,7 +5236,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "serde", - "sha2 0.10.9", + "sha2", "sha3", ] @@ -5344,7 +5250,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "serde", - "sha2 0.10.9", + "sha2", "sha3", ] @@ -5467,52 +5373,6 @@ dependencies = [ "zstd-sys", ] -[[package]] -name = "libsecp256k1" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" -dependencies = [ - "arrayref", - "base64", - "digest 0.9.0", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", - "sha2 0.9.9", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libssz" version = "0.2.2" @@ -5540,7 +5400,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63c6d6d5ce5d79bba66bc98c99869eedffedf7f14f0aa0915f1a62802650bdf6" dependencies = [ "libssz", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -5617,7 +5477,7 @@ dependencies = [ "eyre", "futures", "hex", - "secp256k1 0.30.0", + "secp256k1", "tokio", "url", ] @@ -5820,7 +5680,7 @@ dependencies = [ "rocksdb", "tokio", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", ] [[package]] @@ -6174,7 +6034,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ - "proc-macro-crate 3.5.0", "proc-macro2", "quote", "syn 2.0.117", @@ -6316,7 +6175,7 @@ dependencies = [ "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", "elliptic-curve", "primeorder", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -6927,7 +6786,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" dependencies = [ "pest", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -6936,9 +6795,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "phf_macros", "phf_shared", - "serde", ] [[package]] @@ -6961,19 +6818,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "phf_shared" version = "0.11.3" @@ -7667,8 +7511,8 @@ dependencies = [ "hex", "nix 0.30.1", "rand 0.8.5", - "secp256k1 0.30.0", - "sha2 0.10.9", + "secp256k1", + "sha2", "tokio", "tokio-util", "tracing", @@ -7775,195 +7619,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "revm" -version = "27.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6bf82101a1ad8a2b637363a37aef27f88b4efc8a6e24c72bf5f64923dc5532" -dependencies = [ - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database", - "revm-database-interface", - "revm-handler", - "revm-inspector", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", -] - -[[package]] -name = "revm-bytecode" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c52031b73cae95d84cd1b07725808b5fd1500da3e5e24574a3b2dc13d9f16d" -dependencies = [ - "bitvec", - "phf", - "revm-primitives", - "serde", -] - -[[package]] -name = "revm-context" -version = "8.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd508416a35a4d8a9feaf5ccd06ac6d6661cd31ee2dc0252f9f7316455d71f9" -dependencies = [ - "cfg-if", - "derive-where", - "revm-bytecode", - "revm-context-interface", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc90302642d21c8f93e0876e201f3c5f7913c4fcb66fb465b0fd7b707dfe1c79" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-database" -version = "7.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a276ed142b4718dcf64bc9624f474373ed82ef20611025045c3fb23edbef9c" -dependencies = [ - "alloy-eips", - "revm-bytecode", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-database-interface" -version = "7.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c523c77e74eeedbac5d6f7c092e3851dbe9c7fec6f418b85992bd79229db361" -dependencies = [ - "auto_impl", - "either", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-handler" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1529c8050e663be64010e80ec92bf480315d21b1f2dbf65540028653a621b27d" -dependencies = [ - "auto_impl", - "derive-where", - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database-interface", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-inspector" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f78db140e332489094ef314eaeb0bd1849d6d01172c113ab0eb6ea8ab9372926" -dependencies = [ - "auto_impl", - "either", - "revm-context", - "revm-database-interface", - "revm-handler", - "revm-interpreter", - "revm-primitives", - "revm-state", - "serde", - "serde_json", -] - -[[package]] -name = "revm-interpreter" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff9d7d9d71e8a33740b277b602165b6e3d25fff091ba3d7b5a8d373bf55f28a7" -dependencies = [ - "revm-bytecode", - "revm-context-interface", - "revm-primitives", - "serde", -] - -[[package]] -name = "revm-precompile" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cee3f336b83621294b4cfe84d817e3eef6f3d0fce00951973364cc7f860424d" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "arrayref", - "aurora-engine-modexp", - "c-kzg", - "cfg-if", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libsecp256k1", - "once_cell", - "p256", - "revm-primitives", - "ripemd", - "rug", - "secp256k1 0.31.1", - "sha2 0.10.9", -] - -[[package]] -name = "revm-primitives" -version = "20.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa29d9da06fe03b249b6419b33968ecdf92ad6428e2f012dc57bcd619b5d94e" -dependencies = [ - "alloy-primitives", - "num_enum 0.7.6", - "once_cell", - "serde", -] - -[[package]] -name = "revm-state" -version = "7.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f64fbacb86008394aaebd3454f9643b7d5a782bd251135e17c5b33da592d84d" -dependencies = [ - "bitflags 2.11.0", - "revm-bytecode", - "revm-primitives", - "serde", -] - [[package]] name = "rfc6979" version = "0.4.0" @@ -8077,18 +7732,6 @@ dependencies = [ "paste", ] -[[package]] -name = "rug" -version = "1.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f6c8f906c90b48e0c1745c9f814c3a31c5eba847043b05c3e9a934dec7c4b3" -dependencies = [ - "az", - "gmp-mpfr-sys", - "libc", - "libm", -] - [[package]] name = "ruint" version = "1.17.2" @@ -8443,7 +8086,7 @@ dependencies = [ "hmac", "pbkdf2", "salsa20", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -8487,21 +8130,10 @@ dependencies = [ "cfg-if", "k256 0.13.4 (git+https://github.com/sp1-patches/elliptic-curves?tag=patch-k256-13.4-sp1-5.0.0)", "rand 0.8.5", - "secp256k1-sys 0.10.0", + "secp256k1-sys", "serde", ] -[[package]] -name = "secp256k1" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3c81b43dc2d8877c216a3fccf76677ee1ebccd429566d3e67447290d0c42b2" -dependencies = [ - "bitcoin_hashes", - "rand 0.9.3", - "secp256k1-sys 0.11.0", -] - [[package]] name = "secp256k1-sys" version = "0.10.0" @@ -8510,15 +8142,6 @@ dependencies = [ "cc", ] -[[package]] -name = "secp256k1-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb913707158fadaf0d8702c2db0e857de66eb003ccfdda5924b5f5ac98efb38" -dependencies = [ - "cc", -] - [[package]] name = "security-framework" version = "3.7.0" @@ -8615,7 +8238,6 @@ version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "indexmap 2.14.0", "itoa", "memchr", "serde", @@ -8733,19 +8355,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "sha2" version = "0.10.9" @@ -9125,7 +8734,7 @@ dependencies = [ "thiserror 1.0.69", "tracing", "tracing-forest", - "tracing-subscriber 0.3.23", + "tracing-subscriber", "typenum", "web-time", ] @@ -9219,7 +8828,7 @@ dependencies = [ "p3-poseidon2 0.2.3-succinct", "p3-symmetric 0.2.3-succinct", "serde", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -9236,7 +8845,7 @@ dependencies = [ "lazy_static", "num-bigint 0.4.6", "serde", - "sha2 0.10.9", + "sha2", "slop-algebra", "slop-bn254", "slop-challenger", @@ -9276,7 +8885,7 @@ dependencies = [ "serde", "serde_json", "serial_test", - "sha2 0.10.9", + "sha2", "sp1-core-executor", "sp1-core-machine", "sp1-primitives 5.2.4", @@ -9288,7 +8897,7 @@ dependencies = [ "thiserror 1.0.69", "tracing", "tracing-appender", - "tracing-subscriber 0.3.23", + "tracing-subscriber", ] [[package]] @@ -9419,7 +9028,7 @@ dependencies = [ "p3-symmetric 0.2.3-succinct", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "sp1-core-machine", "sp1-recursion-compiler", "sp1-stark", @@ -9557,7 +9166,7 @@ dependencies = [ "tokio-stream", "tokio-util", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", ] [[package]] @@ -10325,7 +9934,7 @@ dependencies = [ "crossbeam-channel", "thiserror 2.0.18", "time", - "tracing-subscriber 0.3.23", + "tracing-subscriber", ] [[package]] @@ -10359,7 +9968,7 @@ dependencies = [ "smallvec", "thiserror 1.0.69", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", ] [[package]] @@ -10373,15 +9982,6 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", -] - [[package]] name = "tracing-subscriber" version = "0.3.23" @@ -10419,7 +10019,7 @@ dependencies = [ "parking_lot 0.12.5", "ratatui", "tracing", - "tracing-subscriber 0.3.23", + "tracing-subscriber", "unicode-segmentation", ] @@ -11637,7 +11237,7 @@ dependencies = [ "pasta_curves 0.5.1", "rand 0.8.5", "serde", - "sha2 0.10.9", + "sha2", "sha3", "subtle", ] diff --git a/tooling/ef_tests/state/Cargo.toml b/tooling/ef_tests/state/Cargo.toml index fca95ed91a0..e370ff75fa1 100644 --- a/tooling/ef_tests/state/Cargo.toml +++ b/tooling/ef_tests/state/Cargo.toml @@ -29,13 +29,6 @@ hex = "0.4.3" clap = { version = "4.3", features = ["derive", "env"] } clap_complete = "4.5.17" itertools = "0.13.0" -revm = { version = "27.0.3", features = [ - "serde", - "std", - "serde-json", - "optional_no_base_fee", - "optional_block_gas_limit", -], default-features = false } alloy-rlp = "0.3.12" tokio = { version = "1.41.1", features = ["full"] } rayon = "1.10.0" diff --git a/tooling/ef_tests/state/Makefile b/tooling/ef_tests/state/Makefile index d72a6a85ee2..857d6c2225b 100644 --- a/tooling/ef_tests/state/Makefile +++ b/tooling/ef_tests/state/Makefile @@ -1,4 +1,4 @@ -.PHONY: download-evm-ef-tests clean-evm-ef-tests run-evm-ef-tests test-levm test-levm-nostd-crypto test-revm run-evm-ef-tests flamegraph-run-ef-tests samply-run-ef-tests amsterdam-vectors +.PHONY: download-evm-ef-tests clean-evm-ef-tests run-evm-ef-tests test-levm test-levm-nostd-crypto run-evm-ef-tests flamegraph-run-ef-tests samply-run-ef-tests amsterdam-vectors FIXTURES_FILE := ../.fixtures_url STATETEST_ARTIFACT := test.tar.gz @@ -79,26 +79,14 @@ test-levm: $(VECTORS_DIR) test-levm-nostd-crypto: $(VECTORS_DIR) ## 🧪 Run EF state tests with no_std crypto fallbacks cargo test --test all --profile release-fast --no-default-features --features nostd-crypto -- --summary -test-revm: $(VECTORS_DIR) - $(MAKE) run-evm-ef-tests flags="--revm" - ###### Running Flamegraphs ###### SUBDIRS := $(shell find $(VECTORS_DIR)/GeneralStateTests -maxdepth 1 -type d ! -path "$(VECTORS_DIR)/GeneralStateTests" -exec basename {} \;) flamegraph-run-ef-tests: ## 🔥 Run EF tests and create a flamegraph per test folder - mkdir -p levm_perfgraphs/flamegraph/ef_tests/state ||: && \ - mkdir -p levm_perfgraphs/flamegraph/ef_tests/revm ||: - $(MAKE) flamegraph-run-ef-tests-revm + mkdir -p levm_perfgraphs/flamegraph/ef_tests/state ||: $(MAKE) flamegraph-run-ef-tests-levm -flamegraph-run-ef-tests-revm: - @for dir in $(SUBDIRS); do\ - CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root \ - --output levm_perfgraphs/flamegraph/ef_tests/revm/$$dir.svg\ - -p ef_tests-state --test all -- --summary --revm --tests $$dir;\ - done - flamegraph-run-ef-tests-levm: @for dir in $(SUBDIRS); do\ CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --root \ @@ -107,70 +95,12 @@ flamegraph-run-ef-tests-levm: done samply-run-ef-tests: ## ⚡️ Run EF tests and create a samply profiling file per test folder - mkdir -p levm_perfgraphs/samply/ef_tests/state ||: && \ - mkdir -p levm_perfgraphs/samply/ef_tests/revm ||: - $(MAKE) samply-run-ef-tests-revm + mkdir -p levm_perfgraphs/samply/ef_tests/state ||: $(MAKE) samply-run-ef-tests-levm -samply-run-ef-tests-revm: - @for dir in $(SUBDIRS); do\ - CARGO_PROFILE_RELEASE_DEBUG=true samply record --save-only \ - -o levm_perfgraphs/samply/ef_tests/revm/prof_$$dir.json \ - cargo test --profile release-fast -p ef_tests-state --test all -- --summary --revm --tests $$dir;\ - done - samply-run-ef-tests-levm: @for dir in $(SUBDIRS); do\ CARGO_PROFILE_RELEASE_DEBUG=true samply record --save-only \ -o levm_perfgraphs/samply/ef_tests/state/prof_$$dir.json \ cargo test --profile release-fast -p ef_tests-state --test all -- --summary --tests $$dir;\ done - -################ -# FLAMEGRAPHS -################ -define run_flamegraph - # revm - CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph \ - --root --output $(FLAMEGRAPH_DIR)/revm_$(1).svg \ - -p revm_comparison --bin benchmark -- revm $(1) $($(2)) $($(3)) - # levm - CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph \ - --root --output $(FLAMEGRAPH_DIR)/levm_$(1).svg \ - -p revm_comparison --bin benchmark -- levm $(1) $($(2)) $($(3)) -endef - -define run_samply - # revm - CARGO_PROFILE_RELEASE_DEBUG=true samply record --save-only \ - -o $(SAMPLY_DIR)/prof_revm_$(1).json \ - cargo run --profile release-with-debug -p revm_comparison --bin benchmark -- revm $(1) $($(2)) $($(3)) - # levm - CARGO_PROFILE_RELEASE_DEBUG=true samply record --save-only \ - -o $(SAMPLY_DIR)/prof_levm_$(1).json \ - cargo run --profile release-with-debug -p revm_comparison --bin benchmark -- levm $(1) $($(2)) $($(3)) -endef - -FLAMEGRAPH_DIR := levm_perfgraphs/flamegraph/bench -flamegraph-benchmarks: ## 🔥 Run benchmarks and create flamegraph - mkdir -p levm_perfgraphs/flamegraph/bench ||: - $(call run_flamegraph,Fibonacci,REPETITIONS,BENCH_FIB_ITERATIONS) - $(call run_flamegraph,Factorial,REPETITIONS,BENCH_FACT_ITERATIONS) - $(call run_flamegraph,FactorialRecursive,REPETITIONS,BENCH_FACT_ITERATIONS) - $(call run_flamegraph,ManyHashes,REPETITIONS_SLOW,BENCH_HASHES_ITERATIONS) - $(call run_flamegraph,BubbleSort,REPETITIONS_SLOW,BENCH_BUBBLESORT_ITERATIONS) - $(call run_flamegraph,ERC20Approval,REPETITIONS_SLOW,BENCH_APPROVAL_ITERATIONS) - $(call run_flamegraph,ERC20Transfer,REPETITIONS_SLOW,BENCH_TRANSFER_ITERATIONS) - $(call run_flamegraph,ERC20Mint,REPETITIONS_SLOW,BENCH_MINT_ITERATIONS) - -SAMPLY_DIR := levm_perfgraphs/samply/bench -samply-benchmarks: ## ⚡️ Run benchmarks and create samply profiling file - mkdir -p levm_perfgraphs/samply/bench ||: - $(call run_samply,Fibonacci,REPETITIONS,BENCH_FIB_ITERATIONS) - $(call run_samply,Factorial,REPETITIONS,BENCH_FACT_ITERATIONS) - $(call run_samply,FactorialRecursive,REPETITIONS,BENCH_FACT_ITERATIONS) - $(call run_samply,ManyHashes,REPETITIONS_SLOW,BENCH_HASHES_ITERATIONS) - $(call run_samply,BubbleSort,REPETITIONS_SLOW,BENCH_BUBBLESORT_ITERATIONS) - $(call run_samply,ERC20Approval,REPETITIONS_SLOW,BENCH_APPROVAL_ITERATIONS) - $(call run_samply,ERC20Transfer,REPETITIONS_SLOW,BENCH_TRANSFER_ITERATIONS) - $(call run_samply,ERC20Mint,REPETITIONS_SLOW,BENCH_MINT_ITERATIONS) diff --git a/tooling/ef_tests/state/report.rs b/tooling/ef_tests/state/report.rs index 5b387505014..7fc966f0fab 100644 --- a/tooling/ef_tests/state/report.rs +++ b/tooling/ef_tests/state/report.rs @@ -1,20 +1,14 @@ use crate::parser::get_test_relative_path; -use crate::runner::revm_db::RevmError; use crate::runner::{EFTestRunnerError, InternalError}; use crate::types::EFTestInfo; use colored::Colorize; -use ethrex_common::{ - Address, H256, - types::{Account, AccountUpdate, Fork}, -}; +use ethrex_common::{Address, H256, types::Fork}; use ethrex_levm::account::LevmAccount; -use ethrex_levm::errors::{ExecutionReport, TxResult, VMError}; +use ethrex_levm::errors::{ExecutionReport, VMError}; use itertools::Itertools; -use revm::context::result::{EVMError as REVMError, ExecutionResult as RevmExecutionResult}; use serde::{Deserialize, Serialize}; -use spinoff::{Color, Spinner, spinners::Dots}; use std::{ - collections::{BTreeMap, HashMap, HashSet}, + collections::{BTreeMap, HashMap}, fmt::{self, Display}, path::PathBuf, time::Duration, @@ -22,7 +16,6 @@ use std::{ pub const LEVM_EF_TESTS_SUMMARY_SLACK_FILE_PATH: &str = "./levm_ef_tests_summary_slack.txt"; pub const LEVM_EF_TESTS_SUMMARY_GITHUB_FILE_PATH: &str = "./levm_ef_tests_summary_github.txt"; -pub const EF_TESTS_CACHE_FILE_PATH: &str = "./levm_ef_tests_cache.json"; pub type TestVector = (usize, usize, usize); @@ -75,40 +68,6 @@ pub fn write(reports: &[EFTestReport]) -> Result { Ok(report_file_path) } -pub fn cache(reports: &[EFTestReport]) -> Result { - let cache_file_path = PathBuf::from(EF_TESTS_CACHE_FILE_PATH); - let cache = serde_json::to_string_pretty(&reports).map_err(|err| { - EFTestRunnerError::Internal(InternalError::MainRunnerInternal(format!( - "Failed to serialize cache: {err}" - ))) - })?; - std::fs::write(&cache_file_path, cache).map_err(|err| { - EFTestRunnerError::Internal(InternalError::MainRunnerInternal(format!( - "Failed to write cache to file: {err}" - ))) - })?; - Ok(cache_file_path) -} - -pub fn load() -> Result, EFTestRunnerError> { - let mut reports_loading_spinner = - Spinner::new(Dots, "Loading reports...".to_owned(), Color::Cyan); - match std::fs::read_to_string(EF_TESTS_CACHE_FILE_PATH).ok() { - Some(cache) => { - reports_loading_spinner.success("Reports loaded"); - serde_json::from_str(&cache).map_err(|err| { - EFTestRunnerError::Internal(InternalError::MainRunnerInternal(format!( - "Cache exists but there was an error loading it: {err}" - ))) - }) - } - None => { - reports_loading_spinner.success("No cache found"); - Ok(Vec::default()) - } - } -} - pub fn summary_for_slack(reports: &[EFTestReport]) -> String { let total_passed = total_fork_test_passed(reports); let total_run = total_fork_test_run(reports); @@ -354,79 +313,6 @@ impl Display for EFTestsReport { failed_vector.0, failed_vector.1, failed_vector.2 )?; writeln!(f, "\t\t\tError: {error}")?; - if let Some(re_run_report) = &report.re_run_report { - if let Some(execution_report) = - re_run_report.execution_report.get(&(*failed_vector, *fork)) - { - if let Some((levm_result, revm_result)) = - &execution_report.execution_result_mismatch - { - writeln!( - f, - "\t\t\tExecution result mismatch: LEVM: {levm_result:?}, REVM: {revm_result:?}", - )?; - } - if let Some((levm_gas_used, revm_gas_used)) = - &execution_report.gas_used_mismatch - { - writeln!( - f, - "\t\t\tGas used mismatch: LEVM: {levm_gas_used}, REVM: {revm_gas_used} (diff: {})", - levm_gas_used.abs_diff(*revm_gas_used) - )?; - } - if let Some((levm_gas_refunded, revm_gas_refunded)) = - &execution_report.gas_refunded_mismatch - { - writeln!( - f, - "\t\t\tGas refunded mismatch: LEVM: {levm_gas_refunded}, REVM: {revm_gas_refunded} (diff: {})", - levm_gas_refunded.abs_diff(*revm_gas_refunded) - )?; - } - if let Some((levm_logs, revm_logs)) = &execution_report.logs_mismatch { - writeln!(f, "\t\t\tLogs mismatch:")?; - writeln!(f, "\t\t\t\tLevm Logs: ")?; - let levm_log_report = levm_logs.iter().map(|log| format!( - "\t\t\t\t Log {{ address: {:#x}, topic: {:?}, data: {:#x} }} \n", - log.address, log.topics, log.data - )) - .fold(String::new(), |acc, arg| acc + arg.as_str()); - writeln!(f, "{levm_log_report}")?; - writeln!(f, "\t\t\t\tRevm Logs: ")?; - let revm_log_report = revm_logs - .iter() - .map(|log| format!("\t\t\t\t {log:?} \n")) - .fold(String::new(), |acc, arg| acc + arg.as_str()); - writeln!(f, "{revm_log_report}")?; - } - if let Some((levm_result, revm_error)) = - &execution_report.re_runner_error - { - writeln!( - f, - "\t\t\tRe-run error: LEVM: {levm_result:?}, REVM: {revm_error}", - )?; - } - } - - if let Some(account_update) = re_run_report - .account_updates_report - .get(&(*failed_vector, *fork)) - { - writeln!(f, "\t\t\t{}", &account_update.to_string())?; - } else { - writeln!( - f, - "\t\t\tNo account updates report found. Account update reports are only generated for tests that failed at the post-state validation stage." - )?; - } - } else { - writeln!( - f, - "\t\t\tNo re-run report found. Re-run reports are only generated for tests that failed at the post-state validation stage." - )?; - } writeln!(f)?; } } @@ -443,7 +329,6 @@ pub struct EFTestReport { pub url: String, pub reference_spec: String, pub test_hash: H256, - pub re_run_report: Option, pub fork_results: HashMap, } @@ -468,15 +353,10 @@ impl EFTestReport { .reference_spec .unwrap_or("No reference spec provided by this tests".to_string()), test_hash, - re_run_report: None, fork_results: HashMap::new(), } } - pub fn register_re_run_report(&mut self, re_run_report: TestReRunReport) { - self.re_run_report = Some(re_run_report); - } - pub fn register_fork_result( &mut self, fork: Fork, @@ -607,352 +487,3 @@ impl EFTestReportForkResult { self.failed_vectors.insert(vector, error); } } - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct ComparisonReport { - pub expected_post_state_root: H256, - pub levm_post_state_root: H256, - pub revm_post_state_root: H256, - pub initial_accounts: HashMap, - pub levm_account_updates: Vec, - pub revm_account_updates: Vec, - pub levm_updated_accounts_only: HashSet
, - pub revm_updated_accounts_only: HashSet
, - pub shared_updated_accounts: HashSet
, -} - -impl fmt::Display for ComparisonReport { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - if self.revm_post_state_root != self.expected_post_state_root { - writeln!(f, "\n\t\t\tWARNING: REVM fails this test")?; - if self.levm_post_state_root != self.revm_post_state_root { - writeln!(f, "\t\t\tPost-state root mismatch between LEVM and REVM\n")?; - } else { - writeln!(f, "\t\t\tSame Post-state root in LEVM and REVM\n")?; - } - } else { - writeln!(f, "\n\t\t\tREVM passes this test")?; - } - - let all_updated_accounts = &(&self.levm_updated_accounts_only - | &self.revm_updated_accounts_only) - | &self.shared_updated_accounts; - - for address in all_updated_accounts { - writeln!(f, "\n\t\t\t{address:#x}:")?; - - let account_updates_for_address: Vec<(String, AccountUpdate)> = - if self.levm_updated_accounts_only.contains(&address) { - writeln!(f, "\t\t\t\tWas updated in LEVM but not in REVM")?; - self.levm_account_updates - .clone() - .iter() - .filter(|account_update| account_update.address == address) - .map(|account_update| ("LEVM".to_string(), account_update.clone())) - .collect() - } else if self.revm_updated_accounts_only.contains(&address) { - writeln!(f, "\t\t\t\tWas updated in REVM but not in LEVM")?; - self.revm_account_updates - .clone() - .iter() - .filter(|account_update| account_update.address == address) - .map(|account_update| ("REVM".to_string(), account_update.clone())) - .collect() - } else { - writeln!(f, "\t\t\t\tWas updated in both LEVM and REVM")?; - [ - self.revm_account_updates - .clone() - .iter() - .filter(|account_update| account_update.address == address) - .map(|account_update| ("REVM".to_string(), account_update.clone())) - .collect::>(), - self.levm_account_updates - .clone() - .iter() - .filter(|account_update| account_update.address == address) - .map(|account_update| ("LEVM".to_string(), account_update.clone())) - .collect::>(), - ] - .concat() - }; - - // Account before Tx execution - let base_account = self - .initial_accounts - .get(&address) - .cloned() - .unwrap_or_default(); - - for (vm, account_update) in &account_updates_for_address { - writeln!(f, "\t\t\t\t{vm} Account Update:")?; - - if account_update.removed { - writeln!(f, "\t\t\t\t\tAccount was removed")?; - continue; - } - - // Display changes in Account Info - if let Some(new_info) = &account_update.info { - writeln!( - f, - "\t\t\t\t\tNonce: {} -> {}", - base_account.info.nonce, new_info.nonce - )?; - writeln!( - f, - "\t\t\t\t\tBalance: {} -> {}", - base_account.info.balance, new_info.balance - )?; - - if base_account.info.code_hash != new_info.code_hash { - writeln!( - f, - "\t\t\t\t\tCode: {} -> {}", - if base_account.code.is_empty() { - "empty".to_string() - } else { - hex::encode(base_account.code.code()) - }, - account_update - .code - .as_ref() - .map(|code| if code.is_empty() { - "empty".to_string() - } else { - hex::encode(code.code()) - }) - .expect("If code hash changed then 'code' shouldn't be None.") - )?; - } - } - - for (key, value) in &account_update.added_storage { - let initial_value = base_account.storage.get(key).cloned().unwrap_or_default(); - writeln!( - f, - "\t\t\t\t\tStorage slot: {key:#x}: {initial_value} -> {value}", - )?; - } - } - - if self.shared_updated_accounts.contains(&address) { - let levm_account_update = account_updates_for_address - .iter() - .find(|(vm, _)| vm == "LEVM") - .map(|(_, update)| update) - .expect("LEVM account update not found"); - let revm_account_update = account_updates_for_address - .iter() - .find(|(vm, _)| vm == "REVM") - .map(|(_, update)| update) - .expect("REVM account update not found"); - - if levm_account_update == revm_account_update { - writeln!(f, "\t\t\t\tNo differences between updates")?; - continue; - } - - if levm_account_update.removed != revm_account_update.removed { - writeln!( - f, - "\t\t\t\tAccount removal mismatch: LEVM: {}, REVM: {}", - levm_account_update.removed, revm_account_update.removed - )?; - } - - if levm_account_update.info != revm_account_update.info { - match (&levm_account_update.info, &revm_account_update.info) { - (Some(levm_info), Some(revm_info)) => { - if levm_info.nonce != revm_info.nonce { - writeln!( - f, - "\t\t\t\tNonce mismatch: LEVM: {}, REVM: {}", - levm_info.nonce, revm_info.nonce - )?; - } - if levm_info.balance != revm_info.balance { - writeln!( - f, - "\t\t\t\tBalance mismatch: LEVM: {}, REVM: {}", - levm_info.balance, revm_info.balance - )?; - } - } - (Some(levm_info), None) => { - writeln!( - f, - "\t\t\t\tLEVM has account info but REVM does not: Nonce: {}, Balance: {}", - levm_info.nonce, levm_info.balance - )?; - } - (None, Some(revm_info)) => { - writeln!( - f, - "\t\t\t\tREVM has account info but LEVM does not: Nonce: {}, Balance: {}", - revm_info.nonce, revm_info.balance - )?; - } - (None, None) => { - // No account info in either LEVM or REVM, nothing to report. - } - } - } - - // Compare all storage changes between LEVM and REVM. - let all_keys: HashSet<_> = levm_account_update - .added_storage - .keys() - .chain(revm_account_update.added_storage.keys()) - .collect(); - - for key in all_keys { - let levm_value = levm_account_update - .added_storage - .get(key) - .cloned() - .unwrap_or_default(); - let revm_value = revm_account_update - .added_storage - .get(key) - .cloned() - .unwrap_or_default(); - - if levm_value != revm_value { - writeln!( - f, - "\t\t\t\tStorage slot mismatch at key {key:#x}: LEVM: {levm_value}, REVM: {revm_value}", - )?; - } - } - } - } - - Ok(()) - } -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct TestReRunExecutionReport { - pub execution_result_mismatch: Option<(TxResult, RevmExecutionResult)>, - pub gas_used_mismatch: Option<(u64, u64)>, - pub gas_refunded_mismatch: Option<(u64, u64)>, - pub logs_mismatch: Option<(Vec, Vec)>, - pub re_runner_error: Option<(TxResult, String)>, -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct TestReRunReport { - pub execution_report: HashMap<(TestVector, Fork), TestReRunExecutionReport>, - pub account_updates_report: HashMap<(TestVector, Fork), ComparisonReport>, -} - -impl TestReRunReport { - pub fn new() -> Self { - Self::default() - } - - pub fn register_execution_result_mismatch( - &mut self, - vector: TestVector, - levm_result: TxResult, - revm_result: RevmExecutionResult, - fork: Fork, - ) { - let value = Some((levm_result, revm_result)); - self.execution_report - .entry((vector, fork)) - .and_modify(|report| { - report.execution_result_mismatch = value.clone(); - }) - .or_insert(TestReRunExecutionReport { - execution_result_mismatch: value, - ..Default::default() - }); - } - - pub fn register_gas_used_mismatch( - &mut self, - vector: TestVector, - levm_gas_used: u64, - revm_gas_used: u64, - fork: Fork, - ) { - let value = Some((levm_gas_used, revm_gas_used)); - self.execution_report - .entry((vector, fork)) - .and_modify(|report| { - report.gas_used_mismatch = value; - }) - .or_insert(TestReRunExecutionReport { - gas_used_mismatch: value, - ..Default::default() - }); - } - - pub fn register_gas_refunded_mismatch( - &mut self, - vector: TestVector, - levm_gas_refunded: u64, - revm_gas_refunded: u64, - fork: Fork, - ) { - let value = Some((levm_gas_refunded, revm_gas_refunded)); - self.execution_report - .entry((vector, fork)) - .and_modify(|report| { - report.gas_refunded_mismatch = value; - }) - .or_insert(TestReRunExecutionReport { - gas_refunded_mismatch: value, - ..Default::default() - }); - } - - pub fn register_logs_mismatch( - &mut self, - vector: TestVector, - levm_logs: Vec, - revm_logs: Vec, - fork: Fork, - ) { - let value = Some((levm_logs, revm_logs)); - self.execution_report - .entry((vector, fork)) - .and_modify(|report| { - report.logs_mismatch = value.clone(); - }) - .or_insert(TestReRunExecutionReport { - logs_mismatch: value, - ..Default::default() - }); - } - - pub fn register_account_updates_report( - &mut self, - vector: TestVector, - report: ComparisonReport, - fork: Fork, - ) { - self.account_updates_report.insert((vector, fork), report); - } - - pub fn register_re_run_failure( - &mut self, - vector: TestVector, - levm_result: TxResult, - revm_error: REVMError, - fork: Fork, - ) { - let value = Some((levm_result, revm_error.to_string())); - self.execution_report - .entry((vector, fork)) - .and_modify(|report| { - report.re_runner_error = value.clone(); - }) - .or_insert(TestReRunExecutionReport { - re_runner_error: value, - ..Default::default() - }); - } -} diff --git a/tooling/ef_tests/state/runner/levm_runner.rs b/tooling/ef_tests/state/runner/levm_runner.rs index 2989e350cbd..27be87c38ec 100644 --- a/tooling/ef_tests/state/runner/levm_runner.rs +++ b/tooling/ef_tests/state/runner/levm_runner.rs @@ -70,12 +70,6 @@ pub async fn run_ef_test(test: &EFTest) -> Result { - return Err(EFTestRunnerError::Internal(InternalError::FirstRunInternal( - format!("VM execution mismatch errors should only happen when running with revm. This failed during levm's execution. LEVM runner {}",line!()) - .to_owned(), - ))); - } Err(EFTestRunnerError::ExpectedExceptionDoesNotMatchReceived(reason)) => { ef_test_report_fork .register_post_state_validation_error_mismatch(reason, *vector); @@ -598,7 +592,7 @@ pub async fn ensure_post_state( } pub async fn post_state_root(account_updates: &[AccountUpdate], test: &EFTest) -> H256 { - let (_initial_state, block_hash, store) = utils::load_initial_state_revm(test).await; + let (block_hash, store) = utils::load_initial_state_store(test).await; let ret_account_updates_batch = store .apply_account_updates_batch(block_hash, account_updates) .unwrap() diff --git a/tooling/ef_tests/state/runner/mod.rs b/tooling/ef_tests/state/runner/mod.rs index a892f9eafe0..328a63075b9 100644 --- a/tooling/ef_tests/state/runner/mod.rs +++ b/tooling/ef_tests/state/runner/mod.rs @@ -3,7 +3,7 @@ use std::collections::BTreeMap; use crate::report::EFTestsReport; use crate::{ parser::SPECIFIC_IGNORED_TESTS, - report::{self, EFTestReport, TestReRunReport, format_duration_as_mm_ss}, + report::{self, EFTestReport}, types::EFTest, }; use clap::Parser; @@ -12,13 +12,10 @@ use ethrex_common::Address; use ethrex_common::types::Fork; use ethrex_levm::account::LevmAccount; use ethrex_levm::errors::{ExecutionReport, VMError}; -pub use revm::primitives::hardfork::SpecId; use serde::{Deserialize, Serialize}; use spinoff::{Color, Spinner, spinners::Dots}; pub mod levm_runner; -pub mod revm_db; -pub mod revm_runner; #[derive(Debug, thiserror::Error, Clone, Serialize, Deserialize)] pub enum EFTestRunnerError { @@ -30,8 +27,6 @@ pub enum EFTestRunnerError { FailedToEnsurePreState(String), #[error("Failed to ensure post-state: {1}")] FailedToEnsurePostState(Box, String, BTreeMap), - #[error("VM run mismatch: {0}")] - VMExecutionMismatch(String), #[error("Exception does not match the expected: {0}")] ExpectedExceptionDoesNotMatchReceived(String), #[error("EIP-7702 should not be a create type")] @@ -48,8 +43,6 @@ pub enum EFTestRunnerError { pub enum InternalError { #[error("First run failed unexpectedly: {0}")] FirstRunInternal(String), - #[error("Re-runner failed unexpectedly: {0}")] - ReRunInternal(String, TestReRunReport), #[error("Main runner failed unexpectedly: {0}")] MainRunnerInternal(String), #[error("{0}")] @@ -73,7 +66,7 @@ pub struct EFTestRunnerOptions { /// For running tests with a specific name #[arg(long, value_name = "SPECIFIC_TESTS", value_delimiter = ',')] pub specific_tests: Vec, - /// For running tests only with LEVM without the REVM re-run. + /// For printing only the failure summary instead of writing a report file. #[arg(short, long, value_name = "SUMMARY", default_value = "false")] pub summary: bool, #[arg(long, value_name = "SKIP", value_delimiter = ',')] @@ -81,9 +74,6 @@ pub struct EFTestRunnerOptions { /// For providing more detailed information #[arg(long, value_name = "VERBOSE", default_value = "false")] pub verbose: bool, - /// For running tests ONLY with revm - #[arg(long, value_name = "REVM", default_value = "false")] - pub revm: bool, /// For running particular tests that have their specified paths listed with the tests flag. #[arg(long, value_name = "PATHS", default_value = "false")] pub paths: bool, @@ -120,15 +110,8 @@ pub async fn run_ef_tests( ef_tests: Vec, opts: &EFTestRunnerOptions, ) -> Result<(), EFTestRunnerError> { - let mut reports = report::load()?; - if reports.is_empty() { - if opts.revm { - run_with_revm(&mut reports, &ef_tests, opts).await?; - return Ok(()); - } else { - run_with_levm(&mut reports, &ef_tests, opts).await?; - } - } + let mut reports = Vec::new(); + run_with_levm(&mut reports, &ef_tests, opts).await?; if opts.summary { if reports.iter().any(|r| !r.passed()) { println!( @@ -140,7 +123,6 @@ pub async fn run_ef_tests( return Ok(()); } if reports.iter().any(|r| !r.passed()) { - re_run_with_revm(&mut reports, &ef_tests, opts).await?; return write_report(&reports); } let mut report_spinner = Spinner::new(Dots, "Loading report...".to_owned(), Color::Cyan); @@ -201,132 +183,9 @@ async fn run_with_levm( Ok(()) } -/// ### Runs all tests with REVM -async fn run_with_revm( - reports: &mut Vec, - ef_tests: &[EFTest], - opts: &EFTestRunnerOptions, -) -> Result<(), EFTestRunnerError> { - let revm_run_time = std::time::Instant::now(); - println!("{}", "Running all tests with REVM...".to_owned()); - - for (idx, test) in ef_tests.iter().enumerate() { - if opts.verbose { - println!("Running test: {:?}", test.name); - } - let total_tests = ef_tests.len(); - println!( - "{} {}/{total_tests} - {}", - "Running all tests with REVM".bold(), - idx + 1, - format_duration_as_mm_ss(revm_run_time.elapsed()) - ); - let ef_test_report = match revm_runner::_run_ef_test_revm(test).await { - Ok(ef_test_report) => ef_test_report, - Err(EFTestRunnerError::Internal(err)) => return Err(EFTestRunnerError::Internal(err)), - non_internal_errors => { - return Err(EFTestRunnerError::Internal( - InternalError::FirstRunInternal(format!( - "Non-internal error raised when executing revm. This should not happen: {non_internal_errors:?}", - )), - )); - } - }; - reports.push(ef_test_report); - println!("{}", report::progress(reports, revm_run_time.elapsed())); - } - println!( - "Ran all tests with REVM in {}", - format_duration_as_mm_ss(revm_run_time.elapsed()) - ); - Ok(()) -} - -async fn re_run_with_revm( - reports: &mut [EFTestReport], - ef_tests: &[EFTest], - opts: &EFTestRunnerOptions, -) -> Result<(), EFTestRunnerError> { - let revm_run_time = std::time::Instant::now(); - println!("{}", "Running failed tests with REVM...".to_owned()); - let failed_tests = reports.iter().filter(|report| !report.passed()).count(); - - // Iterate only over failed tests - for (idx, failed_test_report) in reports - .iter_mut() - .filter(|report| !report.passed()) - .enumerate() - { - if opts.verbose { - println!("Running test: {:?}", failed_test_report.name); - } - print!( - "\r{} {}/{failed_tests} - {}", - "Re-running failed tests with REVM".bold(), - idx + 1, - format_duration_as_mm_ss(revm_run_time.elapsed()) - ); - - match revm_runner::re_run_failed_ef_test( - ef_tests - .iter() - .find(|test| { - let hash = test - ._info - .generated_test_hash - .or(test._info.hash) - .unwrap_or_default(); - - let failed_hash = failed_test_report.test_hash; - - hash == failed_hash && test.name == failed_test_report.name - }) - .unwrap(), - failed_test_report, - ) - .await - { - Ok(re_run_report) => { - failed_test_report.register_re_run_report(re_run_report.clone()); - } - Err(EFTestRunnerError::Internal(InternalError::ReRunInternal( - reason, - re_run_report, - ))) => { - write_report(reports)?; - cache_re_run(reports)?; - return Err(EFTestRunnerError::Internal(InternalError::ReRunInternal( - reason, - re_run_report, - ))); - } - non_re_run_internal_errors => { - println!("{} \n{failed_test_report}", "Failing Test:".bold()); - return Err(EFTestRunnerError::Internal( - InternalError::MainRunnerInternal(format!( - "Non-internal error raised when executing revm. This should not happen: {non_re_run_internal_errors:?}" - )), - )); - } - } - } - println!( - "\nRe-ran failed tests with REVM in {}", - format_duration_as_mm_ss(revm_run_time.elapsed()) - ); - Ok(()) -} - fn write_report(reports: &[EFTestReport]) -> Result<(), EFTestRunnerError> { let mut report_spinner = Spinner::new(Dots, "Loading report...".to_owned(), Color::Cyan); let report_file_path = report::write(reports)?; report_spinner.success(&format!("Report written to file {report_file_path:?}").bold()); Ok(()) } - -fn cache_re_run(reports: &[EFTestReport]) -> Result<(), EFTestRunnerError> { - let mut cache_spinner = Spinner::new(Dots, "Caching re-run...".to_owned(), Color::Cyan); - let cache_file_path = report::cache(reports)?; - cache_spinner.success(&format!("Re-run cached to file {cache_file_path:?}").bold()); - Ok(()) -} diff --git a/tooling/ef_tests/state/runner/revm_db.rs b/tooling/ef_tests/state/runner/revm_db.rs deleted file mode 100644 index c84a6067c35..00000000000 --- a/tooling/ef_tests/state/runner/revm_db.rs +++ /dev/null @@ -1,251 +0,0 @@ -use ethrex_common::types::{AccountInfo, AccountUpdate, ChainConfig, Code}; -use ethrex_common::{Address as CoreAddress, BigEndianHash, H256, U256}; -use ethrex_vm::{DynVmDatabase, EvmError, VmDatabase}; -use revm::context::DBErrorMarker; -use revm::database::states::{AccountStatus, bundle_state::BundleRetention}; -use revm::primitives::{ - Address as RevmAddress, B256 as RevmB256, Bytes as RevmBytes, U256 as RevmU256, -}; -use revm::state::{AccountInfo as RevmAccountInfo, Bytecode as RevmBytecode}; - -#[derive(thiserror::Error, Debug)] -#[error(transparent)] -pub struct RevmError(#[from] pub EvmError); - -impl DBErrorMarker for RevmError {} - -/// State used when running the EVM. The state can be represented with a [VmDbWrapper] database -pub struct RevmState { - pub inner: revm::database::State, -} - -/// Wrapper used so we can implement revm-specific traits over `DynVmDatabase` -#[derive(Clone)] -pub struct RevmDynVmDatabase(DynVmDatabase); - -// Needed because revm::database::State is not cloneable and we need to -// restore the previous EVM state after executing a transaction in L2 mode whose resulting state diff doesn't fit in a blob. -impl Clone for RevmState { - fn clone(&self) -> Self { - let inner = revm::database::State:: { - cache: self.inner.cache.clone(), - database: self.inner.database.clone(), - transition_state: self.inner.transition_state.clone(), - bundle_state: self.inner.bundle_state.clone(), - use_preloaded_bundle: self.inner.use_preloaded_bundle, - block_hashes: self.inner.block_hashes.clone(), - }; - - Self { inner } - } -} - -/// Builds RevmState from a Store -pub fn revm_state(db: DynVmDatabase) -> RevmState { - let inner = revm::database::State::builder() - .with_database(RevmDynVmDatabase(db)) - .with_bundle_update() - .without_state_clear() - .build(); - RevmState { inner } -} - -impl revm::Database for RevmDynVmDatabase { - type Error = RevmError; - - fn basic(&mut self, address: RevmAddress) -> Result, Self::Error> { - let acc_info = match ::get_account_state( - self.0.as_ref(), - CoreAddress::from(address.0.as_ref()), - )? { - None => return Ok(None), - Some(acc_info) => acc_info, - }; - let code = self.code_by_hash(acc_info.code_hash.0.into())?; - - Ok(Some(RevmAccountInfo { - balance: RevmU256::from_limbs(acc_info.balance.0), - nonce: acc_info.nonce, - code_hash: RevmB256::from(acc_info.code_hash.0), - code: Some(code), - })) - } - - fn code_by_hash(&mut self, code_hash: RevmB256) -> Result { - let code = - ::get_account_code(self.0.as_ref(), H256::from(code_hash.as_ref()))?; - Ok(RevmBytecode::new_raw(RevmBytes(code.code_bytes()))) - } - - fn storage(&mut self, address: RevmAddress, index: RevmU256) -> Result { - Ok(::get_storage_slot( - self.0.as_ref(), - CoreAddress::from(address.0.as_ref()), - H256::from(index.to_be_bytes()), - )? - .map(|value| RevmU256::from_limbs(value.0)) - .unwrap_or_else(|| RevmU256::ZERO)) - } - - fn block_hash(&mut self, number: u64) -> Result { - Ok(::get_block_hash(self.0.as_ref(), number) - .map(|hash| RevmB256::from_slice(&hash.0))?) - } -} - -impl revm::DatabaseRef for RevmDynVmDatabase { - type Error = RevmError; - - fn basic_ref(&self, address: RevmAddress) -> Result, Self::Error> { - let acc_info = match ::get_account_state( - self.0.as_ref(), - CoreAddress::from(address.0.as_ref()), - )? { - None => return Ok(None), - Some(acc_info) => acc_info, - }; - let code = self.code_by_hash_ref(acc_info.code_hash.0.into())?; - - Ok(Some(RevmAccountInfo { - balance: RevmU256::from_limbs(acc_info.balance.0), - nonce: acc_info.nonce, - code_hash: RevmB256::from(acc_info.code_hash.0), - code: Some(code), - })) - } - - fn code_by_hash_ref(&self, code_hash: RevmB256) -> Result { - let code = - ::get_account_code(self.0.as_ref(), H256::from(code_hash.as_ref()))?; - Ok(RevmBytecode::new_raw(RevmBytes(code.code_bytes()))) - } - - fn storage_ref(&self, address: RevmAddress, index: RevmU256) -> Result { - Ok(::get_storage_slot( - self.0.as_ref(), - CoreAddress::from(address.0.as_ref()), - H256::from(index.to_be_bytes()), - )? - .map(|value| RevmU256::from_limbs(value.0)) - .unwrap_or_else(|| RevmU256::ZERO)) - } - - fn block_hash_ref(&self, number: u64) -> Result { - Ok(::get_block_hash(self.0.as_ref(), number) - .map(|hash| RevmB256::from_slice(&hash.0))?) - } -} - -impl RevmState { - /// Gets the stored chain config - pub fn chain_config(&self) -> Result { - self.inner.database.0.get_chain_config() - } - - /// Gets the state_transitions == [AccountUpdate] from the [RevmState]. - pub fn get_state_transitions(&mut self) -> Vec { - let initial_state = &mut self.inner; - initial_state.merge_transitions(BundleRetention::PlainState); - let bundle = initial_state.take_bundle(); - - // Update accounts - let mut account_updates = Vec::new(); - for (address, account) in bundle.state() { - if account.status.is_not_modified() { - continue; - } - let address = CoreAddress::from_slice(address.0.as_slice()); - // Remove account from DB if destroyed (Process DestroyedChanged as changed account) - if matches!( - account.status, - AccountStatus::Destroyed | AccountStatus::DestroyedAgain - ) { - account_updates.push(AccountUpdate::removed(address)); - continue; - } - - // If account is empty, do not add to the database - if account - .account_info() - .is_some_and(|acc_info| acc_info.is_empty()) - { - continue; - } - - // Edge case: Account was destroyed and created again afterwards with CREATE2. - if matches!(account.status, AccountStatus::DestroyedChanged) { - // Push to account updates the removal of the account and then push the new state of the account. - // This is for clearing the account's storage when it was selfdestructed in the first place. - account_updates.push(AccountUpdate::removed(address)); - // This will always be Some though, because it is DestroyedChanged - if let Some(new_acc_info) = account.account_info() { - let new_acc_update = AccountUpdate { - address, - removed: false, - info: Some(AccountInfo { - code_hash: H256::from_slice(new_acc_info.code_hash.as_slice()), - balance: U256::from_little_endian(new_acc_info.balance.as_le_slice()), - nonce: new_acc_info.nonce, - }), - code: new_acc_info - .code - .map(|c| c.original_bytes().0) - .map(|code| Code::from_bytecode(code, ðrex_crypto::NativeCrypto)), - added_storage: account - .storage - .iter() - .map(|(key, slot)| { - ( - H256::from_uint(&U256::from_little_endian(key.as_le_slice())), - U256::from_little_endian(slot.present_value().as_le_slice()), - ) - }) - .collect(), - removed_storage: false, - }; - account_updates.push(new_acc_update); - } - continue; - } - // Apply account changes to DB - let mut account_update = AccountUpdate::new(address); - // If the account was changed then both original and current info will be present in the bundle account - if account.is_info_changed() - && let Some(new_acc_info) = account.account_info() - { - // Update account info in DB - let code_hash = H256::from_slice(new_acc_info.code_hash.as_slice()); - let account_info = AccountInfo { - code_hash, - balance: U256::from_little_endian(new_acc_info.balance.as_le_slice()), - nonce: new_acc_info.nonce, - }; - account_update.info = Some(account_info); - // Update code in db - if account.is_contract_changed() - && let Some(code) = new_acc_info.code - { - account_update.code = Some(Code::from_bytecode( - code.original_bytes().0, - ðrex_crypto::NativeCrypto, - )); - } - } - // Update account storage in DB - for (key, slot) in account.storage.iter() { - if slot.is_changed() { - // TODO check if we need to remove the value from our db when value is zero - // if slot.present_value().is_zero() { - // account_update.removed_keys.push(H256::from_uint(&U256::from_little_endian(key.as_le_slice()))) - // } - account_update.added_storage.insert( - H256::from_uint(&U256::from_little_endian(key.as_le_slice())), - U256::from_little_endian(slot.present_value().as_le_slice()), - ); - } - } - account_updates.push(account_update) - } - account_updates - } -} diff --git a/tooling/ef_tests/state/runner/revm_runner.rs b/tooling/ef_tests/state/runner/revm_runner.rs deleted file mode 100644 index 6c87c192a9a..00000000000 --- a/tooling/ef_tests/state/runner/revm_runner.rs +++ /dev/null @@ -1,732 +0,0 @@ -use super::revm_db::{RevmDynVmDatabase, RevmState}; -use crate::runner::revm_db::RevmError; -use crate::types::EFTestTransaction; -use crate::{ - report::{ComparisonReport, EFTestReport, EFTestReportForkResult, TestReRunReport, TestVector}, - runner::{EFTestRunnerError, InternalError, levm_runner::post_state_root}, - types::EFTest, - utils::{effective_gas_price, load_initial_state_levm, load_initial_state_revm}, -}; -use alloy_rlp::Encodable; -use bytes::Bytes; -use ethrex_common::types::{Code, TxType}; -use ethrex_common::utils::keccak; -use ethrex_common::{ - Address, H256, - types::{Account, AccountUpdate, Fork, TxKind}, -}; -use ethrex_levm::constants::{BLOB_BASE_FEE_UPDATE_FRACTION, BLOB_BASE_FEE_UPDATE_FRACTION_PRAGUE}; -use ethrex_levm::{ - account::LevmAccount, - errors::{ExecutionReport, TxResult}, -}; -use ethrex_rlp::encode::RLPEncode; -use revm::primitives::{ - Address as RevmAddress, TxKind as RevmTxKind, U256 as RevmU256, hardfork::SpecId, -}; -use revm::{ - Context, ExecuteCommitEvm, Journal, MainBuilder, MainContext, - context::{ - BlockEnv as RevmBlockEnv, CfgEnv, Evm as Revm, TxEnv as RevmTxEnv, either::Either, - transaction::AccessList, - }, - context_interface::{ - block::blob::BlobExcessGasAndPrice, - result::{EVMError as REVMError, ExecutionResult as RevmExecutionResult}, - transaction::{AccessListItem, Authorization, SignedAuthorization}, - }, - database::State, - handler::{EthFrame, EthPrecompiles, instructions::EthInstructions}, - inspector::inspectors::TracerEip3155 as RevmTracerEip3155, - interpreter::interpreter::EthInterpreter, - primitives::B256, -}; -use std::collections::{BTreeMap, HashMap, HashSet}; - -fn levm_and_revm_logs_match( - levm_logs: &Vec, - revm_logs: &Vec, -) -> bool { - let levm_keccak_logs = { - let logs = levm_logs; - let mut encoded_logs = Vec::new(); - logs.encode(&mut encoded_logs); - keccak(encoded_logs) - }; - - let revm_keccak_logs = { - let logs = revm_logs; - let mut encoded_logs = Vec::new(); - logs.encode(&mut encoded_logs); - keccak(encoded_logs) - }; - - levm_keccak_logs == revm_keccak_logs -} - -pub async fn re_run_failed_ef_test( - test: &EFTest, - failed_test_report: &EFTestReport, -) -> Result { - assert_eq!(test.name, failed_test_report.name); - let mut re_run_report = TestReRunReport::new(); - for (fork, fork_result) in failed_test_report.fork_results.iter() { - for (vector, vector_failure) in fork_result.failed_vectors.iter() { - match vector_failure { - // We only want to re-run tests that failed in the post-state validation. - EFTestRunnerError::FailedToEnsurePostState(transaction_report, _, levm_cache) => { - match re_run_failed_ef_test_tx( - levm_cache.clone(), - vector, - test, - transaction_report, - &mut re_run_report, - fork, - ) - .await - { - Ok(_) => continue, - Err(EFTestRunnerError::VMInitializationFailed(reason)) => { - return Err(EFTestRunnerError::Internal(InternalError::ReRunInternal( - format!( - "REVM initialization failed when re-running failed test on re_run_failed_ef_test() in REVM runner, line: {}: {reason}", - line!() - ), - re_run_report.clone(), - ))); - } - Err(EFTestRunnerError::Internal(reason)) => { - return Err(EFTestRunnerError::Internal(reason)); - } - unexpected_error => { - return Err(EFTestRunnerError::Internal(InternalError::ReRunInternal( - format!( - "Unexpected error when re-running failed test on re_run_failed_ef_test() in REVM runner, line:{} : {unexpected_error:?}", - line!() - ), - re_run_report.clone(), - ))); - } - } - } - // Currently, we decided not to re-execute the test when the Expected exception does not match - // with the received. This can change in the future. - EFTestRunnerError::ExpectedExceptionDoesNotMatchReceived(_) => continue, - EFTestRunnerError::VMInitializationFailed(_) - | EFTestRunnerError::ExecutionFailedUnexpectedly(_) - | EFTestRunnerError::FailedToEnsurePreState(_) - | EFTestRunnerError::EIP7702ShouldNotBeCreateType - | EFTestRunnerError::FailedToRevertLEVMState(_) => continue, - EFTestRunnerError::VMExecutionMismatch(reason) => { - return Err(EFTestRunnerError::Internal(InternalError::ReRunInternal( - format!( - "VM execution mismatch errors should only happen when running with revm. This failed during levm's execution on REVM runner, line: {} : {reason}", - line!() - ), - re_run_report.clone(), - ))); - } - EFTestRunnerError::Internal(reason) => { - return Err(EFTestRunnerError::Internal(reason.to_owned())); - } - EFTestRunnerError::TestsFailed => { - unreachable!( - "An EFTestRunnerError::TestsFailed can't happen at this point. This error is only thrown in run_ef_tests under the summary flag. REVM runner {}.", - line!() - ) - } - } - } - } - Ok(re_run_report) -} - -pub async fn re_run_failed_ef_test_tx( - levm_cache: BTreeMap, - vector: &TestVector, - test: &EFTest, - levm_execution_report: &ExecutionReport, - re_run_report: &mut TestReRunReport, - fork: &Fork, -) -> Result<(), EFTestRunnerError> { - let (mut state, _block_hash, _store) = load_initial_state_revm(test).await; - let (mut revm, tx_env) = prepare_revm_for_tx(&mut state, vector, test, fork)?; - if !test.post.has_vector_for_fork(vector, *fork) { - return Ok(()); - } - let revm_execution_result = revm.transact_commit(tx_env); - drop(revm); // Need to drop the state mutable reference. - compare_levm_revm_execution_results( - vector, - levm_execution_report, - revm_execution_result, - re_run_report, - fork, - )?; - ensure_post_state(levm_cache, vector, &mut state, test, re_run_report, fork).await?; - Ok(()) -} - -type RevmStateT<'state> = &'state mut State; -type RevmContext<'state> = - Context, Journal>>; -type RevmWithTracer<'state> = Revm< - RevmContext<'state>, - RevmTracerEip3155, - EthInstructions>, - EthPrecompiles, - EthFrame, ->; - -pub fn prepare_revm_for_tx<'state>( - initial_state: &'state mut RevmState, - vector: &TestVector, - test: &EFTest, - fork: &Fork, -) -> Result<(RevmWithTracer<'state>, RevmTxEnv), EFTestRunnerError> { - let chain_spec = initial_state - .chain_config() - .map_err(|err| EFTestRunnerError::VMInitializationFailed(err.to_string()))?; - - let blob_excess_gas_and_price = if test.env.current_excess_blob_gas.is_none() { - None - } else { - Some(BlobExcessGasAndPrice::new( - test.env - .current_excess_blob_gas - .unwrap() - .try_into() - .unwrap(), - if fork >= &Fork::Prague { - BLOB_BASE_FEE_UPDATE_FRACTION_PRAGUE - } else { - BLOB_BASE_FEE_UPDATE_FRACTION - }, - )) - }; - let block_env = RevmBlockEnv { - number: RevmU256::from_limbs(test.env.current_number.0), - beneficiary: RevmAddress(test.env.current_coinbase.0.into()), - timestamp: RevmU256::from_limbs(test.env.current_timestamp.0), - gas_limit: test.env.current_gas_limit, - basefee: test - .env - .current_base_fee - .unwrap_or_default() - .try_into() - .unwrap_or_default(), - difficulty: RevmU256::from_limbs(test.env.current_difficulty.0), - prevrandao: test.env.current_random.map(|v| v.0.into()), - blob_excess_gas_and_price, - }; - let tx = &test - .transactions - .get(vector) - .ok_or(EFTestRunnerError::VMInitializationFailed(format!( - "Vector {vector:?} not found in test {}. REVM runner, line: {}", - test.name, - line!() - )))?; - - let revm_access_list: Vec = tx - .access_list - .iter() - .map(|eftest_access_list_item| AccessListItem { - address: RevmAddress(eftest_access_list_item.address.0.into()), - storage_keys: eftest_access_list_item - .storage_keys - .iter() - .map(|key| B256::from(key.0)) - .collect(), - }) - .collect(); - - // The latest version of revm(27.0.3) is needed to run the ef-tests with the latest changes. - // Update it in every Cargo.toml. - // revm-inspectors and revm-primitives have to be bumped too. - // NOTE: - // - rust 1.87.X is needed - // - rust-toolchain 1.87.X is needed (this can be found in ethrex/crates/vm/levm/rust-toolchain.toml) - let authorization_list = tx - .authorization_list - .clone() - .map(|list| { - list.iter() - .map(|auth_t| { - Either::Left(SignedAuthorization::new_unchecked( - Authorization { - // The latest spec defined chain_id as a U256 - chain_id: RevmU256::from_le_bytes(auth_t.chain_id.to_little_endian()), - address: RevmAddress(auth_t.address.0.into()), - nonce: auth_t.nonce, - }, - u8::try_from(u32::try_from(auth_t.v).unwrap()).unwrap(), - RevmU256::from_le_bytes(auth_t.r.to_little_endian()), - RevmU256::from_le_bytes(auth_t.s.to_little_endian()), - )) - }) - .collect::>() - }) - .unwrap_or_default(); - - let tx_env = RevmTxEnv { - caller: tx.sender.0.into(), - gas_limit: tx.gas_limit, - gas_price: effective_gas_price(test, tx)? - .try_into() - .unwrap_or_default(), - kind: match tx.to { - TxKind::Call(to) => RevmTxKind::Call(to.0.into()), - TxKind::Create => RevmTxKind::Create, - }, - value: RevmU256::from_limbs(tx.value.0), - data: tx.data.to_vec().into(), - nonce: tx.nonce, - chain_id: Some(chain_spec.chain_id), - access_list: AccessList(revm_access_list), - gas_priority_fee: tx - .max_priority_fee_per_gas - .map(|fee| fee.try_into().unwrap_or_default()), - blob_hashes: tx - .blob_versioned_hashes - .iter() - .map(|h256| B256::from(h256.0)) - .collect::>(), - max_fee_per_blob_gas: tx - .max_fee_per_blob_gas - .unwrap_or_default() - .try_into() - .unwrap_or_default(), - authorization_list, - tx_type: infer_tx_type(tx) as u8, - }; - - let mut evm_context = revm::context::Context::mainnet() - .with_block(block_env) - .with_db(&mut initial_state.inner); - evm_context.modify_cfg(|cfg| { - cfg.spec = fork_to_spec_id(*fork); - cfg.chain_id = chain_spec.chain_id; - }); - let evm = evm_context.build_mainnet_with_inspector( - RevmTracerEip3155::new(Box::new(std::io::stderr())).without_summary(), - ); - Ok((evm, tx_env)) -} - -pub fn compare_levm_revm_execution_results( - vector: &TestVector, - levm_execution_report: &ExecutionReport, - revm_execution_result: Result>, - re_run_report: &mut TestReRunReport, - fork: &Fork, -) -> Result<(), EFTestRunnerError> { - match (levm_execution_report, revm_execution_result) { - (levm_tx_report, Ok(revm_execution_result)) => { - match (&levm_tx_report.result, revm_execution_result.clone()) { - ( - TxResult::Success, - RevmExecutionResult::Success { - reason: _, - gas_used: revm_gas_used, - gas_refunded: revm_gas_refunded, - logs: revm_logs, - output: _, - }, - ) => { - if levm_tx_report.gas_used != revm_gas_used { - re_run_report.register_gas_used_mismatch( - *vector, - levm_tx_report.gas_used, - revm_gas_used, - *fork, - ); - } - if levm_tx_report.gas_refunded != revm_gas_refunded { - re_run_report.register_gas_refunded_mismatch( - *vector, - levm_tx_report.gas_refunded, - revm_gas_refunded, - *fork, - ); - } - - if !levm_and_revm_logs_match(&levm_tx_report.logs, &revm_logs) { - re_run_report.register_logs_mismatch( - *vector, - levm_tx_report.logs.clone(), - revm_logs.clone(), - *fork, - ) - } - } - ( - TxResult::Revert(_error), - RevmExecutionResult::Revert { - gas_used: revm_gas_used, - output: _, - }, - ) => { - if levm_tx_report.gas_used != revm_gas_used { - re_run_report.register_gas_used_mismatch( - *vector, - levm_tx_report.gas_used, - revm_gas_used, - *fork, - ); - } - } - ( - TxResult::Revert(_error), - RevmExecutionResult::Halt { - reason: _, - gas_used: revm_gas_used, - }, - ) => { - // TODO: Register the revert reasons. - if levm_tx_report.gas_used != revm_gas_used { - re_run_report.register_gas_used_mismatch( - *vector, - levm_tx_report.gas_used, - revm_gas_used, - *fork, - ); - } - } - _ => { - re_run_report.register_execution_result_mismatch( - *vector, - levm_tx_report.result.clone(), - revm_execution_result.clone(), - *fork, - ); - } - } - } - (levm_transaction_report, Err(revm_error)) => { - re_run_report.register_re_run_failure( - *vector, - levm_transaction_report.result.clone(), - revm_error, - *fork, - ); - } - } - Ok(()) -} - -pub async fn ensure_post_state( - levm_cache: BTreeMap, - vector: &TestVector, - revm_state: &mut RevmState, - test: &EFTest, - re_run_report: &mut TestReRunReport, - fork: &Fork, -) -> Result<(), EFTestRunnerError> { - match test.post.vector_post_value(vector, *fork).expect_exception { - Some(_expected_exception) => {} - // We only want to compare account updates when no exception is expected. - None => { - let mut db = load_initial_state_levm(test).await; - db.current_accounts_state = levm_cache.into_iter().collect(); - let levm_account_updates = db.get_state_transitions() - .map_err(|_| { - InternalError::Custom(format!("Error at LEVM::get_state_transitions() thrown in REVM runner line: {} when executing ensure_post_state()",line!()).to_owned()) - })?; - let revm_account_updates = revm_state.get_state_transitions(); - let account_updates_report = compare_levm_revm_account_updates( - vector, - test, - fork, - &levm_account_updates, - &revm_account_updates, - ) - .await; - re_run_report.register_account_updates_report(*vector, account_updates_report, *fork); - } - } - - Ok(()) -} - -pub async fn compare_levm_revm_account_updates( - vector: &TestVector, - test: &EFTest, - fork: &Fork, - levm_account_updates: &[AccountUpdate], - revm_account_updates: &[AccountUpdate], -) -> ComparisonReport { - let levm_post_state_root = post_state_root(levm_account_updates, test).await; - let revm_post_state_root = post_state_root(revm_account_updates, test).await; - let mut initial_accounts: HashMap = test - .pre - .0 - .iter() - .map(|(account_address, pre_state_value)| { - let account_storage = pre_state_value - .storage - .iter() - .map(|(key, value)| (H256::from_slice(&key.to_big_endian()), *value)) - .collect(); - let account = Account::new( - pre_state_value.balance, - Code::from_bytecode(pre_state_value.code.clone(), ðrex_crypto::NativeCrypto), - pre_state_value.nonce, - account_storage, - ); - (*account_address, account) - }) - .collect(); - initial_accounts - .entry(test.env.current_coinbase) - .or_default(); - - let (levm_updated_accounts, revm_updated_accounts): (HashSet<_>, HashSet<_>) = ( - levm_account_updates.iter().map(|u| u.address).collect(), - revm_account_updates.iter().map(|u| u.address).collect(), - ); - - ComparisonReport { - levm_post_state_root, - revm_post_state_root, - initial_accounts, - expected_post_state_root: test.post.vector_post_value(vector, *fork).hash, - levm_account_updates: levm_account_updates.to_vec(), - revm_account_updates: revm_account_updates.to_vec(), - levm_updated_accounts_only: &levm_updated_accounts - &revm_updated_accounts, - revm_updated_accounts_only: &revm_updated_accounts - &levm_updated_accounts, - shared_updated_accounts: &levm_updated_accounts & &revm_updated_accounts, - } -} - -pub async fn _run_ef_test_revm(test: &EFTest) -> Result { - let hash = test - ._info - .generated_test_hash - .or(test._info.hash) - .unwrap_or_default(); - - let mut ef_test_report = EFTestReport::new( - test.name.clone(), - test.dir.clone(), - test._info.clone(), - hash, - ); - for fork in test.post.forks.keys() { - let mut ef_test_report_fork = EFTestReportForkResult::new(); - - for (vector, _tx) in test.transactions.iter() { - if !test.post.has_vector_for_fork(vector, *fork) { - continue; - } - match _run_ef_test_tx_revm(vector, test, fork).await { - Ok(_) => continue, - Err(EFTestRunnerError::VMInitializationFailed(reason)) => { - ef_test_report_fork.register_vm_initialization_failure(reason, *vector); - } - Err(EFTestRunnerError::FailedToEnsurePreState(reason)) - | Err(EFTestRunnerError::FailedToRevertLEVMState(reason)) => { - ef_test_report_fork.register_pre_state_validation_failure(reason, *vector); - } - Err(EFTestRunnerError::ExecutionFailedUnexpectedly(error)) => { - ef_test_report_fork.register_unexpected_execution_failure(error, *vector); - } - Err(EFTestRunnerError::FailedToEnsurePostState( - transaction_report, - reason, - levm_cache, - )) => { - ef_test_report_fork.register_post_state_validation_failure( - *transaction_report, - reason, - *vector, - levm_cache, - ); - } - Err(EFTestRunnerError::VMExecutionMismatch(_)) => { - return Err(EFTestRunnerError::Internal(InternalError::FirstRunInternal( - format!("VM execution mismatch errors should only happen when COMPARING LEVM AND REVM. This failed during revm's execution. REVM runner, line: {}.",line!()) - .to_owned(), - ))); - } - Err(EFTestRunnerError::Internal(reason)) => { - return Err(EFTestRunnerError::Internal(reason)); - } - Err(EFTestRunnerError::ExpectedExceptionDoesNotMatchReceived(_)) => { - return Err(EFTestRunnerError::Internal(InternalError::MainRunnerInternal( - format!("The ExpectedExceptionDoesNotMatchReceived error should only happen when executing Levm, the errors matching is not implemented in Revm. REVM runner, line: {}",line!()) - .to_owned(), - ))); - } - Err(EFTestRunnerError::EIP7702ShouldNotBeCreateType) => { - return Err(EFTestRunnerError::Internal(InternalError::Custom( - format!( - "This case should not happen. REVM runner, line: {}", - line!() - ) - .to_owned(), - ))); - } - Err(EFTestRunnerError::TestsFailed) => { - unreachable!( - "An EFTestRunnerError::TestsFailed can't happen at this point. This error is only thrown in run_ef_tests under the summary flag. REVM runner, line: {}", - line!() - ) - } - } - } - ef_test_report.register_fork_result(*fork, ef_test_report_fork); - } - Ok(ef_test_report) -} - -pub async fn _run_ef_test_tx_revm( - vector: &TestVector, - test: &EFTest, - fork: &Fork, -) -> Result<(), EFTestRunnerError> { - let (mut state, _block_hash, _store) = load_initial_state_revm(test).await; - let (mut revm, tx_env) = prepare_revm_for_tx(&mut state, vector, test, fork)?; - let revm_execution_result = revm.transact_commit(tx_env); - drop(revm); // Need to drop the state mutable reference. - - _ensure_post_state_revm(revm_execution_result, vector, test, &mut state, fork).await?; - - Ok(()) -} - -pub async fn _ensure_post_state_revm( - revm_execution_result: Result>, - vector: &TestVector, - test: &EFTest, - revm_state: &mut RevmState, - fork: &Fork, -) -> Result<(), EFTestRunnerError> { - match revm_execution_result { - Ok(_execution_result) => { - match test.post.vector_post_value(vector, *fork).expect_exception { - // Execution result was successful but an exception was expected. - Some(expected_exception) => { - let error_reason = format!( - "On REVM runner, line: {} Expected exception: {expected_exception:?}", - line!() - ); - return Err(EFTestRunnerError::FailedToEnsurePostState( - Box::new(ExecutionReport { - result: TxResult::Success, - gas_used: 42, - gas_spent: 42, - gas_refunded: 42, - state_gas_used: 0, - logs: vec![], - output: Bytes::new(), - payer_address: None, - frame_results: None, - }), - //TODO: This is not a TransactionReport because it is REVM - error_reason, - BTreeMap::new(), - )); - } - // Execution result was successful and no exception was expected. - None => { - let revm_account_updates = revm_state.get_state_transitions(); - let pos_state_root = post_state_root(&revm_account_updates, test).await; - let expected_post_state_root_hash = - test.post.vector_post_value(vector, *fork).hash; - if expected_post_state_root_hash != pos_state_root { - println!("Post-state root mismatch on REVM runner, line: {}", line!()); - return Err(EFTestRunnerError::FailedToEnsurePostState( - Box::new(ExecutionReport { - result: TxResult::Success, - gas_used: 42, - gas_spent: 42, - gas_refunded: 42, - state_gas_used: 0, - logs: vec![], - output: Bytes::new(), - payer_address: None, - frame_results: None, - }), - //TODO: This is not a TransactionReport because it is REVM - format!("Post-state root mismatch on REVM runner, line: {}", line!()) - .to_string(), - BTreeMap::new(), - )); - } - } - } - } - Err(err) => { - match test.post.vector_post_value(vector, *fork).expect_exception { - // Execution result was unsuccessful and an exception was expected. - // TODO: See if we want to map revm exceptions to expected exceptions, probably not. - Some(_expected_exception) => {} - // Execution result was unsuccessful but no exception was expected. - None => { - println!( - "Unexpected exception on REVM runner, line: {} . Name: {}, vector: {:?}, error: {:?}", - line!(), - &test.name, - vector, - err - ); - return Err(EFTestRunnerError::ExecutionFailedUnexpectedly( - ethrex_levm::errors::InternalError::Custom(format!( - "Unexpected exception on REVM runner, line: {}: {err:?}", - line!() - )) - .into(), //TODO: Use another kind of error for this. - )); - } - } - } - }; - Ok(()) -} - -pub fn fork_to_spec_id(fork: Fork) -> SpecId { - match fork { - Fork::Frontier => SpecId::FRONTIER, - Fork::FrontierThawing => SpecId::FRONTIER_THAWING, - Fork::Homestead => SpecId::HOMESTEAD, - Fork::DaoFork => SpecId::DAO_FORK, - Fork::Tangerine => SpecId::TANGERINE, - Fork::SpuriousDragon => SpecId::SPURIOUS_DRAGON, - Fork::Byzantium => SpecId::BYZANTIUM, - Fork::Constantinople => SpecId::CONSTANTINOPLE, - Fork::Petersburg => SpecId::PETERSBURG, - Fork::Istanbul => SpecId::ISTANBUL, - Fork::MuirGlacier => SpecId::MUIR_GLACIER, - Fork::Berlin => SpecId::BERLIN, - Fork::London => SpecId::LONDON, - Fork::ArrowGlacier => SpecId::ARROW_GLACIER, - Fork::GrayGlacier => SpecId::GRAY_GLACIER, - Fork::Paris => SpecId::MERGE, - Fork::Shanghai => SpecId::SHANGHAI, - Fork::Cancun => SpecId::CANCUN, - Fork::Prague => SpecId::PRAGUE, - Fork::Osaka => SpecId::OSAKA, - Fork::BPO1 => SpecId::OSAKA, - Fork::BPO2 => SpecId::OSAKA, - Fork::BPO3 => SpecId::OSAKA, - Fork::BPO4 => SpecId::OSAKA, - Fork::BPO5 => SpecId::OSAKA, - Fork::Amsterdam => SpecId::OSAKA, // Amsterdam maps to OSAKA until revm adds AMSTERDAM SpecId - Fork::Hegota => SpecId::OSAKA, // Hegota maps to OSAKA until revm adds a newer SpecId - } -} - -pub fn infer_tx_type(tx: &EFTestTransaction) -> TxType { - if tx.authorization_list.is_some() { - TxType::EIP7702 - } else if !tx.blob_versioned_hashes.is_empty() { - TxType::EIP4844 - } else if !tx.access_list.is_empty() { - TxType::EIP2930 - } else if tx.max_priority_fee_per_gas.is_some() { - TxType::EIP1559 - } else { - TxType::Legacy - } -} diff --git a/tooling/ef_tests/state/utils.rs b/tooling/ef_tests/state/utils.rs index 8c60caf2f0f..7f2330cb55d 100644 --- a/tooling/ef_tests/state/utils.rs +++ b/tooling/ef_tests/state/utils.rs @@ -1,10 +1,7 @@ use std::sync::Arc; use crate::{ - runner::{ - EFTestRunnerError, InternalError, - revm_db::{RevmState, revm_state}, - }, + runner::{EFTestRunnerError, InternalError}, types::{EFTest, EFTestTransaction}, }; use ethrex_blockchain::vm::StoreVmDatabase; @@ -47,21 +44,17 @@ impl VmDatabase for StateTestVmDatabase { } } -/// Loads initial state, used for REVM as it contains RevmState. -pub async fn load_initial_state_revm(test: &EFTest) -> (RevmState, H256, Store) { +/// Loads the genesis-backed store for a test, for callers that need to apply account +/// updates against it rather than execute. +pub async fn load_initial_state_store(test: &EFTest) -> (H256, Store) { let genesis = Genesis::from(test); let mut storage = Store::new("./temp", EngineType::InMemory).expect("Failed to create Store"); storage.add_initial_state(genesis.clone()).await.unwrap(); - let vm_db: DynVmDatabase = Box::new(StateTestVmDatabase { - inner: StoreVmDatabase::new(storage.clone(), genesis.get_block().header).unwrap(), - }); - - (revm_state(vm_db), genesis.get_block().hash(), storage) + (genesis.get_block().hash(), storage) } -/// Loads initial state, function for LEVM as it does not require RevmState pub async fn load_initial_state_levm(test: &EFTest) -> GeneralizedDatabase { let genesis = Genesis::from(test);
NameMeanMedianStddevMinMaxDifference (mean, as levm base)
{row["command"]}{row["mean"] * 1000:.2f} ms{row["median"] * 1000:.2f} ms{row["stddev"] * 1000:.2f} ms{row["min"] * 1000:.2f} ms{row["max"] * 1000:.2f} ms{row["change"]:.2f} % {change_text}