diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index cbdf4b11bd..13e0dd793e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,6 +12,7 @@ - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] This change requires a documentation update +- [ ] Refactor (no updates to logic) ### Contents diff --git a/.github/workflows/mpt-witness-generator.yml b/.github/workflows/geth-utils.yml similarity index 78% rename from .github/workflows/mpt-witness-generator.yml rename to .github/workflows/geth-utils.yml index 77da2fa9c8..9fc22d6574 100644 --- a/.github/workflows/mpt-witness-generator.yml +++ b/.github/workflows/geth-utils.yml @@ -1,4 +1,4 @@ -name: MPT Witness Generator Checks +name: Geth-utils Checks on: merge_group: @@ -19,7 +19,7 @@ jobs: with: cancel_others: 'true' concurrent_skipping: 'same_content_newer' - paths: '["mpt-witness-generator/**"]' + paths: '["geth-utils/**"]' build: @@ -35,15 +35,15 @@ jobs: - name: Format uses: Jerome1337/gofmt-action@v1.0.5 with: - gofmt-path: './mpt-witness-generator' + gofmt-path: './geth-utils' gofmt-flags: '-l -d' - name: Build - working-directory: ./mpt-witness-generator + working-directory: ./geth-utils run: go build -v ./... - name: Test - working-directory: ./mpt-witness-generator + working-directory: ./geth-utils env: NO_GETH: true run: go test -v ./... diff --git a/Cargo.lock b/Cargo.lock index aab1ce1184..5f6781d1d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,9 +29,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aes" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", @@ -40,12 +40,11 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" dependencies = [ "cfg-if", - "getrandom", "once_cell", "version_check", "zerocopy", @@ -429,9 +428,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" dependencies = [ "serde", ] @@ -468,9 +467,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "num-traits", ] @@ -631,9 +630,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5104de16b218eddf8e34ffe2f86f74bfa4e61e95a1b89732fccf6325efd0557" +checksum = "18d59688ad0945eaf6b84cb44fedbe93484c81b48970e98f09db8a22832d7961" dependencies = [ "cfg-if", "cpufeatures", @@ -693,9 +692,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", ] @@ -1002,9 +1001,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "elliptic-curve" @@ -1526,21 +1525,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -1721,7 +1705,10 @@ name = "geth-utils" version = "0.1.0" dependencies = [ "eth-types", + "ethers", + "glob", "gobuild", + "num_enum 0.7.2", "serde", "serde_json", ] @@ -1795,7 +1782,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.2", + "indexmap 2.2.3", "slab", "tokio", "tokio-util", @@ -1854,9 +1841,9 @@ dependencies = [ [[package]] name = "halo2curves" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3675880dc0cc7cd468943266297198a28f88210ba60ca5e0e04d121edf86b46" +checksum = "db81d01d0bbfec9f624d7590fc6929ee2537a64ec1e080d8f8c9e2d2da291405" dependencies = [ "blake2b_simd", "ff", @@ -1941,9 +1928,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" +checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" [[package]] name = "hex" @@ -2072,24 +2059,13 @@ dependencies = [ "futures-util", "http", "hyper", + "log", "rustls", + "rustls-native-certs", "tokio", "tokio-rustls", ] -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -2162,9 +2138,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -2237,12 +2213,12 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ - "hermit-abi 0.3.4", - "rustix", + "hermit-abi 0.3.6", + "libc", "windows-sys 0.52.0", ] @@ -2272,18 +2248,18 @@ checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ "wasm-bindgen", ] @@ -2433,30 +2409,6 @@ dependencies = [ "libsecp256k1-core", ] -[[package]] -name = "light-client-poc" -version = "0.1.0" -dependencies = [ - "ahash", - "ctor", - "env_logger", - "eth-types", - "ethers", - "eyre", - "gadgets", - "halo2_proofs", - "hex", - "mpt-witness-generator", - "num_enum 0.6.1", - "rand", - "rand_chacha", - "reqwest", - "serde", - "serde_json", - "tokio", - "zkevm-circuits", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -2555,38 +2507,28 @@ dependencies = [ ] [[package]] -name = "mpt-witness-generator" +name = "mpt-test" version = "0.1.0" dependencies = [ - "env_logger", + "base64 0.21.7", + "eth-types", "ethers", + "eyre", + "flate2", + "gadgets", + "geth-utils", "glob", - "gobuild", - "log", - "num_enum 0.7.2", + "halo2_proofs", + "hex", + "hyper", + "hyper-rustls", + "lazy_static", "serde", "serde_json", + "tokio", "zkevm-circuits", ] -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "new_debug_unreachable" version = "1.0.4" @@ -2621,9 +2563,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" dependencies = [ "num-traits", ] @@ -2636,19 +2578,18 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-iter" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" dependencies = [ "autocfg", "num-integer", @@ -2669,9 +2610,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", "libm", @@ -2683,7 +2624,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.4", + "hermit-abi 0.3.6", "libc", ] @@ -2696,15 +2637,6 @@ dependencies = [ "num_enum_derive 0.5.11", ] -[[package]] -name = "num_enum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" -dependencies = [ - "num_enum_derive 0.6.1", -] - [[package]] name = "num_enum" version = "0.7.2" @@ -2726,18 +2658,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "num_enum_derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 2.0.48", -] - [[package]] name = "num_enum_derive" version = "0.7.2" @@ -2796,50 +2716,12 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "openssl" -version = "0.10.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8" -dependencies = [ - "bitflags 2.4.2", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "openssl-sys" -version = "0.9.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "option-ext" version = "0.2.0" @@ -2987,9 +2869,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.6" +version = "2.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" +checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546" dependencies = [ "memchr", "thiserror", @@ -2998,9 +2880,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.6" +version = "2.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd6ab1236bbdb3a49027e920e693192ebfe8913f6d60e294de57463a493cfde" +checksum = "22e1288dbd7786462961e69bfd4df7848c1e37e8b74303dbdab82c3a9cdd2809" dependencies = [ "pest", "pest_generator", @@ -3008,9 +2890,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.6" +version = "2.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a31940305ffc96863a735bef7c7994a00b325a7138fdbc5bda0f1a0476d3275" +checksum = "1381c29a877c6d34b8c176e734f35d7f7f5b3adaefe940cb4d1bb7af94678e2e" dependencies = [ "pest", "pest_meta", @@ -3021,9 +2903,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.6" +version = "2.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ff62f5259e53b78d1af898941cdcdccfae7385cf7d793a6e55de5d05bb4b7d" +checksum = "d0934d6907f148c22a3acbda520c7eed243ad7487a30f51f6ce52b58b7077a8a" dependencies = [ "once_cell", "pest", @@ -3037,7 +2919,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.2.2", + "indexmap 2.2.3", ] [[package]] @@ -3145,9 +3027,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "poseidon" @@ -3446,12 +3328,10 @@ dependencies = [ "http-body", "hyper", "hyper-rustls", - "hyper-tls", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -3463,7 +3343,6 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-native-tls", "tokio-rustls", "tower-service", "url", @@ -3668,6 +3547,18 @@ dependencies = [ "sct", ] +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -4250,13 +4141,12 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", "rustix", "windows-sys 0.52.0", ] @@ -4324,18 +4214,18 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", @@ -4425,16 +4315,6 @@ dependencies = [ "syn 2.0.48", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.24.1" @@ -4510,7 +4390,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.2", + "indexmap 2.2.3", "serde", "serde_spanned", "toml_datetime", @@ -4523,7 +4403,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.2.2", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -4534,7 +4414,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.2.2", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -4726,12 +4606,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.4" @@ -4765,9 +4639,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4775,9 +4649,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", @@ -4790,9 +4664,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", @@ -4802,9 +4676,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4812,9 +4686,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", @@ -4825,15 +4699,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -5010,9 +4884,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.37" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index e26b746831..0e88d667b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,8 +11,7 @@ members = [ "external-tracer", "mock", "testool", - "mpt-witness-generator/rustlib", - "light-client-poc" + "bin/mpt-test" ] [patch.crates-io] diff --git a/bin/mpt-test/.gitignore b/bin/mpt-test/.gitignore new file mode 100644 index 0000000000..73e4dc7477 --- /dev/null +++ b/bin/mpt-test/.gitignore @@ -0,0 +1 @@ +web3_rpc_cache.bin diff --git a/bin/mpt-test/Cargo.toml b/bin/mpt-test/Cargo.toml new file mode 100644 index 0000000000..347c5eec9f --- /dev/null +++ b/bin/mpt-test/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "mpt-test" +version = "0.1.0" +edition = "2021" + +[dependencies] +ethers ={ version = "2.0.10", features = ["abigen", "rustls", "ws", "ethers-solc"] } +eth-types = { path = "../../eth-types" } +gadgets = { path = "../../gadgets" } +geth-utils = { path = "../../geth-utils" } +zkevm-circuits = { path = "../../zkevm-circuits", features=["test-circuits"]} +eyre = "0.6.11" +halo2_proofs = { git = "https://github.com/privacy-scaling-explorations/halo2.git", features=["circuit-params"], tag = "v0.3.0" } +serde_json = "1.0.111" +tokio = { version= "1.28.2", features = ["macros", "rt-multi-thread"] } +glob = "0.3.1" +lazy_static = "1.4.0" +base64 = "0.21.7" +flate2 = "1.0.28" +hyper = { version="0.14.27", features= ["full"]} +hyper-rustls = "0.24.1" +serde = "1.0.195" +hex = "0.4.3" + +[features] +default = ["disable-keccak"] +disable-keccak = [] diff --git a/bin/mpt-test/README.md b/bin/mpt-test/README.md new file mode 100644 index 0000000000..53e28a214a --- /dev/null +++ b/bin/mpt-test/README.md @@ -0,0 +1,25 @@ +# mpt-test + +This tool aims to verify mainnet blocks for the MPT circuit. + +## Running tests + +Just run `./test_mainnet_blocks.sh` + +NOTE: this run the tests with keccak testing disabled, because it takes SO MUCH to test with keccaks enables. If you want to run them with keccak, just run `cargo run --release --no-default-features`. + +## Adding new blocks to prove + +In order to add more blocks to prove you have to: + +- Add new entry in the `access-lists` folder +- Set the environment variable `WEB3_SERVICE_PROVIDER` to a mainnet JSON-RPC provider +- Run the tests again +- You will have to upload the cache file again (web3_rpc_cache.bin) and update the `test_mainnet_blocks.sh` file + +## How can get an access list for other blocks? + +There's a [modified version of geth](https://github.com/adria0/go-ethereum/tree/zklight) that [tracks access lists](https://github.com/adria0/go-ethereum/commit/fd2d7cea3747e1003a817cd18e200bf2b00be03c#diff-c3757dc9e9d868f63bc84a0cc67159c1d5c22cc5d8c9468757098f0492e0658cR1306) and allows to retrieve them via [RPC eth_accessListByNumber call](https://github.com/adria0/go-ethereum/commit/fd2d7cea3747e1003a817cd18e200bf2b00be03c#diff-c426ecd2f7d247753b9ea8c1cc003f21fa412661c1f967d203d4edf8163da344R1587), so you can deploy this version and grab some access lists there. + +Note: of course this is just a method for testing , do not use in production. + diff --git a/bin/mpt-test/access-lists/107.json b/bin/mpt-test/access-lists/107.json new file mode 100644 index 0000000000..1a28bd63d1 --- /dev/null +++ b/bin/mpt-test/access-lists/107.json @@ -0,0 +1 @@ +[{"address":"0xd7e30ae310c1d1800f5b641baa7af95b2e1fd98c","storageKeys":[]}] \ No newline at end of file diff --git a/bin/mpt-test/access-lists/18363441.json b/bin/mpt-test/access-lists/18363441.json new file mode 100644 index 0000000000..65c0f6433e --- /dev/null +++ b/bin/mpt-test/access-lists/18363441.json @@ -0,0 +1 @@ +[{"address":"0xfd46ff70314d13d62150c4fbf3f397ea1fd14d1f","storageKeys":[]},{"address":"0x92c24932b4e5eba6223510e26ecb2d19e986c312","storageKeys":[]},{"address":"0x75c97384ca209f915381755c582ec0e2ce88c1ba","storageKeys":["0xf2c891cab2af1155379e2cb5a591b3e1f3859d3ef1c231d4987204c1fe7ea115","0x000000000000000000000000000000000000000000000000000000000000000b","0xafa9712ae32b996e680ddfb579f88c5714eff15e4f29153eadd3decaad54ebca","0x5a0dc5d4d49c845a7e5c8f30d3eb17f36afd4610ee030b6b45acdef0e06b51fd","0x4c29a58e6ae8e8d5675a8f982d2b7b5003c687633919a622b92973af39bb0548","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000c","0x4ac0dadab39f2c7439c0a2e1c046c7e22df2ff8d95029194a826bc70fc6a0360","0xd6cd76e208ea80eb6f706515ebcfc15fc94f57f3e18452883d9478107143d407","0x6d57821318dcacfc543b369a66700bf70f3cd7f6194cd57b7e4101fc0a74401d","0xda9c22012f08f23c37f099fccfe07f399a157a4c1bf42d865b94c48d9ef10fa7","0xba4d1c7608e744a1dc4d1fdb0557e190c51b79460d4532783a98486635c83c36","0xc1d6bbde807e779e9d800fa021b5c8c5cae259cc49263c8e37cc09cbc9f773c3","0x9f9e915dbba093c21f0cc8a4d2160202ca7e51a7f3c02bd7aa37f6ad5c709858","0x5f683f9bb8ac29d67769e6ec1b79f0d2c23182c0d1c3afa6632099e73206baad","0xb9b3e30df654c8da6ba9c77c47b95fbfd6273df5c9018494447244af5290a221"]},{"address":"0x8e79e45c9e008b430aff86f7121b122f9ad27aff","storageKeys":[]},{"address":"0x388abf256ab77283427715ab0ac38848045a2f4a","storageKeys":[]},{"address":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","storageKeys":["0x89b759767f65427c4a18c7717f8394a0142a5dc2cef03452521b758164e18b50","0xd0394c81a6b7d8cb5530f95a10548c9f5289859645db3365a4ebaeb43a664d20","0x0000000000000000000000000000000000000000000000000000000000000005","0x9319194a372d6da00e43ed5f7027e57f755d1a31b34a5351314b4fa3f025c34c","0xcd018cb5d654cc39608cf11b487d628b7c51ad6623ccdd43017a36c4d6d3d409","0xdc276a4f120117ad5ae6415d1c724b4f3a0e81f0ee6466e1392ca121b63123f2"]},{"address":"0x63bde7cb131b020e817d4e11e046ce3916fa53d8","storageKeys":[]},{"address":"0x1a7a898b00b8e4c166993dfe2174f5ff8526b9bf","storageKeys":["0x3f6de87e22e968df3dd5b7e4c532f82c2819e294a3460aff0c0bec4e89fba221"]},{"address":"0xcfd0babaf232fcfa4ca9e370c85c44ded8a57012","storageKeys":[]},{"address":"0x0439e60f02a8900a951603950d8d4527f400c3f1","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0xc65ab7a07b3776139ad8a157b15c2a86a9240ddbfd989f249a2a98410370fcdd"]},{"address":"0x4a4dfbf1ebfd257aca2a65a8407c786dace7d99b","storageKeys":[]},{"address":"0x126db3213b309a8d554594e591e614425ccac78e","storageKeys":[]},{"address":"0xfbef075cd5b328b1c236ec097d34acd0705e7b2d","storageKeys":[]},{"address":"0x9b16c4bbd2d504786f90f487f0ec721ca3c02956","storageKeys":[]},{"address":"0x0000000000c2f3017e5af636ea91bd68ec3888ed","storageKeys":[]},{"address":"0x388a189d2752ef07a278f6586f5944fb73a1363c","storageKeys":[]},{"address":"0x79a5a6d94a6c233422e513e1eb5508883ac0e7b1","storageKeys":[]},{"address":"0x2d108e77ede06f89a0f285b2acc40491fb886ab2","storageKeys":[]},{"address":"0x0000000000000000000000000000000000000001","storageKeys":[]},{"address":"0xbff472ac156ca909ad883c36b4b93f827b0cc3cf","storageKeys":[]},{"address":"0x582d872a1b094fc48f5de31d3b73f2d9be47def1","storageKeys":["0x052e713d101c7dfed5314e4b3b8ecf07e42b12c3bf502e120438fddbb4b372bd","0xd857bf78a5f78591619c92bcff3bae1186c1f822220646ff6841798075d67b40","0xbaaf0bbf22a11f650c9ba4e8811d702eb3ff7ae7a92de9131f8c93ff79843f55","0x2c59fb26cb8960fc7597a10edfa823cc5833fc25820b637943dc0d621f05e8ac"]},{"address":"0x0b04b870b704846a5bac87c38b8a0555240fee5c","storageKeys":[]},{"address":"0xeea9b6df7e9a26c66a960a657248404c000e9f22","storageKeys":[]},{"address":"0x3fda25f27211a138adf211f4c060f2149674be6d","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563","0x0000000000000000000000000000000000000000000000000000000000000000","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000004","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000b","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x1e43dccf1760cc59045777a30307ad995418f7cc","storageKeys":[]},{"address":"0x2150bc3c64cbfddbac9815ef615d6ab8671bfe43","storageKeys":[]},{"address":"0x5efa852e92800d1c982711761e45c3fe39a2b6d8","storageKeys":[]},{"address":"0xb5e45fb7e89eb853c03b328daaa2c82c945b2573","storageKeys":[]},{"address":"0x3d1d55c23dfc759c5ae48500ca88ddf477b3c9e5","storageKeys":[]},{"address":"0xa017c98c147fc7a3c4e4d92a00893fb91fd0e100","storageKeys":[]},{"address":"0x7a63d17f5a59bca04b6702f461b1f1a1c59b100b","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x15e86e12d2596e308755eab3ada247f38048851b6387ce103d08698145fcd3e5"]},{"address":"0x67febbcaff34595c3776bb59e2a3e40422392a14","storageKeys":[]},{"address":"0x52f2a0c9e836743d4a509df7a96b8ce6dd6a3c73","storageKeys":[]},{"address":"0x77ecb9f03b4929e136cbd74f0ba40424aba7f33d","storageKeys":[]},{"address":"0x867bdc57d1b071fe5a9f670dd70b91e4269814d3","storageKeys":[]},{"address":"0xbdff339bc2707a1e5e4be7b2511316fa2188912c","storageKeys":[]},{"address":"0x054e993e0ecc5bf2797515adfc81d58cb8de0478","storageKeys":[]},{"address":"0x3106a0a076bedae847652f42ef07fd58589e001f","storageKeys":["0x3b031014f6c8175084b8f68107f1407fbf028ed86f79bc4053540962fdc859dd","0x193d7efdf5f83c633733c50bdc780b96fc43fd09df0b48704554e9213a4d638e"]},{"address":"0xd13b6bc36f1c6aa8c0eaad0f759c9e895201519b","storageKeys":[]},{"address":"0xd059b9025b3927c0582fd982328ff9c29c0108b4","storageKeys":[]},{"address":"0x000000000022d473030f116ddee9f6b43ac78ba3","storageKeys":["0xe92b7ebecc53b799f19b751adcdc00b9f880dfd84854a5a427861e96a27aee14"]},{"address":"0x3a23f943181408eac424116af7b7790c94cb97a5","storageKeys":["0x777c4eb203f5e2225f52abc3bd4ace68a75adabcdef917f1d0986096377a9a52"]},{"address":"0x6ee66ee47b1ff1d57caae4195cefa9672bf20c37","storageKeys":[]},{"address":"0x1efd36007f7f4306cf03cd7247f1e76efa41ccd2","storageKeys":[]},{"address":"0x19ce6addc7bec3e2759c080914452955d06b856f","storageKeys":[]},{"address":"0x51e2389f676bf15b48ea2b49e46aad7ce8d4ef98","storageKeys":[]},{"address":"0x1894bc5f85ac82589cd2d6d98beb08ff8a0cf332","storageKeys":[]},{"address":"0xb54ce26f2e30f64c5b684b141311ce138ab5e00e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x5f88d1a517b670a14ded5d0cf8b3d37e554d977b","storageKeys":[]},{"address":"0x32143a02fb6484d18c79fa0401c9bf760dd3de68","storageKeys":[]},{"address":"0x5b060754b27844dbc3578382886828be224b804f","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000002e","0xc5aa584e68508eedab072ce21e7fc7dcd4d2d52d0c439d77fdc05b60ec45fe28","0x2a1cb9290a0423a43747f79d5e030615a76aa2a1c3720b17fdb2f1b26e506331","0xd13ef510468531d94ebc85abd3e4d9bb6fc03fa0cf2ac33e4d4a1ea9b840255f","0xa9989c0d89f86aba235818ead0ac055f2b9afaaba5f56494b89b2619cc92e5da","0xf6fecb6dd66268972069ac274362d988da548a5879780ed23ea332e80f58ab72","0xdcf37475f596d99d564d47a264043ef054aeded2dc3aee70eb1da7720cd42ed0","0xc6ba8782a9dbad0517d64e33b2220ddc28ab904012d80189113c9534768198f3","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000001e","0x327505968b816924d5209e1e33a4037697dc001fc383b7bac5197705d96c866c","0x783e48d4931c659f4eadaccbf342b23ec578f1902679e3dbc08785ecca677d86","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000024","0xd35f28dc68d0a228d05226c68f3dfd8d3ba142c198b48e54dc57959612d5c289","0x864524afabd2994b33b0c83d05f641c1a201d77afccc11f318d82a4700dc48a7","0x0000000000000000000000000000000000000000000000000000000000000034","0xa99ab8af0a963ef95adbbdf192a724d8137084c4bb695dbcfe87a7aad70b7629","0x01ab95c397577b90e3a67487b46ee47246f80a408eabaeb81a20bcb4c69d6507","0x5f71aa8e15ed48bf8f613d7f623f43f227e8cbccc903d0c1ba4bf6dad2bd67e0","0x0000000000000000000000000000000000000000000000000000000000000037","0xc43c1ef7280cd5ac861bd508e7e27aa80a320e9cb671e3be53167362eca5a0f5","0x407ced7054b1ac3cbf1ec772dedb4d6aa04e40015cfd0e23946294518cbc2667","0x1deb09875e83eb2b5ab74eb296eec65ca4f17b78065c261ab58c666c3fbab4d7","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000000f","0xd2d5dcbde2102e87d15b37cda1fd604422c78671e5ac5f2f1a5649a7bcc3698c","0x0000000000000000000000000000000000000000000000000000000000000025","0x5bffb21522df03a002cb4564a7171fd2dc98b9687e9e3c61ac040bf68c909421","0x0000000000000000000000000000000000000000000000000000000000000000","0xcdf03d9c629f89cb5e333682e4ee004bd5a01a3a78fff12cf0d03ced6adf4485","0x0000000000000000000000000000000000000000000000000000000000000011","0x5cc8e2ea5dc5572b503e537bebc2339c3fcfa689483abf4ba458d7d0987c3aa4","0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3","0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4","0x0000000000000000000000000000000000000000000000000000000000000030","0x000000000000000000000000000000000000000000000000000000000000002a","0x0fff2b59da56012547c6df5403b0bdd31215c91d03c06ade38c221eeb2eed2a3","0x0000000000000000000000000000000000000000000000000000000000000029","0x12f53cb5b3fda9f80f840cfc045e6c89dd52b49e706c9b52c211d2dfabe184e6","0x58362cdb0dd2c0a3f939dc939b24465227a128647c04d6d33f9f658532b934ae","0x2ef00c611e029a2af130445dbb3a2cb624678b5859bf1b9ebb0dbfdff4438626","0x379fa979821431b30f6687393a0a3c24a2722d8e5a004fb15e094e8a88bb4bb4","0x000000000000000000000000000000000000000000000000000000000000000d","0x245385767b995e7baea863b2383fda8821c817acf7b9e5d7d0809a82373dab98"]},{"address":"0x2a137ec3c64544bb2402b2e074f3414aa3105832","storageKeys":[]},{"address":"0x674c41b588924128587367b9f0015a71503d19ad","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x65b606733179b406421b7b675921d85da2789bab","storageKeys":[]},{"address":"0x1199c6c49a5235a76b64094db13f709a975320bf","storageKeys":[]},{"address":"0xdad8ff64ca16c7cb6e62afc2bc7760bd71d93d73","storageKeys":[]},{"address":"0x808b4da0be6c9512e948521452227efc619bea52","storageKeys":[]},{"address":"0x4087456720119e9153bff24291f0605cc6449a48","storageKeys":[]},{"address":"0x296f55f8fb28e498b858d0bcda06d955b2cb3f97","storageKeys":["0x08f7c1381a1fb1b7d984cbe1c2f9ba2a420186375b6d1e87b9db0b3805e07d27","0x5fb32ddd7af3fd83ab0c2e5099470666994bc1a3c3f82b87ca868ef5760b8945","0x5fb32ddd7af3fd83ab0c2e5099470666994bc1a3c3f82b87ca868ef5760b8946"]},{"address":"0x7137fdccfb6ee406771e8f5c1b466e4d3074dd45","storageKeys":[]},{"address":"0x1d80acdcae2257329557ae12c1d1fc21361def30","storageKeys":[]},{"address":"0xa38198499eb0b92155c01bd6e47ee501f5234ec1","storageKeys":[]},{"address":"0xdfb7444feee41158e4c95dcfc0663df0c4a4cf56","storageKeys":[]},{"address":"0xc77c5b30c56b402a2f43e0fb3f80d4182fbf2162","storageKeys":[]},{"address":"0x575725182cf495d977126b166bd00d8d2ac96628","storageKeys":[]},{"address":"0x2a80014c978b77a85edd2c5d654782dd68852e68","storageKeys":[]},{"address":"0x11b815efb8f581194ae79006d24e0d814b7697f6","storageKeys":["0x00000000000000000000000000000000000000000000000000000000000000a2","0x00000000000000000000000000000000000000000000000000000000000000a3","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x32d80bb380a6153715a380340a591610b4f5a62ca0809dce09eefe0e7c37ea7f"]},{"address":"0xaf2c2d5b3ab612d7f6cb22f406b1f6ff47816f14","storageKeys":[]},{"address":"0x9331ee6a0809b6a3cda743400a348fc5fa912a37","storageKeys":[]},{"address":"0xb1f01b0723c74ea99b1187c30b876941f49adb39","storageKeys":[]},{"address":"0x89e51fa8ca5d66cd220baed62ed01e8951aa7c40","storageKeys":[]},{"address":"0x32b3076c9b844adee46e6b83cd61ffd24c9d4c3b","storageKeys":[]},{"address":"0xfe21fb34b0161b53ce0e0c254340f34bceb63166","storageKeys":[]},{"address":"0xe8df9a7c34736a482a861a49b51fbc1c4c031456","storageKeys":[]},{"address":"0x615a681176023bfc4cfa94932f39ed7e8b0a5432","storageKeys":[]},{"address":"0x139dd8d31ac299747f79ae1a032a23077dd0542d","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xb3cef8a292bf665afaaf717a9dbcc156d70d4ad6","storageKeys":[]},{"address":"0xd343d5dba2fba55eef58189619c05e33cab95ca1","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000d"]},{"address":"0xd19d4b5d358258f05d7b411e21a1460d11b0876f","storageKeys":["0x527dcbcf86fe3303da69cdb317c41aaa6d31fa4b330582c5f81948108970338e","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x21ebe1c20d059c8774c0e58bbce5b1cf983d25acc658bc3997f122df6f662c55","0x43d06be72d58b0a6dd8b48d14c1f76a2baed1f10b679cf98560bf804d5560815","0x00000000000000000000000000000000000000000000000000000000000000e4"]},{"address":"0xd4c4044aca68ebbcb81b13cc2699e1bca2d3f458","storageKeys":[]},{"address":"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x23e7322ca615cbcc6f0ba63322441e5872eaf2eb","storageKeys":[]},{"address":"0xc36442b4a4522e871399cd717abdd847ab11fe88","storageKeys":["0xba057bab125661c01928dfa773d99b4c8ff4f2bf04513f554150f4586abd64c0","0x0000000000000000000000000000000000000000000000000000000000000002","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3cb4485","0xba057bab125661c01928dfa773d99b4c8ff4f2bf04513f554150f4586abd64c1","0xba057bab125661c01928dfa773d99b4c8ff4f2bf04513f554150f4586abd64bf","0xdd5974cd6ebc28fb4c398655f6b0850e7424ec0d7425a06b2ed8c6ceafb89239","0xba057bab125661c01928dfa773d99b4c8ff4f2bf04513f554150f4586abd64be","0xa29e5d260357e9e8bdb6062ea0f7b1e74c116d033d6c3edb74a722dfcbfd03bf","0xa29e5d260357e9e8bdb6062ea0f7b1e74c116d033d6c3edb74a722dfcbfd03c0"]},{"address":"0xe37e799d5077682fa0a244d46e5649f71457bd09","storageKeys":[]},{"address":"0x686158b2df5cf38d948326fc7f8faac6f3bfd7df","storageKeys":[]},{"address":"0x64569f857512c63268f67c914df351d30d1d6322","storageKeys":[]},{"address":"0xb7a2a0b3a2523c62b47cd99440ad58dd7c9bf157","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000018","0x0000000000000000000000000000000000000000000000000000000000000009","0xbbc106b374ca0a57d258e3272397ac577dadd0c273a7f9d647883554e0e1ac39","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000023","0x0000000000000000000000000000000000000000000000000000000000000017","0xa7d6b42f0b28be868ac5fba02a1ffb6a78e9cf251f588dbad8848eda36c91d38","0xc46d6271e4a4a59cda0298df6d397a45b8063d5b2b4ae180e0b4174e9a9961f0","0x0000000000000000000000000000000000000000000000000000000000000019","0x624743ff2aee9de307cc5fa1544e5e104640ce8dd78fbcb3d2400b81e60489f7","0x740163e94bf2e5278422ed6ee528d2b71ddc2aa3a5026aeb095a3f1a26b16dd8","0xc15a171cfd73a656e9ab828b7d985fb1b7610c391a9c1e24cb119f9808653ed7","0x577ec814550374a6b95dd63a9037798436fb5d5082d2c33782529cd9dbc8d9b3","0xa334cac97239913e281823411e58e96d29b6e39e17d25306b1f3ebc66f2e0565","0x0000000000000000000000000000000000000000000000000000000000000020","0x0000000000000000000000000000000000000000000000000000000000000016","0x0000000000000000000000000000000000000000000000000000000000000022","0x0000000000000000000000000000000000000000000000000000000000000005","0x7e92b516f17f46e58d08d8c2c428eb4e7c21c3e0d9db18ff091c1a6f353efccc","0x0000000000000000000000000000000000000000000000000000000000000021"]},{"address":"0x3b4dfdf2ce3cfb280467def726e5e913ea43768f","storageKeys":[]},{"address":"0xd14ac9c18e4fb4771055a841f2c1256bd95f9184","storageKeys":[]},{"address":"0x6ebff09e0cb7ba3de1b793f9dd4f16d650238d4a","storageKeys":[]},{"address":"0x063d57e8b24b5a5b7ea7b90cf4580ad875c9e3be","storageKeys":[]},{"address":"0xba966940b8a990914a8d54b406dc2271d739beb1","storageKeys":[]},{"address":"0x33b06cd90c813c4a62ff2181d086232d45176b39","storageKeys":[]},{"address":"0x4976a4a02f38326660d17bf34b431dc6e2eb2327","storageKeys":[]},{"address":"0xc6265979793435b496e28e61af1500c22c3ba277","storageKeys":[]},{"address":"0x2fab0249c6a60d715135f12e51de7c130c26289d","storageKeys":[]},{"address":"0x072be3851a80c35e2c638d4a1b97afe7f3ba123a","storageKeys":[]},{"address":"0xf52605c7b778563a5a9144ef4dc53b57463ca2c7","storageKeys":[]},{"address":"0x5133522ea5a0494ecb83f26311a095ddd7a9d4b6","storageKeys":[]},{"address":"0x5bb467ab80999b5bc44e46dcf9d586e7902ceaf8","storageKeys":[]},{"address":"0x8fa8f9d8b228eee6e7df2056faa97ab23822deae","storageKeys":[]},{"address":"0x446d1c5a7d68d2a408869efea7e9f697c5c5a7e3","storageKeys":[]},{"address":"0xf5e106d38225d44ca8e9456b92d5ee64a58d7b82","storageKeys":[]},{"address":"0x9ac60b8b33092c2c0b4ca5af0dec2bcb84657e12","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x843d042c9c158e58fb5a88bcc0ffbc24f8ecf2f2","storageKeys":[]},{"address":"0x2c537e5624e4af88a7ae4060c022609376c8d0eb","storageKeys":["0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0x0000000000000000000000000000000000000000000000000000000000000001","0xba3593a51a2814ce6b32e5200c75bcb28f3d8d2944384a40a74dec87e063d098","0x1bb1269153531cf401a2bb06d1c1fda2dc76a14af7fae43515ed9a0da9945e9f","0x271880c33dec0cd2ac9380dec0fb486edef3d08c252e0b4f408b4312605c095c","0x660f20784821b748dece498c85634bf8e17fba0d424ec0b473b2549f4072ca7e"]},{"address":"0xd5980b04df6af6ee3d2b730e779eee3f8d607ba1","storageKeys":[]},{"address":"0xe4edb277e41dc89ab076a1f049f4a3efa700bce8","storageKeys":[]},{"address":"0x76e222b07c53d28b89b0bac18602810fc22b49a8","storageKeys":["0x4a8360dcbf2fb9aa7ab86da1ac9b80c2b3519c759a2bef3e5f16c0fa8d6a9b52","0x101bfeea476a950d7b29c2e53186923e14169383d54cd57d78f7493f45e91faa","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000010","0xdfd2420533e281f70c1cdab65f96a3bc12b8c17266c6ee9984dd1973a721870b","0x0588d0c3a76602a35b103254e95b5b0d99294eb2f4ddee93696edcaa2e07f1ad","0x7eed28a2e7c8a287690db85469e4c2f20bf9d6e3640ff8617894011d83dfadc9","0x481e9b1793e1b4e94c63ca5609e56cc2245a92c22cd7c5f50361675f6176f447","0x4cbf378d5393edba2a149d771902c6de6614d71e6d1d8d2dc058687e61f3d9a1","0x1acee096f51f9f9a4f28109ee16757afa6c16b13691f7c63b659265cde302103","0x02b8d8834ad9af8d7307f3bbdbd773ede52b32eeb265e110116185bce8222791","0x8dff745be89f9f95d0a1117ded18311df8ef4c1a352dca295640043f329e8964","0x0000000000000000000000000000000000000000000000000000000000000005","0xb5e32bf50149885d3d646d8982464d72de4ae399d83828a675f837354bf33510","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000b"]},{"address":"0x99dc263dc0a73374f58486c62c59fcd640e7a133","storageKeys":[]},{"address":"0x76107ad6a0c2aefdc5c19ee047add3d72afb4984","storageKeys":[]},{"address":"0xa270f3ad1a7a82e6a3157f12a900f1e25bc4fbfd","storageKeys":[]},{"address":"0xfb8131c260749c7835a08ccbdb64728de432858e","storageKeys":[]},{"address":"0x50cffc84b4eeae2fe36de69d9a4fe5a6c9475975","storageKeys":[]},{"address":"0x5f101efb2b882e650fed0e906a0689c40592f057","storageKeys":[]},{"address":"0x325296c431bd9579f3d35f7eef4f4ecdff0fcff0","storageKeys":[]},{"address":"0xff0e67414bbf13a158fabd5d5fddfe41e0228e59","storageKeys":[]},{"address":"0x3157e15e15fd41d6a9c5df255c71506f160db67c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0xce5274c3248f7bb33cac76a4b1f120d1d52f94f461fa5a4ea3fb02b8e3ba8fc4","0xa5bfb6184895ad46f68a4af050eef505abefcc41140757a7c3f32faa92aa6fa1","0xc7b538a5943e2df7c2b016c59da63a91ad13ba24495129cfb4ed30437ff2f569","0xce5274c3248f7bb33cac76a4b1f120d1d52f94f461fa5a4ea3fb02b8e3ba8fc1","0xa5bfb6184895ad46f68a4af050eef505abefcc41140757a7c3f32faa92aa6f9f","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000004","0xc7b538a5943e2df7c2b016c59da63a91ad13ba24495129cfb4ed30437ff2f567","0xa5bfb6184895ad46f68a4af050eef505abefcc41140757a7c3f32faa92aa6fa0","0xce5274c3248f7bb33cac76a4b1f120d1d52f94f461fa5a4ea3fb02b8e3ba8fc3","0x0000000000000000000000000000000000000000000000000000000000000001","0xce5274c3248f7bb33cac76a4b1f120d1d52f94f461fa5a4ea3fb02b8e3ba8fc2","0xc7b538a5943e2df7c2b016c59da63a91ad13ba24495129cfb4ed30437ff2f568"]},{"address":"0xa3bdc3a46a0633f999b4c39a7fb046ca2ef4bb56","storageKeys":[]},{"address":"0xdef1c0ded9bec7f1a1670819833240f027b25eff","storageKeys":["0x3a1eae4d9599b151de37596bc1e301e7833e536acda254c41c5aab51deef773d"]},{"address":"0x73ce7912501be775a693fb3a641eca8216b18b13","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000010","0xf1ee872a93f0bcc41554c3cc13352df48d22fbec7e52ca0838f8a95ed01a36af","0x9c864eb1c0ae0c2a94d626fe1c5bb27f1cdf786e9b7ab9b920cac24e6f9bac9e","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000013","0x5c83d9320a9a25da893c14228f60de0a08c6b7bb94e4088eeee36c1b9a31c4a4","0x000000000000000000000000000000000000000000000000000000000000000d","0x0000000000000000000000000000000000000000000000000000000000000009","0x20de30300db9b2d46f45ef3798c883c649ebfb03953fa78198d91713f3132be2","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xbeb5fc579115071764c7423a4f12edde41f106ed","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x59c3d094c6ec333e034b87c06687ec09523ad6a4","storageKeys":[]},{"address":"0x1111111254eeb25477b68fb85ed929f73a960582","storageKeys":["0x0aadf2db6fca536de50e90d97a6a85e01ee4c4ff8a1974983c2544501ddc7ca9","0x247c4e6195624093a7a8590fd248942c82272daada824ddf523e707ae2803d35"]},{"address":"0xfd1b0b0dfa524e1fd42e7d51155a663c581bbd50","storageKeys":["0xbe7b1a35084cd94eb4d705df422d5412a65d887389aa168d25cd230c4de1b1e7","0x4dd384764467310a8e5128f2764e8a602cd3764587787b25167a398b4a119aac","0x610ae570b1cd23187060b0ec5f4b9b26c9751aac1fc0d0262069fe0fe078950e","0x905cdb2cb03101b7dddf48539e83defe54ac11a72ed532de2b27f6b8a075a3e7","0xef091d3d50de21841ab3c34409f68b85c5b6d45b1d8d8120e7eda35cc6a344d3","0x745ed5b1948fbd0ea21808905aedc22c517a97cb13cccae4dcfa3fe8e13ec123","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x7c93f00fa8b6c4bdf9a5522397d7a2da851f0f116d9b2f671647b644f29cee52"]},{"address":"0x101816545f6bd2b1076434b54383a1e633390a2e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000013","0xe79659174f0e98bff6608b143bffe9e550a81c916b80b13dd1629854a3d05fec","0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7ca","0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7c8","0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7c7","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000e"]},{"address":"0x8d89ded148b45c614e99feefb5e3188a68525b13","storageKeys":[]},{"address":"0x16148e9f25a7c2734300076d1c8a4a0d07488476","storageKeys":[]},{"address":"0x9696f59e4d72e237be84ffd425dcad154bf96976","storageKeys":[]},{"address":"0x04fa0d235c4abf4bcf4787af4cf447de572ef828","storageKeys":["0x13733b87b551239fe69dfc361043656f3dc738db269c9a6210843dab83573d06","0x24ca134ee0c2cfe5fa33be5ab40db8015b20180968def7d18deae10df415b1f8","0x3738db18fcb9a438acf8fc0a9f828c796d7dd18649dc51d5ffcf024243f2dc7d","0x8be2f68b471b48e2f90e08b79fe8be6f21e9728e70d45f813ecb985fec2bb6ca","0xbc4214256baf8d9c76f98527edd86529d559f768db681d939a43af13ce4262b2","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000004","0x72934175c798a2231129645869558a3394847a3e8f7f15a18a1e3f1662de2acb","0xe610be3974a01d5ed2093d35419d8c21433990d629b82a756d0fb926d3c8dcad","0x0a140afd01c5321d1a8306c0f87b6ad56641579c41b3f4d85e8a17681ecabd3a","0x3024da6f1acc08bfe7ae5d0fae71112f7e8212d8078e2a42d2f289f8c3c56076","0xfd56229c5079180e92e3fa1a40a90fbb4c2a0b668745960f0a95e05ebce4ebe8","0xc269910e79664bb02e4ea6b58a6546a8f30ea3f5840ed79d34d06b85ebddd776","0xb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b829","0xe1b98cdf9aca3b3fb222ce6d5a9e87a0c28932879c7a8e790308b5476ce78af6","0xb78d313b486c553bb5534c286e75bb02d9f18ed8dfd40b69dfbf64a39d18de09","0x8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd225","0x676287bf18d924c668f2db8bd8f053faadd336727c98ba8556287d53ecb4534d"]},{"address":"0x2a48dbf6347ea5cdc906b4bb6a2ed27969241cde","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x9c04773acff4c5c42718bd0120c72761f458e43068a3961eb935577d1ed4effb","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xb519b3c897352da02430b604b23a88e3d32e3af8","storageKeys":[]},{"address":"0xf7c4d7dcec2c09a15f2db5831d6d25eaef0a296c","storageKeys":["0x45c6b4115ae224b6ca90d12c25fa10d30fcb340e95d7e0ae83848f440e71ef3a","0x22892b2751e0eb3846621cbc93a999e40fbf90608f5d3ac4793f3f92eccbe5e7"]},{"address":"0xae719cc3029f2845d62a203bb0f1076b8d735f4e","storageKeys":[]},{"address":"0x8d501afb7dd7dada424b8c1f331b5909e44a043f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000003","0x000000000000000000000000000000000000000000000000000000000000000b","0xd001bce389e759dcb85809c4bde26aebcbf76af4272ad2454ebc279f5cc112d9","0xcae26c307b7798040b1f63dd0b43b5954bc1e3a6939c384ffd591cbddbda4d88","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000004","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x0616189d9a6c609ccbdc74fec3853146795efed3","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0d5d46459b18070cb8e066fc80a53bae9eeb044135fd5bedc067e6ffd350bc11","0x0000000000000000000000000000000000000000000000000000000000000000","0x0d5d46459b18070cb8e066fc80a53bae9eeb044135fd5bedc067e6ffd350bc10","0x4a6f485c1c32cc07b41a962ff745e1d2a15f32520f92181d93f06ac057458486","0x0d5d46459b18070cb8e066fc80a53bae9eeb044135fd5bedc067e6ffd350bc12","0x0d5d46459b18070cb8e066fc80a53bae9eeb044135fd5bedc067e6ffd350bc13","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x2c2ad2284c5785612a0894b41ac30ca68c94e224","storageKeys":[]},{"address":"0x7803f198a2137ca066c131c4b92e98b36acb369f","storageKeys":[]},{"address":"0xe720925a74c06c4848e625dd77e9cb954dfd35fa","storageKeys":[]},{"address":"0x27899fface558bde9f284ba5c8c91ec79ee60fd6","storageKeys":[]},{"address":"0x704ad8d95c12d7fea531738faa94402725acb035","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0xa2cd3d43c775978a96bdbf12d733d5a1ed94fb18","storageKeys":["0xd13801343f04a57447ba35d4f2a09faad53876c310e963ab4f7582b86f985dc3","0xba30dc5a9939ac435e588b9a107c6dd56e3b72c83e07163c908ae6e4fb2916c5","0xc0402124c9e521c97cac829e241ca3421d80eca83c5557a8fa1d03abc22f1d0f","0x0029f02f4a38a19f13f1161d4bcf375de3cc85205fa12a7e5fc45ff4884fd043"]},{"address":"0x902f09715b6303d4173037652fa7377e5b98089e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000034","0xf1a448c7929f6976c2b6a36a3923f20e67fe47e9b765b1b7590175f0d9cadf48","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000066","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x03fc94d98d2a3fd1034dbab9bac65dba00e65add","storageKeys":[]},{"address":"0x229047fed2591dbec1ef1118d64f7af3db9eb290","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000069"]},{"address":"0xe13de9c9c99d1df6264359003d9a7d4a53a2301e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f","0x91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7"]},{"address":"0xc05d18f2a0bf0a5022bb67d0a01052f08898c0bc","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000b","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49","0xde4d41cd88449233905508a97d5475593ca10b8c324a8bcad067de8469cad567","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000008","0x26e22803a4d02724c13feb9acde49cff4cb05832bd0d8a6c6ae88ad94e2f9c85","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x734493c574d5ca1fc83e692f456bc8cefd858b98","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0xe8d1a4785a462e26e2f384fb5e72b2e8e2ad65084cb56d0498c24602348e3ad7"]},{"address":"0x2c169dfe5fbba12957bdd0ba47d9cedbfe260ca7","storageKeys":[]},{"address":"0xb2492e97a68a6e4b9e9a11b99f6c42e5accd38c7","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x19a81490d673d368fe5c55b8e02dd55172f1c31bf9b3eed55bba32b49de9e968","0xb39d4d188fc34dee54ecc868995a823481767836a4104387c6b44838cc23e9e0","0xb99ad5bcf924137d1f756353de1e34954e06e84d51e073478fa1c8df646edf42","0x6d74ea261bae1ad853805977db27674d737cc5831788f9ed8a4be9871099f7d7"]},{"address":"0x4d73adb72bc3dd368966edd0f0b2148401a178e2","storageKeys":["0x3992089ebb373af474827e29235481b53220e357b2c3694f28c7aedc399f7635","0xf3edfe273c30a9843d5009e9570b0e255a9f7de867f544e3dbc0ca77e41ad3df","0x67c6e6213cdfa6a2839937a2f5fa621ea4bd452e6ae9a72871e284700fe42cfc","0x6035be4f436522460885881708418a1d5fb63f95fbf41615678f28b29fc4656f","0x6035be4f436522460885881708418a1d5fb63f95fbf41615678f28b29fc46570","0xf82a8c2498f1bfb042f03a1990767e231fc2aac0edb10a0d5d5ad150bb2b5ee6","0xf82a8c2498f1bfb042f03a1990767e231fc2aac0edb10a0d5d5ad150bb2b5ee7","0x12cb41e0d9174da94bd5172ad2999f8be62d47f06a92f3d3fd273c9ae1f769be"]},{"address":"0x48e118fede6c0f6c4ff6130038179309946f76be","storageKeys":[]},{"address":"0x21a31ee1afc51d94c2efccaa2092ad1028285549","storageKeys":[]},{"address":"0x365f270ec430c30cde4d32439a4cee7bee8970d7","storageKeys":[]},{"address":"0xef813400a2df5e10ac505ac6eaac015fc0dd3809","storageKeys":[]},{"address":"0x2c937e3b0ea4198303d85ae11e4ac5fe3181c990","storageKeys":[]},{"address":"0x397ff1542f962076d0bfe58ea045ffa2d347aca0","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x1d1ca2dc773405a20db9845e09665b38e1951c09","storageKeys":[]},{"address":"0x794f95f2215b66146392576fc703dba61b84ff28","storageKeys":[]},{"address":"0xedd983cd14544a2ee67ccaea588b7388d08c73ce","storageKeys":[]},{"address":"0x737e678d0f81acee1c98adc5b3576c1215bc6d1f","storageKeys":[]},{"address":"0xeee5d2ad0623ad48a42664dff9c5d80b1815accd","storageKeys":[]},{"address":"0xe8346d6f3bceeedba26b45a6fd760ae09043fcfa","storageKeys":[]},{"address":"0xc512fc3dde2def3ebb6be5872459bd5522ac16f8","storageKeys":[]},{"address":"0xc0c293ce456ff0ed870add98a0828dd4d2903dbf","storageKeys":["0x2f368158caf5f7342fca40191c5b1c8ef2fb3ac9094920df765f94e8e8b160fe","0x188b9a5b8b50cbf331ea3e3c2d91372114a3cce9a3cc431ad08a4cf303ffe2ea","0xc048b29bff761a20dcccc05ff4666649bffd79200caf98583ea82c6dcce85859"]},{"address":"0xa8948e3495dc3095e8b5c160596b72ea4ebbe340","storageKeys":[]},{"address":"0xc08fb884576cc89957e9058ef11587c468c2952f","storageKeys":[]},{"address":"0x881d40237659c251811cec9c364ef91dc08d300c","storageKeys":["0xc03a2fe2012f4ccb13e695ea6f277edbfd1269ef86188b2c93b8db9f08993965","0xfa249ed8fe5294c7585039d570c3e4672d438c9a55814db1ddfe4276df580c16","0xfa249ed8fe5294c7585039d570c3e4672d438c9a55814db1ddfe4276df580c17","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0xc03a2fe2012f4ccb13e695ea6f277edbfd1269ef86188b2c93b8db9f08993964"]},{"address":"0x5c2ab5dc71ced4d3a07f048dc9c068dfd4fc4d53","storageKeys":[]},{"address":"0x8542de66e82e57145927bcb258a20936cc319fff","storageKeys":[]},{"address":"0xf3268a4311f385dc88754b70be491c12aac0772a","storageKeys":[]},{"address":"0x926994574f4a14c276cb652ff8bc2427ba3e89b3","storageKeys":[]},{"address":"0x9e20d852f6f3fb17f29b6b3c9f589f128cda17f8","storageKeys":[]},{"address":"0x3606b0d9c84224892c7407d4e8dcfd7e9e2126a2","storageKeys":[]},{"address":"0x5b14c0585ba86337b04aa0f9c565f2e6a25d26a2","storageKeys":[]},{"address":"0x0363b1bc04365087ef6e1360e35872b60187a013","storageKeys":[]},{"address":"0x64bc2ca1be492be7185faa2c8835d9b824c8a194","storageKeys":["0xd959113c855a32062124451916b1b3749a2ba7992f23428e8155c74aee25d362","0xc5f5452c1f3e2c4eef9663717815e81fd9c59fa2db7b173ca53a7f4849bd5e53"]},{"address":"0x3e44cce94e0860103b2d5cf8f50d5bae3035e6ae","storageKeys":[]},{"address":"0x2c36080c8f720f04e4954530845a2bb7e71b547b","storageKeys":[]},{"address":"0x94a6c202ecd1f80d652eda2fb5704718f32bb887","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0xa2e028f64686e726559fe8b69d2f09a291fadcd3","storageKeys":[]},{"address":"0x5d18b30ac9f5e8d6b21a4b783d95fecc8b3c09c6","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0x4d808aa1156367090ea4dcf94feb6d1ba95c7fb6","storageKeys":[]},{"address":"0x4d224452801aced8b2f0aebe155379bb5d594381","storageKeys":["0x0b15e06596286ad8a4d9587894507f4a5ac70ee1d8dd6dd4b21859ee871cbf5f","0xdc62bb0c783812945ded321a5e0534d20f5ffd176b51dcf8784084556c7998c7"]},{"address":"0xc276a973f74d96370bf9d73d02ebf4d7129ab6fa","storageKeys":[]},{"address":"0xb34e04184ff4b3d7d684d33664a06dd4385fdba8","storageKeys":[]},{"address":"0x39778bc77bd7a9456655b19fd4c5d0bf2071104e","storageKeys":[]},{"address":"0x9a47f3289794e9bbc6a3c571f6d96ad4e7baed16","storageKeys":[]},{"address":"0x66e092fd00c4e4eb5bd20f5392c1902d738ae7bc","storageKeys":[]},{"address":"0x28a55488fef40005309e2da0040dbe9d300a64ab","storageKeys":[]},{"address":"0x001b6450083e531a5a7bf310bd2c1af4247e23d4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0x10fc50e04e90d5e7d249bab20a2c9f841e76c685","storageKeys":[]},{"address":"0xa37048d233b28e62b6f76b034fabb3b0da50e224","storageKeys":[]},{"address":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","storageKeys":[]},{"address":"0x88e76c9311ab60b60c66b373ccdde8d97a56f23b","storageKeys":[]},{"address":"0xad57d3d214ea03b61695c25c770b227b0fe4286e","storageKeys":[]},{"address":"0x2abf02c9b900cd4469a546323cdd3c0b5ece2370","storageKeys":[]},{"address":"0xcab398aa7ad93de007b7644dccc8f04cb9bb8b76","storageKeys":[]},{"address":"0x42eefb43bde2fd105deaba62bb5d5797cc1c553e","storageKeys":[]},{"address":"0xee54c5c1aae9d4384e9087d54775466556d3a80a","storageKeys":[]},{"address":"0x4c396fe2c3fd8b1d4c9b3f7d3cf5c42f51ba540b","storageKeys":[]},{"address":"0xfb8785fb3c50137aad92be8e04273dc2387dd0c3","storageKeys":[]},{"address":"0xa88800cd213da5ae406ce248380802bd53b47647","storageKeys":[]},{"address":"0xfda68f66824ef2695df85a5aaac94097587d2893","storageKeys":[]},{"address":"0x8846b8d16182b8b6cac9db3b224eb6e9a5d552ce","storageKeys":[]},{"address":"0x5a3e6a77ba2f983ec0d371ea3b475f8bc0811ad5","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000f","0xda1d2ef2004cd67c9dacd31a73f4c1ab5507274466e34bb976bdc970fc028169","0x41d90688a66d73ff62f5c0a155e7ab5ff005208172c6e57c8d5fdf69358b9484","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000008","0xc7e18232153762aed081738e249e6afaae89de63b760316fb909e54bd2a2347b","0x6a71df0dd4d74b17a1b465477dd0e3f2ce60fb2ae8492cb46457e1d679c2edc5","0xc5930a883fe3375c1c4023784161a76a191aba71d27d4d3756fd9d20dc568656","0x7be7378a6b0bfcd8a7315987d51dc5a7af8c5fea9aa83946a2a587a63f00af79","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000000d"]},{"address":"0x75dd42f3456f3b2c5415cd6addc4be1c22a18d29","storageKeys":[]},{"address":"0xdc76a2de1861ea49e8b41a1de1e461085e8f369f","storageKeys":["0x465d7ac783172a39f3c7b08b93c0ffc6516e5717f34505d8ef999b7ad46536ef","0x85422a05b517b2bd172cbfdfc466ff6292c74702c793662d0d677803cea08eb5","0x7078e7408de37c8c82999e0fc2ebdc6353325fbe0edbae26d548329e3b013744","0x3da4bcdbf0127c841c314bab77b6ab81bc2ca5ff19aab6760b80d48bb4e83fe7","0x89a3b2095ee230d9f0e79c899f31baa7ddaf8176dde99d1810ea520d9617185f","0x5ed9cda8cf25e7a744056e2554037264441308d49194a477bbc28dc5dc0ce948","0x8116e8584fe28562f1b736db452a9cd8c2d9bab7659baba875271fd1aad9343f","0x4817e102ce7f83b539a79abb7c3b870b71a00bd7411e8d6d898827440c9211ad","0x0c94fa2ba2b98ee79f7b8bd7e4ab4a6eec3c4d32c525e23e1e951b7c3f03aa37","0x6cfcf12c78d59cff139d0d47177da3b8849213104d91deaf1a6a185ca11d6a7c","0x89a3b2095ee230d9f0e79c899f31baa7ddaf8176dde99d1810ea520d9617185e","0x9dab77887980ea2879cedd380653e390b9c999f9d9e011cc7c7c63378d863fdf"]},{"address":"0x19029459beaa122d4c206c1844b3a4a97368da50","storageKeys":[]},{"address":"0x28ca9caae31602d0312ebf6466c9dd57fca5da93","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xe91cbc483a8fda6bc377ad8b8c717f386a93d349","storageKeys":[]},{"address":"0x7d4456639d814f2734cc935a996ecb2f1f7d22f4","storageKeys":[]},{"address":"0x8731d54e9d02c286767d56ac03e8037c07e01e98","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x6cb3ee90c50a38a0e4662bb7e7e6e40b91361bf6","storageKeys":["0x438f98f7726bafb53c477d8292ea370c36a1555d42a74daa95f658eb8e9b504d"]},{"address":"0x00afe08fb19d84d6848534c2bd507f8de9a3cf44","storageKeys":[]},{"address":"0x004395edb43efca9885cedad51ec9faf93bd34ac","storageKeys":["0xc44d33b83b9dd4c2daf0c164d65f2ffc4b1a6207bcacd59f30573cb83b663516","0x0000000000000000000000000000000000000000000000000000000000000004","0xc263c1bdfecb4444976ae0f8edfe027a46b8fac9fbd4c30c5adb1b2f989a3b7a","0x9cbddc2cdcd13259bc5c2c8559aa17f6cd22563778c0f4612ff13886d3421a22","0xc44d33b83b9dd4c2daf0c164d65f2ffc4b1a6207bcacd59f30573cb83b663517","0x0000000000000000000000000000000000000000000000000000000000000005","0xb2927a453ad14a2fd9227c9a993abf2bd2f43d6509080db34052f3f7122bd434","0x68219fc1f192003d086d865dee884d0168e4cb4447d2e50044e26eea64fd6451","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7f1","0xac46e77568366edc018ad4c2dbe996375f3537c428db16aab36a621e295000bf","0x5b00dc699387f37d4d693423bd46329515a394307bcf2d8ef243a16f09edad92","0xc263c1bdfecb4444976ae0f8edfe027a46b8fac9fbd4c30c5adb1b2f989a3b7d","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000003","0x9cbddc2cdcd13259bc5c2c8559aa17f6cd22563778c0f4612ff13886d3421a24","0xc263c1bdfecb4444976ae0f8edfe027a46b8fac9fbd4c30c5adb1b2f989a3b7c"]},{"address":"0x44d1a035ce4595514742b655f7635fc8e5e7b2b5","storageKeys":[]},{"address":"0xa70218d2984ee16d9fab4c6c5b84fc1119a207a0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0xc5565b4848f61471e5fd4c47f82c8e8d26b7ff2e","storageKeys":[]},{"address":"0x40c639fb745f2372e1d50d6551c77c64ba8468c4","storageKeys":["0x26d0b493d712c49dae5a972695792eed0125d4453c4f72be83083526091bd70a"]},{"address":"0x4f244fcaff67a2f98eaec20a44caf079a7f7a1d4","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0","storageKeys":["0xbc3269c3ddeb063124d8c8f40c383f40b2d3212d819cd058041d83e583892d9a","0x0000000000000000000000000000000000000000000000000000000000000004","0x356ea57d585b4c2292ee2a39c9da213499f25d18b4fba5671c7bc01208e40e2e"]},{"address":"0x23445c63feef8d85956dc0f19ade87606d0e19a9","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000006b","0xccae37334cfdf21ebdde223db203176e19543f7bdd940a2a2f74aa135491b1c3","0x0000000000000000000000000000000000000000000000000000000000000067","0x0000000000000000000000000000000000000000000000000000000000000066","0x000000000000000000000000000000000000000000000000000000000000006e","0xccae37334cfdf21ebdde223db203176e19543f7bdd940a2a2f74aa135491b1c5","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6b2","0x000000000000000000000000000000000000000000000000000000000000006c","0x000000000000000000000000000000000000000000000000000000000000006a","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6af","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6b0","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6b1","0xccae37334cfdf21ebdde223db203176e19543f7bdd940a2a2f74aa135491b1c4"]},{"address":"0x66a7aa37ea714e0b8dd553f375104ea7d160b0b2","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000003a","0xa2999d817b6757290b50e8ecf3fa939673403dd35c97de392fdb343b4015cea0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000000","0x627ad858f81ada4b64a407c93c26dd2d4112cacee6b76ef7659c7b438a8571c7","0xdce51a3093e6535e1b8b1c48aaa3b93e739586ecad0f11e2c24b050bfd4958e3"]},{"address":"0x99200b7928c0daeb36eaff0e82d13cc99e2aff91","storageKeys":[]},{"address":"0x487e760473412ab725baa05b46c4fd875c53885d","storageKeys":[]},{"address":"0x51c72848c68a965f66fa7a88855f9f7784502a7f","storageKeys":["0xd9b0307fa55d3f0df7add0e3cd10f84b0c3fb1fb51bb8b0c5d800bb7766ef81a","0x4c0683ab4c053d4d4be5b510fb58b5b966150857c444fef442fa237f2a65f0cf","0x114d359ae2342a7870f7937a9edf9a0a84b8038646c812cff76e2f891cdd1cc8","0x0000000000000000000000000000000000000000000000000000000000000000","0xeb702a743cfd21101b4e3bd7a3ec8cf8d1ce01f39d4073c9dee5374b01201602","0x225c18aa2325375dcb4fe40ec758f929baa9bca6824ccf95326d09bbe960f620","0x2751eaf94d6c4011edece59f1a1fd921ef96d564fa55c0c6c55748c57e401220"]},{"address":"0xf89d7b9c864f589bbf53a82105107622b35eaa40","storageKeys":[]},{"address":"0x95c618f318b0806bb157a800d2d0fac8aecd40d1","storageKeys":[]},{"address":"0x0b266f7ed121004a7d1b098598a9275ba5851d2f","storageKeys":[]},{"address":"0x4734b1d4b2df58329da586b2841f47e6a29cadc3","storageKeys":[]},{"address":"0x641b0e25701f7aa5aa9eeb92119ad9067fcd4337","storageKeys":[]},{"address":"0x0d9bdd2d61a37bc074e59b2801f32deee01307e5","storageKeys":[]},{"address":"0x432466b2f2a076a23b236275c2e8d7b17d11b83a","storageKeys":[]},{"address":"0xb2bd775af26ab59542dc3c9438771021af613787","storageKeys":[]},{"address":"0x65edfb436d2a51019db55b648e7a31f688c8873f","storageKeys":[]},{"address":"0x357fc4c94d03ff6bcd3c05d63752eafc1d123c51","storageKeys":[]},{"address":"0x4b2e310b10c9e7cd048c7378c24be1f806659d4f","storageKeys":[]},{"address":"0x8eb2283f696f2a130134d46e28d3528e19e16868","storageKeys":[]},{"address":"0xde1fcfb0851916ca5101820a69b13a4e276bd81f","storageKeys":["0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e"]},{"address":"0x74de5d4fcbf63e00296fd95d33236b9794016631","storageKeys":[]},{"address":"0x91813c35e2c445172e1c73a7d865fc6f0da757c0","storageKeys":[]},{"address":"0x9a406ba5a99983250fd663947b3c968d387ce5cd","storageKeys":[]},{"address":"0x96612d11511d57dba6705d43381dbbf6662783eb","storageKeys":[]},{"address":"0x0c0905e0f5a8e4aff6518d5aa846a584c55f29d3","storageKeys":[]},{"address":"0xdac17f958d2ee523a2206206994597c13d831ec7","storageKeys":["0xb94d3a802909d8ba7794aa1899765bf3ac344147d7f5b927204c7a21059035e8","0x463ee7887f13fef1e00bc64d7ce21e57d68d0910423f85fb15cae8de3cfd5773","0x0b08fc3f0434c8553b79a5ca553e7a5ee516be2473a9d80c905584edb84a07a7","0x50f9793c6bbe49e15770c685f695546f185f92d4e28e083b080ea45164449511","0x091d489b479defe4ee8bde0c1bde248fc376aa80edf1f0d4d675b492a9a86c5e","0xe2645178dc09f2536bfd5f3dc3caa1e62df334e8886e10f0d8a0dbd82e311067","0xa56f92e28cd220d26f427b7f63f04ca2f4d10cdaa2cacfadf80731843f3361b8","0xea5aa12535e96729fec7dfd4c696b841917357d939364bd0be793a5d9e820240","0x8aa877cde3eeb8018045f920100f05364db1f628c30101c0ce65049b1ed89b7a","0x99c09ff3653ad8fc68e5dc867a9606ced7b21e67b7c10ec12e573c1f6879f2f4","0x7c084f6f66f1854b5ac1915798e31bad160857bb415bd586c5b093ebc7437f78","0x8032bbaad8dc69cb68b83388864605a6aa8ca1caae933b253bd93051aa37ad0b","0xbc0172e3ae7fad9fe1a25f72a5777dca9415558e3e4ea77708b0b2e0ce3ad124","0x639b0fad8cb3c3f822c7f87d4faffe54b8e4515394bf43d17915df9c544359d8","0xa4e4e13b16c5e5f85b46cb3a14a8ee3704e2a08a82bdb4983dc1bbbd9d2eb0e4","0xd6c94f6f6a0337358f71a56c17b2b48cb058cce281d0f8786819cd6b0b5b23e9","0x000000000000000000000000000000000000000000000000000000000000000a","0x524bfcec436c05b97c4fa0a4b01bdd00880f509c00db106f1fdba5574a8c1526","0x76d4fde25ddbb4d63011fbe3ae5aa7058226f7a0de67dfd2cf14b985046686e9","0x4f4c74f6348c0280149975422a172ee2d060f8f0cce33d4f0176881196b96405","0x2602e587332129fa5cfa1f1066f1d830c48565635f39274f53a5ed3aa06bba00","0xea487720912ff72f1c7a0a3afcb18dee86fdffb3c64005ade59c7b3fe9cc3331","0x61e2f2aaa624d5b791049819407ee6b1855eef42b6c65f2ced7e18970b8f990b","0xf38557e6b32b113cb5dff0c8b1f59b8d2be4631339086855c0bb81668b7aed62","0x3c0eeb53bb4a949666a6fffc7d0dba2b5390096ad885ae03ae5acb4c8a670040","0xf7edf61f84a59bfe6ce2a1e55b6aacd4ec8942e76fa69e3ede4fd1205a8fa411","0xf2d7f17f727fb799761e62421b15e5818df200b9ba6e75fc461980f795933500","0xa3b88bef8df2f6096822c988ffd14e98b0513d518130e72efa1debea259cbf43","0x24446e6ca9a7faa38e296162d09a4617ca57a80873d09753e15514f5ed2c66db","0xce4b548783a83143173f094addc3554cd447b462fa6dc74b87a90ebd6d0e297b","0x52ceba99244ba7e8ddb9571c665ba00ff09241b515949ab9a5ac611cf48ccfec","0x0ca0b0b913758dd1c61fedb942be0cae953c801aa0e1b8bef365ef30c7c5a242","0x0000000000000000000000000000000000000000000000000000000000000000","0x5af3f7574277932277b45651bd32bb971885ec8919cc013f19bb85952f6322ce","0x6ce4f048e20fbb08aaad71b12837a5065be2176721bc4a8da687b0f6b0e75672","0x74d6fb32bf6d388595c066c50eabed0d603dfc93335c385f65f9fb6b9f1a650b","0x0a2899f983353d31758d7dc1b242eafdfd6645fea4842fbab8a68ad7e79074ff","0x0b7f78333e762cdbdb5b88919ab144709571c8dafd30dec6df1a3399681ef653","0x5293860696a43f1881480a9a7accfad70c337fd6f977188c0bac2f6b4a923489","0xa20991fd0d3cf9876d36ee967ad5b60f0d9c21e3b041e4075141db45b44e84f2","0x491bc81e51a6599536925067d0634f6f48192a400b760533c9c75bebde75f34d","0x65934df9ae2a47d185255568f5b2f7f3a268413fea48d027d0115faf662502fd","0xd90df89adf4af9ef50e7dc588e78158379d6c2506c43abd84e7aea17714300d3","0x598b6ee0002d9d4a8300304bffa380eda0e326ebf2050e02fd81c936a04410c9","0xe1ac65459475a1d54a98840c1c2dc6376220be17eb7de834484d965b8173d37e","0x169228ca33ea854d54aa1e506e59ec687f618a41074f5f5de937a0e9c6343e5a","0x7c4e098c948ec3269c2499f3c1ca2df8a8348bb80ea6dfc5e9c519e65868c2c7","0x6ca1df6128cc356444c61703d8ef46aa5e6b17f16229c29f959e332bfabd81fd","0x0d09ee3100cbdab7de1cee1ab4b146dd7f0b1a0c94dea9e0758034b5187d5afb","0x3ea2f5f0971ea7c3b4f4a83ca57c584acfd4078a92e93c71b0dab7bd85ffaa94","0x0000000000000000000000000000000000000000000000000000000000000003","0xde69528ead73b65ca315efa39a6c4f0a2128f0ae6923a343f8d07418bd789772","0x0000000000000000000000000000000000000000000000000000000000000004","0xbba7fd4cc0839b814814c66213fdb2c8e15008e88fae54529c8c2ca829f2ca34","0x012a946a7f064f4092e1986c77163f655126183f5ff37183f7ed309de37e1330","0xba7c6a1a48c6185a43dcd3b940e965065db14177dfa070ccc2afaac410cd40c3","0xb66babf585d8eb66a33c07a9b5c5a742a1e27d3d057459d2f7aa84b206963780","0x18291ed68e9e283be7c714b0c68b9eb6079d24bbc16d404151fb28732f6ef7fa","0xf94b05ba7d0a6aa6692eecf3cf30c6ca5d527c3e5fd03d7081ff14e4910ec033","0x1996a27e35dd48cf7c79df72cbd6816b8512ca30c65003d522ca7f4bb7677157","0x804b6fcd955e1fb53f6d857e65091231e1ee528bdca6a5e706af3beb04eaab46","0x728e667887a5cc2d5b14fa273c88e60fabfef07301595452ac58e2cf33e7f947","0x2f1a3d45e67b8c52c3acca7d1bfdad222001d8006aa3756a7f95b5f0cbde8105","0x5df3f91ed18f909c4d07ce1a42fbd12c9da6ff38e6b9c282bfbff87885780f3b","0x63c67feb137ca46defeca012d6fac0f07183a3c9305bb33bcab94249ba4e9bb3","0x5aa816acee489dbd28481f928ed59a8c7539f7cc858ee747d79d9d15f965b8db","0xe2a6e540910470f9f60df559ae23cd602a17e1b84096366c0d7182c4ef64d5e1","0x126732c8b21370b25554f622a97d9151ea6ba00fa849e8f80c6cb673d6c405de","0xd537e497f03d2e7b7be3fe1b91f2e6a82db8a644d9f01f8293ed168e7d3f0ea2","0x7ec0f11abffe15016fb3b4988e608b041271cab72fa76b9d7f69e4816c1da758","0xc925f3253859b1469742700f71db14102510c50795c3a8e520f1992c4dfc3e74","0x5bb96862696c2d0cea055c97d882c1aea2e43ff2b77ddbff047472588e06de3f","0xe5865273b58d40c0de7333def44743042321ad4b7a68c869d6f85e01d638be43","0x482113db1169a2ee62c7bb047ba8deda7c9e44522ba01794450e387cf7046f5f","0x664d40707f8afc46cd94b6c93827dd49b3334670c6489db26eae2e0989ebb241","0x8edcc431145fd8559e4201846d67d86e143885485122da50a6e03c19c8c6bd9e","0x6aacad51e818fe1e62873dd3be752ab690963303332c12c8177fc179d13f3619","0x61806a02d55d0d0c7620a27274300f3809bdab323ae2059c88e73898fec468f4","0xff2acf1040b8375aae9ffa186abdb003c9aec45e162f5b564ab4bc02ff148678","0xf8c7857bd34ab7d393fcf8352ec460e4aa9c62b2100461db15846828f9fe93e0","0xad221574ad07edad4116f98f6006783dc33e873594089aa153bfa7c8d15aba39","0x0bcf518c91f6993f4d15cf7b8ca6c08d25dde512cbd6c6e5da859f40ddbd3992","0xe8764658090bf69c19426b599b2118f8d447011f05ef42efb1daa1a60c4d1c5b","0xf991184810abaacd6ee89d436306af648330a6b462c169e9594a6e9a392e9fc4","0x408f9d031bcb6511c186d08a0c8662c0183852777c8335bc739a78e3bdf8ba4f","0x50283d144f443148b76d2ca9e13f5d0828507d484c47a49dd0da2011582dcf02","0x78b35599871be95768b2fdfaf9293a4491ecdc8ef25b872ee404fa1e441436e0","0xb4950c67879e41f6029fd92d0b43654ad0931138f77108819b6a255663d20867","0xadd61ab0bd281b5a890240c5245c652e911472ffb277a671b5537796713bedab"]},{"address":"0xe28b3b32b6c345a34ff64674606124dd5aceca30","storageKeys":["0xb787223be3bc8ece62cd060cbb37243ae4b639a954a79701ede142b807c1768b","0x3a93b8d547a55b9f57e9b11b821bf30b45e952fe28b30d4c837a73ef19c1868d"]},{"address":"0x22c3f74d4aa7c7e11a7637d589026aa85c7af88a","storageKeys":["0xdc1c6005e746da28e58b87931af8677fde435af96c7e7b92454209412b6e7f22"]},{"address":"0x24449c139f8436d23389bd652f614fc98ddede5f","storageKeys":[]},{"address":"0x72e2f4830b9e45d52f80ac08cb2bec0fef72ed9c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0xf7f69682f9824f4882eeb5c155140ea75b5429ce47c66acc542cb334557ba4b3","0xa38585600e63da50178a690d7b1c3eca940a9b9a9bdb8e2228295b3c2c60964d","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xbfb731cd36d26c2a7287716de857e4380c73a64a","storageKeys":[]},{"address":"0x23a399a7bbba31a61eb0620f1e8b6f250a5b76de","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xd4bc3e8658619d66b3bbac0ffc15fa14d5936beb","storageKeys":[]},{"address":"0xaaef4d5ae6ea726f542033ddd8e0a1df6b189794","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000f","0x4babea82d9ff2f1ff4605a063a65f6a65bf2a9b78b2730d5cef369b8cd266c4e","0xe1970f313090c363d4bd2b7a159692748257db23537f8a4b6a87343f790486a7","0x0000000000000000000000000000000000000000000000000000000000000010","0x0371ae17dc7beeacdb9debe8c1d45e37d9a8d70fc55432643db34fc59df442e8","0x67a3cfa888e10d31abe6765ebfba98305cc3fdedabd697e3affb77aeb6c7f0c2","0x38feda9d83502e3e0eae49a97ce47789c883a8fb6ac92795e1d6a6f3a451b323","0xbbcfdfea5791c371b711c6f268d09b4c37483b981b0f807985dd4dfd751c4433","0xceef804a006c10f9dbafe22f97acc7148e36c12470a1806b4c84cd894b34d8e3","0x90cc84b6ceb3f6b7c0af01b450450575b7324e9b7514b5d967abf133317e9beb","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000e","0xef0cff642251177c978d2f3681c20a5d8b9ac0e657784f515a532fafae822311","0x8a8eadfe63f23cc559e138211d26abb1296d88c656e265d7ba85ff1a482bdb95","0x83757349e81da0589b26ed138effd0bc820a34e189080d49593bdca27853693b","0x629f20d8bfbe9a62bd05309ab8c8ad9929adea79f2545b8bcf91de7858d8b19e","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000006","0x7ed57cc193d9a313a98eecf2cabe713cdeb3edca396bc7af816685255fddf498","0x797ec894da4876bd82843785b38dfe17906d666aa843c775e9788afa0f1b0d75","0x29b49846dd9087c2bbc6eaecebfb05549be014c51b0c502d630e4ab5c4be164a","0xe075c011f49d5335fe70cd6afee6e9939f59f0e1ea0b9ee614f27260c07b9413","0x9403ef75687326de008d99f9c14ac928d9ee9aaa9cab1dafafca198a6c447168","0x6f5f85550f45e95f32dec22fa1fdf167afad8f03be18de4575a03035b829b9fd","0xbb36d8c5bb80aa6cdad8183b9be81d5376b3ac80bc5411844e76f65e5a192e89","0x4f6a9abee83357567821a17ca6ca7785bf31e7eef494aa0bec2f454e5014bac5","0xc599da84f8a71bb4479ac7d0cc74a30a73a43377eda837976d780f43f64b0466","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000013","0xe7bc46371b824185d2a151a2d41eb41f0ee72108cbd1aa51697e047c84430d9e","0x470679da08e7ca78ad517e9fbc3bde0f86c4b6a2d2c3a8e7eb7805d988863658","0xcf6a7519bafa2cd2a2b06d8afad9635d422adc4e9e42946aefe0ac4990cbbe62","0x769aa1674f7391a6da9106d6e57292a98a718eec4c60f832e8cf33395d97af92","0xb5b2b744a66bd48f53cfa7d9b059a4526924c5ab9631c4e5f214845b670ce3d8"]},{"address":"0x290a6a7460b308ee3f19023d2d00de604bcf5b42","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000073","0x0000000000000000000000000000000000000000000000000000000000000074","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x9b637a02e6f8cc8aa1e3935c0b27bde663b11428c7707039634076a3fb8a0c48"]},{"address":"0x2568e74ac4fbb5937193f64a8e747b8372b8d1e6","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49","0x1da56312bf8b55a61dcfc5483a4f56b6b64b3feb26c42098c296942970b75b4f","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000b","0xe075c011f49d5335fe70cd6afee6e9939f59f0e1ea0b9ee614f27260c07b9413"]},{"address":"0x023320e0c9ac45644c3305ce574360e901c7f582","storageKeys":[]},{"address":"0xa3c22370de5f9544f0c4de126b1e46ceadf0a51b","storageKeys":["0x5d67dba4fd845345daf6041cd6b7b7eee9513f8ce46109a49d888e98d856b39c","0x86f3b28d430c80bddd95b895179f09c5299b8b4426849a342808a23e67fe2bc2"]},{"address":"0x1f5075f3ebd7c952f7eb6315ff803664efa3a776","storageKeys":[]},{"address":"0xe9a9b6ce6ae2141ed7393a61e6caadc481780f77","storageKeys":[]},{"address":"0xfba175fe8169f08eb02239ca1b235a8e13415204","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000a","0x0c23adc4677200a008d9b1ed7ba6a8d8f75df3ad52ce546ad30de7b41f16691c","0x3bdbca05285fc70b92d87d8c7b9e489bf0787dc47751ba4fb70ff7a65e9bb3a2","0x0000000000000000000000000000000000000000000000000000000000000006","0x5084cdfdfedcb5071c22a51423ae0503c3699b7794a606630927b3b6f909ea55","0x0000000000000000000000000000000000000000000000000000000000000013","0xf50b9d92114a759045f9357d47a14b2813ba9358477bf552a161b1a1a78a56b7","0x5db07de476cc53fc066e2d0613dc897000ecdb0c8394e5e9d0336104e62e8a47","0xc79b01738e7032455f165925d40417d97708b3391c3de18d2599ee9d128bac33","0x000000000000000000000000000000000000000000000000000000000000000c","0x5255b339729aa577223ebd3d5654ba10aac13c1f5c7bf9e02b34befaf9d03bed","0xee722d724c89bf250dae10049726c7ead1476357b09d9efbec404caf9ea81e72","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000014","0xf2c535f78bbf70e8c137acb4e29e2f986545c919fc7214c8b5be774e28c99ce8","0x0502ced884590ffc4848ac60e566eb50480892e45331d4743b365bed83fb7911","0xe5de7dd0f6053f40e61149cfaa90debc011c6329782e917e70c1b6bb71feb4c5","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000011","0x46f25944edfa3c6d435108d19f6bec450dd3e2c6fe825395837a078ed83403f0"]},{"address":"0x1f41e42d0a9e3c0dd3ba15b527342783b43200a9","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x0291a94445d5c7372482f6c2b1f3ad145d43ce36e1c703848dd9dee9eb1d9200"]},{"address":"0xb113c6cf239f60d380359b762e95c13817275277","storageKeys":["0xac204596decfafc4e239289e76d499d6f82b17cb7a9019cd604e75f12f7bb96f","0xbcb1fa48d8cd1a8c2b27d56ec729913c854ebfb4568a9684779e81898cd306fa","0x0000000000000000000000000000000000000000000000000000000000000002","0xd2b080f22e7c8e771aab9a0935d6a81102a991b4daecd9698843c4bb2ad131fa","0xd5154ac1987598a8962ec88c36f664a2d3adfbb90522e7e9f119eafac1ce60c9"]},{"address":"0x4585fe77225b41b697c938b018e2ac67ac5a20c0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0xa00e9f45e9f0c328446d13a90db1b8ff531c4946ba6a4294a1ec03159cc44b19","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0xcda72070e455bb31c7690a170224ce43623d0b6f","storageKeys":["0x9cd24bcfbe8c9604b378cadf087a22ea52c82c63861ffb5b90c4a6a5f99594c0","0x321f5a21353f34bacf52f20e9ea1f561291b4ada01f3686d0e44a0c2fc4d45bc","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xec12166352a929db150b20ec5eab62817b9ecbcd49f6b61aa8545f0002016f6a","0x9cd24bcfbe8c9604b378cadf087a22ea52c82c63861ffb5b90c4a6a5f99594c1","0x0000000000000000000000000000000000000000000000000000000000000b87","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x9cd24bcfbe8c9604b378cadf087a22ea52c82c63861ffb5b90c4a6a5f99594c2","0x1b13ec3c3ba200b4b6f90dc0d5bc2382a99e2a9e56878a75e8e3536c69abb192","0x9cd24bcfbe8c9604b378cadf087a22ea52c82c63861ffb5b90c4a6a5f99594bb","0x9cd24bcfbe8c9604b378cadf087a22ea52c82c63861ffb5b90c4a6a5f99594bc"]},{"address":"0xa06735da049041eb523ccf0b8c3fb9d36216c646","storageKeys":["0x793d232013c3ca5798e03797eea9305d9686c1cf61bd11f0b7e11495d00b2a47","0xa4fe6305e95f4e6bc8ffb29c48c741fdccd4a3a825766f6851c0bb6a3c5a430e","0xd78816b6ea38002cabc906395bc302f691a26fbd2d47893700eb1b37ac974b2c","0x0000000000000000000000000000000000000000000000000000000000000004","0x7485129ff68052e4685c51d739003f4797fd13a79328917e65349efeeaeadb60","0x63d87a887046e0430be80fdeb014107d7198c879cbf2cddf39a6df195c86cb38","0x528e688a4c3f3a1be8003de8dfc03e4cf8b9a262436505f4bfe90e18c0676718","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002","0x7fddb37e508966bc079738b02a2e724203498db26deb50f7808dbefa9a3adc40","0xb3edd0d534d647cffdae9f1294f11ad21f3fcf2814bea44c92bbb8d384a57d9e","0x1707920804a6cbab161d9179b0477dcf9cbecbc16267d2333df6e79678ca0946","0x0000000000000000000000000000000000000000000000000000000000000000","0x1bdcb058d2b68f38fa607b48f9c45ae374d28f121439e045e6b2267532352b69","0x64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e","0xd9a4f05527f7bea5b7b09c5ef989acdc31959e831882764fcac5ea635f66a44b","0x2a4e0dcd0728ffee5645e8c1ac97f571875c267f7349831e4717361af185c290","0x0000000000000000000000000000000000000000000000000000000000000001","0x26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e2"]},{"address":"0xae45a8240147e6179ec7c9f92c5a18f9a97b3fca","storageKeys":[]},{"address":"0x61fc714059ed8b42f4c3e6953fae3a70e6750b04","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x9155bb1d5b63f924f399995f31f9c73f0a64e227","storageKeys":[]},{"address":"0xc662c410c0ecf747543f5ba90660f6abebd9c8c4","storageKeys":["0xb4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56","0x34eeebe9e8dc55f09826dd5222aa0cb400f6d739c369892fd57ce52bcf38ac6f","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fee","0x9162bc4a5f76b79aede25ee2ae7d2df0d7b1804f107c012968394639f46582fd","0x9354578088d44b2e97576feee286ef8ea3affb76bc44d5c83953b5c244404e44","0x67963652696f3a8e8976c8d0956f2afb2fdf053b99be7bf625d956fc88a52815","0x8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4","0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fed","0x04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec","0xa9b49f2ab6812143fff3c91a372accb361367e6e5b434648ca08c6e70052d4f0"]},{"address":"0x8d2f3ba53de0becd02a768ae47e7daea736d18d4","storageKeys":["0x6f8bcf3c6626aa1586082a13495eb44c5260b2d8c9d5e43b95d384d8a8f9a395","0x0000000000000000000000000000000000000000000000000000000000000018","0xf390c420848802b33b9f99d1225a1ca7b322b786e7fcc98d40f10e514ddabe3c","0x0000000000000000000000000000000000000000000000000000000000000016","0x0000000000000000000000000000000000000000000000000000000000000017","0x919f5b91115577eba5aaa294e02ee010103febab72e0acfdf86e731cfe7d8459","0x8099a7c98d55864bd35c264add872ea3f19e22975214f97a17a70556e5137c3a","0xd0bf1e1ef8ffbea13745e4759156e07241fa8e730b1883710471ca181099754a","0x27a6cae6e9962538c3d4b79c1d12dd6f2e3721ec8b78be8d2c59e2a9c726057b","0xea9bc4850ce4f000c76c6bb3582f56bce9edc52d6ee0e62bc6d2c1e184f17b35","0x0000000000000000000000000000000000000000000000000000000000000014","0x0000000000000000000000000000000000000000000000000000000000000015","0x0000000000000000000000000000000000000000000000000000000000000013","0x000000000000000000000000000000000000000000000000000000000000000a","0xf1d38e698d92a18fa7b264c40ce129d4f1eeb80503a4574860256fbd602e1a38","0x0000000000000000000000000000000000000000000000000000000000000008","0x69963df970e4dd66a99a5028555867b0e0181c9b10d2be93a1e7e427811ad29d","0x8fa2e85a1fd6db242883d22e20e8a625f9ff9a630de7620c08a0b5eeb7fe5f62","0x1030a40d1f2c4eb4844f485fb6114e972905b5322a47b6de6656d7b9de081741","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000019","0xfee8537133cc89145932ff516bbe7d949564980c75ffaaea974c37b1b8ecda1a","0x000000000000000000000000000000000000000000000000000000000000000e"]},{"address":"0x06d538690af257da524f25d0cd52fd85b1c2173e","storageKeys":["0x86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab"]},{"address":"0xe1b6ee8f63944ff8060f382e81c75900efd2a99b","storageKeys":[]},{"address":"0x7ac070f096c6e20931c3dc54f927446be232618b","storageKeys":[]},{"address":"0xdd5c39fac0969a44a5bd12a71feb7c041a6ef605","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0xf38081dfdf02e3ffc50aad06e4e2844f32f17b04fcae6b632a7977242c8e0838","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x314943e32733e14466843bc8e84553c66878e3b7","storageKeys":[]},{"address":"0xf5074a863cad4ae21b830227a9f67ac86388e0f2","storageKeys":[]},{"address":"0x25ace71c97b33cc4729cf772ae268934f7ab5fa1","storageKeys":["0x0ae0ec7fe2be5ad9ff4a2be6686fdb9afb8ff3e683e9a82ede75059805059d5d","0x453da090ce3606b5b38b21d12b645cde48a017a5b14a6e51116f2991c345cf3f","0x00000000000000000000000000000000000000000000000000000000000000cd"]},{"address":"0x80f0c1c49891dcfdd40b6e0f960f84e6042bcb6f","storageKeys":["0x87d4a730ab55b405e2aa166a5e0a7aed45490fff46ff8702405a03f521112569","0x5e1311bc10e92b49061bef2eba5d3a8415636c5c8d8191fafa1958d1b1bb532a","0x2d370fbe8d7a28ca31eb370beb2547de3d72c45be63abb68ec4b36d0ec83fd50"]},{"address":"0x02a569eea6f85736e2d63c59e60d27d075e75c33","storageKeys":[]},{"address":"0xd0660cd418a64a1d44e9214ad8e459324d8157f1","storageKeys":["0x09d21d1cd72ca28bedd89417af6d994496bfe9008fcbd4baa5057fdb98d2b087","0x5a9a65592d465ecc4faefacdbf705f81e52b932644911b826f5235921c7f6171","0x2f817ba00790e3f5f3a3b5bdb917cb076be4f4b22cfbec79c8100f8a385a94ba","0x9a64696c647da50bf4549e27138ef82e57fac968c5d52e3fd4e34156293ac990","0x7fc15735bce30b65adce5fe18ce41eb918382cc6528beff2e47d804c5db72ed5"]},{"address":"0x1f9090aae28b8a3dceadf281b0f12828e676c326","storageKeys":[]},{"address":"0x28c6c06298d514db089934071355e5743bf21d60","storageKeys":[]},{"address":"0xf9b30557afcf76ea82c04015d80057fa2147dfa9","storageKeys":[]},{"address":"0xcaa79bf8b1d00bf3d4f6dbec6221955871c04618","storageKeys":["0xeea18d0f317f5eeead59e52fdb0579a32b3480e2a13505417495a3dd19d38c04"]},{"address":"0x1c64785eb0153bec603d778690ad70e1ecf6dad8","storageKeys":[]},{"address":"0x71a30bbea64bf575255263b13047dfcc6b78711a","storageKeys":[]},{"address":"0x67bec0c19c0dc563a091d90f1bb12a8a15ebe532","storageKeys":[]},{"address":"0x8d4caed79b68cca8d11e3c46b473177a2f63fa0b","storageKeys":[]},{"address":"0x4150b9603bd87ae5c1aecdf4aa348699af1754da","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xe93685f3bba03016f02bd1828badd6195988d950","storageKeys":[]},{"address":"0x99c9fc46f92e8a1c0dec1b1747d010903e884be1","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x17265d8ea26a56c38018b8763994386ef5ae13c3","storageKeys":[]},{"address":"0xdd1eddb7202bc17dc2dfcc82e0db3f6c0e7c29aa","storageKeys":[]},{"address":"0x4ee94ef72fe26ca854afc548cc4eadf0a025c7ef","storageKeys":[]},{"address":"0x32db8f7f81c60e6405064d935b6e7bc80cb070d1","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000016","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000d","0x621b780129ea3a3dc49a0e938bf2cf1cc7a1c0257fe2f8975c782627300b4d66","0x0000000000000000000000000000000000000000000000000000000000000008","0x9f27954640f39ca87008025f8e187c67f1533585c3e42370266c12c3b5cc6d83","0xcae8c0dbe15f4d733e1c68bc7e9bd8f5f9eb86404d7b4bbc6a7884e8baa1d7a7","0x6902dcbce88cf7aa874bdd9eb97223fa0818ad50a29b5f6e1d3ef8a31dd84bd2","0x0b8c4d6fafeb15ddab17a2502202fc4a72dbc569b2135de949e00f66b3985021","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000018","0x000000000000000000000000000000000000000000000000000000000000000c","0xa8b9bcdd0fa5949554eac995d6e8dc7ebf2f1cc4012890e260d12d485e9fe542","0x9e8cd7a3b08c32589dabff2beb5439dcb6ad3582c9e719e70f69103c98133a7d","0x0000000000000000000000000000000000000000000000000000000000000015","0x0000000000000000000000000000000000000000000000000000000000000017","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","storageKeys":["0xfa48c8837c8864ae17298a10397a21e7b02b95d9a9badc68599e155bbefe565c","0x8201796ea791887e5c32d454659d5834426f3bcf8c72c57f49b1721da7ecb9de","0x786533dfe123a1690bac9bfd6d7556091344dfa0463df060b9fbd06002cd524d","0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0x0058cd6fedcd52957ab8d87ef428633240193df1f57b11dd53dccb733866128b","0xdd7ff14e4670d9076271143b6098a23415c03d5a2684cec1bc2e37c7a801c70e","0x046f6833df90c10340e5f528ec7ee1b38565d9074a5b09ea0e914c05affb2d8f","0x3586c48eb84a9833763746fe9ffb0291e5278c9348ed5553cb93381cea237c36","0xee61682ec263cf9ac626d5a9b0cd5e26edbfa98b5b368b540e65bd739c37e3b7","0x3da550461dd905be4caf205343e38a7f6c367692823414ddf875b0d6a1bd0a65","0xac555b5e3210762911fc78ba84edffd1f1345180bd128ef32c8d4ca2616e099f","0xcb29e014082b9041e884beea62d0d143546d6246b5a51b1b715691b9e3bbaf21","0x1c2adb02a7d920ba237137c4cfe19f87455b2b0701895f5e5944fe4de4d6e5ae","0x9951e5c97f68238701a07028be91c5ba29bde0c65662546c454bab615c93f76a","0xe819cbe81daa538219fb3630a6b9566e17b43b07f0a056f947b17ed2a306e269","0xba01fe1e96824eaff7d8fa2849a602d863bf66103c12d013502acf213dbe0a68","0xf2b2693039a4f5ff7ca7e9eb4c5e683cd4a37c37a45b01c1c6a6ce4010581407","0xcd1718b39694c8b71b5b7030a9f4416a979d5bffcde56263723356d0f75e4776","0x7f9a300ac2c99cd59a2968481ec19fa4cb7e7b5e6f7da3503777f1b14aec9d5a","0x8012ef0505651f6f7fd21a24c82488b31220d4a8802e323c0eb17a68b48bb54f","0xb8aeacf27a6ec1914ea0154422815cbd50ab4495343749641427aa26fc68538a","0x8be0770d0fe89aa07ae3666a41c40ccd6d8e272702e7e1a34d101a87420b0d7a","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0x6b51cb52851d27e4a2116a00d61df126d5616d13a8ed7491b919b48f01bfc3eb","0x8f50910e9b2ded728474507c83e45be50eaa754440d4ced26ebe6a0613a25d73","0x644da698052ca806f7482115383dc7568e2e83062c1acee4505e8ba9e0bc586d","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0xc6abbba9bb0457c3f19e5b7772be5d630c7ad07112596f2b4ad25b2ab1765004","0x1f21a62c4538bacf2aabeca410f0fe63151869f172e03c0e00357ba26a341eff","0x3a3aec5717af62dfc0f5ede964a3e44cef7c5ba4453963ee6e3545ea9708690f","0x69aaed654713b7d14dce0d398de1136610ca3fa6a8595a57da751619c48c3a9a","0x92b49308bfc175dd178ecb97a1a55a2aa8d92f4e6c0642e98784d18f5463c725","0xb440be4deffff278a0a54bece4d5bba517a3236073012092c2f7526f6434fd2c","0xef9aa6e78baadd9fa11efc775ebe24781e6dd67d28095a72c3297161bfcd60c2","0x2ff7875737b31fef3a5c8b656dca7857f5fce457b5d32cd42e1b3f6a9f599d96","0x6dcc7853f5006668a25edf34db55fa7891e5d60d0f4e321c59a6cae2c6398038","0x72934175c798a2231129645869558a3394847a3e8f7f15a18a1e3f1662de2acb","0x5b1becfd7af05f0504c2763e95671207728e2d68766111a3e7268b876b97e7ea","0xabf1e0bb4f9117a2f1fc0639f2f15ecbe26c83db1288bf14e03927caa0426dc2","0xdd3fe55230fe056a7e73d31ebd2fbad11192626ab8c038aa1ed6cd261f26718d","0x4fd0465de862e927ab2eb5db0ec8bebf40022ed185675e8a081730038cb395a0","0xaa1d7eef82b1597683754d59a758c452bd781c782746e46f20c405afd154bb34","0xed16d4f58241ef39997e5b7e1901868a5dffb92293c7172ff9655cc95cf45832","0xb2b472a2d159005e01011949968c522b0bca0ec0b1751f95a02bae3f8a973c92","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x8af0a5658776b68912b22ec954a91b9c20d3f8aa","storageKeys":[]},{"address":"0x47312450b3ac8b5b8e247a6bb6d523e7605bdb60","storageKeys":["0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x7184681641399eb4ad2fdb92114857ee6ff239f94ad635a1779978947b8843be"]},{"address":"0xc15e9fd476aac7a4b7c1fdbaaf673d95547e9b37","storageKeys":[]},{"address":"0xd07597b64b4878add0965bb1727247ced90c6ce8","storageKeys":["0x1c044131722c039927e6a3b1bd4b747c4472aad115ae16aa9c20dc0e0672f9c3","0x7a03facbe8d2bb931a83fc362468bbaf22b33f1283e598b58715617de99ec7e4","0x51386c9bc7c605e6a3c98ab68b85f550e992d728e5bb05de030b637e7e3d8a2b","0xcf58d9f3a4b31d91092703ee73cb92d0c50dc28004ae3294d08b6e5aaf5f31eb","0xa714ba01ff6976331b4a2558a91983b576e879cb1eb02f6fe9b9b07dd79bffbf","0xaff75b5069ac33468caa13d601269da0ee4fc674f85b0d3b0eeb5d2bcfd89567","0x116e25341563f639ed58f3eee06738b7efef3d38c0fdd59a1702d66fada496f7","0xefd8ebda46dc8ddad393ef8d94d086802841197b86d11019f125833ef99beb48","0x3fdbdcc5a7c9b8295911b8e9a44ad099fa151c5dc8feeb0d5442d361f0d26aa6","0x59813a416b512d7942d56ec2dc10be1c5a96bb20c31833c786030601e121b4bc","0x8efea550137e377188b5f189e99aae0c09a7710572c61386b291c87aeca85cbf","0xcde3fe58956826cdbb5148da293a2ab9436bda2d6ad1f41ed01cc02e9fc9b7d5","0xbcbf48abc06253f4dfd4de17dba0dffe308764a69b4e3513e299adaf31b517e4","0x73be5ecd4ec0a32697bb193b7a852476514fb738006730e8beee6dab5cb5fcb5","0xb259c8c57b197403cf7efec11633f1695ff535ec0062bce25773d4264907f00f","0x578e5a846d9803d75975803e6dd98e48e70a6f1eb7aee6e702bf6a1de56a750f","0x980f427e00e74f6d338adfccc7468518c8c8ea00836d0dce98c5fe154e17bf2b","0x47e9c97fc294a0ff16ca049467342692686c192c036cb09b825d729103dfeb9e","0x65a3ffd40e856dbc201120f9cff1e128e8a91c7688e0871e7eb48a4082adf43c","0x5861ed0f1b28aa408974fab8cb43d3ec70030dbf3bd457a487fd04155b251a69","0x5e4c61878299b875b86b9f7e7eaf180466493978fa3afdf4f89b6e91cad518fe","0x7b6ce01bfb6b35d9ff01dcb56a37e989b7c08c2e0e81ff222d2ca0b5f12b16e8","0xe10a46b4059c1886e48e293880de1070375c360381c0bf20ee52f3ae6f7514f5","0x6cda8d68d3a6bc6ab1ee52cc6d989d9c71b4dbc6537b15e41d0f873f420db925","0xa3d2ee640ba56cdf6f1cb999d43f27bf22d5d9523533f671b028ea004d87cfe8","0x01e1b7384c499a09db86d14161301c11c1624597603d8313c9fd5becc23adda2","0xd7c3b29c29f8a342d03153bd3ef3b08dd1304ac9971ae91c5ef2131e1c56cfd5","0x0b76c9021e8ae7bbb235c193d927ce3540852277fc3ac55c2cc33d2404b605f8","0x761a7eb091e1bc90e3194d34126ba1952765058d31fdbf98c90db45854762106","0xf5d62eeb739aeba3d27e9c9e2108b5e61984ab036bc8775d77f3279b7a2db290","0x08f627d6b7c42ccb2c29ceb3c5d49b247ae7603fd372236a9fdd5a4c9219398b","0xb224181c7c737fe111c273ef4b0ecb913f6a7a682b613404f19b7c7bffaec7e0","0xb6794d459f98415ad02bc5c9f3726f39a2729a0ef2e080c26fc0c0d4a927bf4b","0xec117426ef4f7a4d40efb35d76ff4f791530c4da24ac6ac05c98ff18ea49a7c6","0xacf63e0f0bb734c5a02f3c4d72b5ba2c6d85a5cce5d7d73b36b99283b0b11ff0","0xf6eab92f796f33adeb8980ce988c61adf39e78acf9d786ac1b944d9d2c4a3bb3","0x5da5be7e8ab84aba813385d5509f9a7f563ca9bea9cebf49439b5131b61870d0","0x16fed967a633dc83c80c6e775b3bc6fe8b4709d2dc8342ae8f5fa14eb6f9e6b1","0x26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e2","0x054f34253ae7ee42868b3a682f0f0e059096108fb1327799762de43b64f7025a","0xf862e29f5774568ca843e4659901a0c3ca38a04362fc1504fde4fb8f8d21bb26","0x9d1532edbd2e6499793aa4d95a649338e26b9d33e862752225e18b5a6ca41044","0x0d295a22618e9f8a8db825bfe4710351972da2686e3df64675309ec1554ac7ac","0x5c709b43ab43dd33887f4085eb0689efb46b22618631d9d9276df3eeda2c16c1","0xbd611173136c300448731eec8a6909ac7f0d855118b781b413ac67b8d40deabc","0xd84d4a9a20fe59f09725e6d54b6e565df13fdafac540487e3a836a443cd803c0","0xc58cb77e7926651d9a353c8719a8ed3230b0c4e24e17025e6b7a425d512fcfc9","0xd8984f2abd8ff4edc7a98ca08cf90f67cadaa6760f266338b6ec52c11296b533","0x869f49714d2631980607c22b8fd72207800c0b4b33b74ae269cf94e40dbbf950","0xfb0b46da65fcec747ca36bf52105fc0ca030f1236a0909df36b28083ff1dd361","0x47e8e5aded0a843b0de1ea8f62d9816c6287f9069b817f816f8152f7bf15f518","0xb658feb7c705e0fceb679b158e407e9f88064ee67ee0dddb97866f1bf586f6ab","0x3b588c6916374b7fc81c2491e20ba471f73e2668f7727225a67fea444c4a1c61","0x6a186e691358d80d55256a53d1cee6f445df32f555af4c0e6982857dd7ba44a9","0x15a04109d0ebec6642e4a305f67ea1220e5fccca88fc6ae7a2830db0ce6a6e22","0x4490ee64337053bde6dddb8c87a3b54824d9b35fab41cb81a3d0d6d98048fee6","0xe23cc65530a13f10b5b981de261975015f056a18f0e9b23900ea3ba69ecff88e","0xbd25c5f5daf3bd46f85c8fc02609e67508dbdded4ba69729f720da5d0d121e98","0x8c47873dfb409bdab1339c466656c5dcf1f276fa695fb0f7446d7e59af0d3485","0xef506eb464be202838dca16998565b202e9084228d60b34e957fb8a065fb5df8","0xa0951add076260908f33441f2ffe8cccdf68fdd739c01883a7e6abe29b59f0bf","0xe0bd7fed9b93b77ad401688ee3e44f2ad301677885c99dd4720ed962763dcfee","0xdc275c413e6e77752dfe41624056cca2951635ecff1881c93e12d37805ad7585","0x484f2ae77e07955b1701d2b685a720c78d944bb8c42b09faa6bc0fcf44060580","0x1c16998faf2b7e07d5c9b673afaeb347d51371daea0116800478937ae87bbbeb","0x411a55d11247f1949681f45332b7cdcfe00e3253d3b971436ac4afd369b76e67","0x7fb86689dfbda47c2a7231a6e3184eb8e2fea3052e100c44acd906fd420600f3","0x0cd5bc177955d70dfa0ce6f81a0729e6f44ce5fe72ac1b4858dad6fc0c6e5383","0xfe1673ee9ecd9af14490aa53f8958715ae2b6d05252c21c4b82ec854bc006cfa","0xd0212504779dae03acba3645d87ef2e662c3aa81dcd30a9d65b6e742827d7c2a","0x211acfcc4182e31a241a04cd5a94c263b8f0a9e96b8fb893bcd62ea7cc898fe2","0x23d4fb6235279daf44d4cc8b4f002f6aa0f74d46046c78a9a5d8ca911c463d73","0x30c77e20de66bee70c237e10b56ad43e64f406d74114f9e4169d5b5e1823e84a","0x0000000000000000000000000000000000000000000000000000000000000000","0x361fd52a83017e7a0cb70122767dcb7d38c95a8c4c1a9f32c9d4671ef8025f68","0x8a3adf14ac7dc02e841f982b08dc15ab032db96aadb6f2224987d311507e020f","0xf0568dba80cabd44325dd7c1a0ba8a951be3cd8dff68290869eb7ffc33d3ecd0","0xfd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5","0xb67d7da6dbd5ade46880769d498ead5912654513996334e3edd173b2f2911467","0xde17798ff82788684fde6b1964c256e70f94ac606b60fbcd7b05cff66e8e16fa","0x3c3e4a93cf5b5c6c8d0ea66a90cb68880482432c6060cc01c9f9d8a082a4c89c","0x0ce482d09c2c49436993bcf96d7cd40cd044fecb87a2caad99b322fcdef77d8a","0x233a22789d80973ab061781a29e1893674e71e797e0c4f035ca8953a35cf7eb6","0x0000000000000000000000000000000000000000000000000000000000000001","0xb0ee894b20ad4a12b64a51233ea5a66f5e6a401eada16f4a2e18b954d236034f","0x954d19208990a66fe8e48f3369c4b373ba378722cae97eed0f75b3d22e571c90","0x25d0428063013da6e399a5c748fddacd8dc43aa4a92b290dcb70ab26ad09ea6b","0xc3ff0fd0392f538c139495a4104749b9ecb3dc8e5b09960806b3749185eb5f5b","0x3c238d047634914442ec98dcd920cbf918f4a53b7e570f3dbfa1e70d81357772","0xa48544818c2c710afa9849c61ec9c60e8acdb3eaa2885f33b37e118cc8fd04ac","0x0c03c7c7ac52072f3f0259713d2c317f0c880cb4d52a1014f62efc48a48a61cc","0xfb6a17e196097ec134b0c9618d732ee8f073e3aa00aa0a0d121b59aadb198361"]},{"address":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","storageKeys":["0xc4e8c2ae6ca23828db170f75ec81e748dd4bc5ea48514a9f5a5aeaf0be7815e5","0xb440be4deffff278a0a54bece4d5bba517a3236073012092c2f7526f6434fd2c","0x8defcfff9039edeb845aa046eb9cf748f8e8d35ad6a6728202750764362cf1c2","0xee61682ec263cf9ac626d5a9b0cd5e26edbfa98b5b368b540e65bd739c37e3b7","0x0a140afd01c5321d1a8306c0f87b6ad56641579c41b3f4d85e8a17681ecabd3a","0x9d4f0be8bb21b15421e173fd751bdff27bd8df7c9e46857aaa47c233aa989f57","0x9951e5c97f68238701a07028be91c5ba29bde0c65662546c454bab615c93f76a","0xfb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8","0xc71dfa760d584ebf474c6d1c55ce31ce02f85ea18a5dca00cd2f18491d012f6d","0x3514a0695d482e2591be8de983771ab1f8770ba2fa598524700d7c0d233e4d58","0x3d9c106e01ba0fbaf08e08c2670c7883c12a2a181c027b09dd9cb0eccd300010","0x4fb413805902e1d9a6681d54d7946be4d2c3433fadac4304eb49ef1b5a52a8f4","0x3a3aec5717af62dfc0f5ede964a3e44cef7c5ba4453963ee6e3545ea9708690f","0xb4cb21a7620b3b565014ce0cd45cf13f7ddcf0effa004cced448b633508425c0","0xe03178286da22a27dd0b1f68fb538cd07bc9080172ee9a5a2238416fe86db02a","0x16da94a431a6fdc65bdb2b1a7f35ff84e18bec196d1440d4d1b065ddd2618127","0xa99ab8af0a963ef95adbbdf192a724d8137084c4bb695dbcfe87a7aad70b7629","0xd5ece3e25e88de9f50d022a6326bcf9511aecd2cba269b2f186b2b5a8c5bcd77","0x674994ab631faa049823288ef8b84de2146a4c9528e1ae43eded0b8e59b3c47d","0x9ede93be0d8fc6a5eb9cf1c7345a85b7519d8487a727aef0c2f00ab966aa7716","0x0cfde81cdef18be5b61e36abce423320f5851fb3d2f5f460a99b2537bc6c1c3c","0x682ce56c5f70d09674a5d3e596352a74c7aab6cadac11e2e94f533f0756f8bb5","0xd7dc815db2d835bf2d52b7821d46639ca48b5b15ba862cb7c56bf9f8491af980","0x614a2561a9d44f4bdfc453f63299319dbac9881f80513f44208e073ba927d7df","0x2c47f2c83db5d085fba21d1d91bba6245435c688f64423ba360424c27e4558f2","0xad61338f834dd752e599385be46558b59c2c98f066f5a05ce6527531288b99b9","0x09d0a653d028a303e3445ad078cd9784c32b672ecd784e05dfa863f177744f2e","0xbbf20804ecdbf91165466add6fdfbb1ef937822ac3d118e53a48434fc0d6a287","0xc02b216410b1b775be651ff2405ecb44d9d12d5358f82830fb7f7316f700357e","0x0cb865ff1951c90111975d77bc75fa8312f25b08bb19b908f6b9c43691ac0caf","0x2fdcc99b01e8393a8bf0eaa262e26ba1981b8052fb1ec7ba1213ffeb9028ea16","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0x2b83b3e1fb436772e592319bd36c360dddb62d80a39727784d546decedbafe26","0x1b8139bb6c0a61c6886577cf953aedb3825b4b72204203cc1dc2cf3bfb64d908","0xee882cb0e61efbe2f7edd0fe7a9feef75c17c350fbb5f6e38a0a447346552280","0x527728326d46a8e2d6fc8d2a42d36d0f250a3429d523a7b243a663976c0eb909","0xad5156b8ac51ab58160427050d6ce0db61d3d5f2512f904d82752cc0b778683a","0x2e40643618fe3a247bf606027d4625bdbfbb03e72fbff5a03f134226536e73b7","0x73d637d229721ca538a0a2e9712eeef46a1889496c0a60f402b430eba28d4a2e","0x88ca07a564a58da3f8d815159c0216a5efd7374eeb0aa746063ec89ec18158c3","0xd212dcd01ed41455be0b36533ba78a0fdeccda0068b5f90fa610f816600cbd08","0x1781261727bdf41944e3b1b4b4c4a685858610b8b308e198b4946aba6256f557","0xa6299f75ce9751e77050ba6791dadf619368359f2099d07a355657b365a62ab7"]},{"address":"0xc5e7b8eaac10bd261f24e71b928118ba3163b81a","storageKeys":[]},{"address":"0xaf1931c20ee0c11bea17a41bfbbad299b2763bc0","storageKeys":[]},{"address":"0xb830a5afcbebb936c30c607a18bbba9f5b0a592f","storageKeys":[]},{"address":"0x531b85dd2c4f7f913e0b20080232dd27d72b366a","storageKeys":[]},{"address":"0xa458f400e5fb141e13b33acd48056135fbb629b9","storageKeys":[]},{"address":"0xf24b4a0307ae828ca59ab0d77a0cacf5dca68def","storageKeys":[]},{"address":"0x2f3633184849d57169189eac6768029aea9a70d6","storageKeys":[]},{"address":"0x7e75debaa645805b1aaa4c5a41aa11dbcb198215","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x3c3d457f1522d3540ab3325aa5f1864e34cba9d0","storageKeys":[]},{"address":"0x596d13aba9d144fd092d2fb661ff24ed40e24694","storageKeys":[]},{"address":"0xd8d6ffe342210057bf4dcc31da28d006f253cef0","storageKeys":[]},{"address":"0x4b8c0a0df725750aeb948816b4dffecd32ee9008","storageKeys":[]},{"address":"0x0000000000000000000000000000000000000004","storageKeys":[]},{"address":"0x89f0832cb159809eaecd956c7d11abbcee46cfaf","storageKeys":[]},{"address":"0x6b9353bf4f90abdb218979b7596fafc3c6c6ac64","storageKeys":[]},{"address":"0x66a71dcef29a0ffbdbe3c6a460a3b5bc225cd675","storageKeys":["0x53b3987129051b28fa17fc2a027d7202b5985bfe6bd9201944a7c814fcc8130b","0x677e4f2cade567aa555414e24ea2492afaf4a490fc6c171acb0f03e0713a0188","0x0000000000000000000000000000000000000000000000000000000000000008","0x5a1e8bc90d0113cdefe68a8d52149bb916ffdb9842f14a2a8352eb60903b9f87"]},{"address":"0x16938e4b59297060484fa56a12594d8d6f4177e8","storageKeys":[]},{"address":"0x4a09cc5bb69e1e2e0483093f4ad1bb746fe5d103","storageKeys":[]},{"address":"0xef9080ae61c13c8d389b1811b5708fb363f39be1","storageKeys":[]},{"address":"0xd9db270c1b5e3bd161e8c8503c55ceabee709552","storageKeys":[]},{"address":"0xf0715a936f7012716e598f928715d15acc9a005b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000000","0x7e0a242fa7bd05420f4edd55f05bd76c7b4a976b6238fc8caa429635d309caa0","0x6f56f6e7ec7a32da85f50a83d518c516bb3cadd20c78f39181e38684dddcb664","0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8","0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0","0x0000000000000000000000000000000000000000000000000000000000000005","0x834e0c03dc62686e81f31dc0c99974500e851424aa07d5d6d7f3bdfd74930377","0x0000000000000000000000000000000000000000000000000000000000000003","0x5346584f5bfc66a3c00ba6498c1f513bd618ce63c791928a75f372c176d6c302"]},{"address":"0xad3b67bca8935cb510c8d18bd45f0b94f54a968f","storageKeys":[]},{"address":"0x543ba4aadbab8f9025686bd03993043599c6fb04","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x8898b472c54c31894e3b9bb83cea802a5d0e63c6","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000020","0x000000000000000000000000000000000000000000000000000000000000001a","0x0000000000000000000000000000000000000000000000000000000000000002","0x346d7abcbcc8b89b045d0adbe9840aa99f8e7cd713cdbc799f6570bd199c97eb","0x346d7abcbcc8b89b045d0adbe9840aa99f8e7cd713cdbc799f6570bd199c97e9","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000017","0x346d7abcbcc8b89b045d0adbe9840aa99f8e7cd713cdbc799f6570bd199c97ea","0x346d7abcbcc8b89b045d0adbe9840aa99f8e7cd713cdbc799f6570bd199c97ec","0x346d7abcbcc8b89b045d0adbe9840aa99f8e7cd713cdbc799f6570bd199c97ed","0x0000000000000000000000000000000000000000000000000000000000000004","0x762c1b418f310e512ecc83bc4de7cec72478814fac3ae3346b0f163b71a187a7","0xa550ba85c46b24b567d2e17cd597f2283877afab43603f46d5de7858f1bdb732","0xa550ba85c46b24b567d2e17cd597f2283877afab43603f46d5de7858f1bdb731","0xda0c63964ba5c61c41eb4d4968a986e821c685b5ead417aaa506855a5436aa5c"]},{"address":"0x736468c5f3d08dfab3f7ffa8f767cab09fab6968","storageKeys":[]},{"address":"0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640","storageKeys":["0x320975846a116b11411a5cfde94c56d7713040529fd53bc4095fb1022e45da01","0x0000000000000000000000000000000000000000000000000000000000000195","0x0000000000000000000000000000000000000000000000000000000000000196","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xdce92f40cadde2c4e3ea78b8892c540e6bfe2f81","storageKeys":[]},{"address":"0x6d9db9275c144533071fea75866993ef2afcaab7","storageKeys":[]},{"address":"0x0000000000d3e910c999cfa4a016eaafe9fcb604","storageKeys":[]},{"address":"0x689e0522cac371144bf5eb5e1a320680d22b344a","storageKeys":[]},{"address":"0x41c9e7e34f30cd1d0e7ef1c0b98eb2c286ac6197","storageKeys":["0x3c442c4a026023d292cf172100bd4fafe9bc2cbc06901ad42977fa664c68d620","0x0a4756f4975ef29a29b01082ceda16ae35e77fa24fba8bde4d115c94e88d7eb5","0x2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a4","0xf682ebea514a9e2b85c1a43cd563e10f2a61d99e157a356a6b9c80c17cdf41ad","0xbc1abd666eb357c16b7b3522aa4f16db2ac78b1440b3ea37d2505b36aa96f526","0x788d4ef1b062837b26f7fd9c101ab7a362a96fbc8957a96071a3dafe30351e2d","0x96648185182926add89ee4d5c354d3f3e8383a8966d4d875bd8575e13aa27a96","0xbc1abd666eb357c16b7b3522aa4f16db2ac78b1440b3ea37d2505b36aa96f527","0xe631f0829bd5d2248f5696f0445b749428c5508eab157fc97958c36dc8731f9f","0x6dcd433636645314e4bb32eba4dd5f9ca7e80455e16a6e723e255ac50f864570","0x0a4756f4975ef29a29b01082ceda16ae35e77fa24fba8bde4d115c94e88d7eb8","0x788d4ef1b062837b26f7fd9c101ab7a362a96fbc8957a96071a3dafe30351e2f","0xf682ebea514a9e2b85c1a43cd563e10f2a61d99e157a356a6b9c80c17cdf41ab","0x971ed63485f6dfa95ad843c866b9f66226ad11f47ba98e62a3a56cff07b7c68f","0xbc1abd666eb357c16b7b3522aa4f16db2ac78b1440b3ea37d2505b36aa96f528","0xabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05","0x0a4756f4975ef29a29b01082ceda16ae35e77fa24fba8bde4d115c94e88d7eb6","0x0a4756f4975ef29a29b01082ceda16ae35e77fa24fba8bde4d115c94e88d7eb4","0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0","0x0a4756f4975ef29a29b01082ceda16ae35e77fa24fba8bde4d115c94e88d7eb7","0x788d4ef1b062837b26f7fd9c101ab7a362a96fbc8957a96071a3dafe30351e2e","0x6dcd433636645314e4bb32eba4dd5f9ca7e80455e16a6e723e255ac50f864571","0x6dcd433636645314e4bb32eba4dd5f9ca7e80455e16a6e723e255ac50f86456f","0x0a4756f4975ef29a29b01082ceda16ae35e77fa24fba8bde4d115c94e88d7eb9","0xf682ebea514a9e2b85c1a43cd563e10f2a61d99e157a356a6b9c80c17cdf41ac","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x6352a56caadc4f1e25cd6c75970fa768a3304e64","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000065"]},{"address":"0xdfd5293d8e347dfe59e90efd55b2956a1343963d","storageKeys":[]},{"address":"0x9f5346d3a4166768e54fcb104190a0646718dc38","storageKeys":[]},{"address":"0x9da2c7d27df3d81d5d0270dc388ac5682cd1f441","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f","storageKeys":["0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f7616b6","0x0000000000000000000000000000000000000000000000000000000000000000","0x239fab1eaf3eff0b6b4838c45e97fbdb63391bd921b9456d845351920c831a9f","0xd2f9d1488d8e54b331b10402bc9a97cc52239f25420b3aef9af5866c7478903f","0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f7616b7","0x9695bfa5caa0bf4902cb5e39eec5610b8d5635fd6e7f233ca1eea2baba7b5ca9","0xb2aa9723118528045c732641b4e2e77ed50f8f9cbf314a97a95d66021eb9e6e4","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0xe8e847cf573fc8ed75621660a36affd18c543d7e","storageKeys":[]},{"address":"0x1fb27938ed2909b94dfef7023a9e00f143bd7293","storageKeys":[]},{"address":"0x3ce8cb5b2809a7094ea35aaaf1f039ec68f9c354","storageKeys":[]},{"address":"0x489dc2a0767fb775d851f678babb5a150e2ec6bc","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000013","0xf318eb6180bf9fcefbc38616da1ebdd433d8c812b72031058da166e6417d6cea","0x000000000000000000000000000000000000000000000000000000000000000a","0x88ca07a564a58da3f8d815159c0216a5efd7374eeb0aa746063ec89ec18158c3","0x709cf7b3021c74484e2991069d4c044114525d03ab6d9b0914fa7c2cd637d43f","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000d","0x6fff2fafc58944079853d65fccec9fb0c80d0fce58d3c1351886b2500603d9f1","0x2018ac9c66a42e968f350a32a98c7eef7d47691f95dce397a62657fb51b63d3b","0xda90f15a2cb0eb801768ded66ed2467608f403fc4b94a8cbff5931df1d01cad8","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000012"]},{"address":"0xb987c7cfbb6cb65ed900b0ab0a85d2a337fcda9d","storageKeys":[]},{"address":"0x3be3d1e782c24938c37186577ba99456a0ba93f1","storageKeys":[]},{"address":"0xe6b738da243e8fa2a0ed5915645789add5de5152","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x4a8f8d7fb0255d2231f56682386b88141915d1c6","storageKeys":[]},{"address":"0x34cf7afef019fd2324480789b512dbe9da4d77d6","storageKeys":["0x95a31d09169ab4887dbc65e703af1540729d39f0ca019af01c4d6a68a2a05982","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000d","0x8ea8d983ce4000b9150f84945d30874955f03dce08304191b69e256ad3f37dc0","0x07d0a6a756c208d8fb4fd3a62fd8640f3dca18b06da96a713cbc86110763aaf7","0x4ad85b8a1c588f0225296a1d5b2e903a7f072a9b2ba328c3234cad07ada115b0","0x85cd5ce9dd2f938e4e2b0293c64e6bcc83ebc9f8ac2a966a769cfb1a7f708eef","0x825bef5be1f104c75584f1df5320ad96146232b95bcf40d28d0a27aab8c4329e","0x0000000000000000000000000000000000000000000000000000000000000012","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000013","0x9466cf6761b3495eff41bec8bc32674dc3d8dc4501923951a73c05683b368fbf","0x0b8e4bd62403d9f80aab2c0ef9be797d5bc1971939928af12736482e8d27d231","0xe06759f18a8e231512bde1eca0ab9bab87814b575ff7806294229b964ad036bf","0x003d7e63d011b4382c27e7f7ea22225a81e004c958700a716bb47a08271b0b83","0x0000000000000000000000000000000000000000000000000000000000000005","0xe9570ec067158153bf8712f8a6845e4a2460ebfe69bf46053fab2f9a9871dabd","0x26e22803a4d02724c13feb9acde49cff4cb05832bd0d8a6c6ae88ad94e2f9c85"]},{"address":"0x725e704b6933be9896c717f735e5a5edbfc7193f","storageKeys":[]},{"address":"0x3fa73f1e5d8a792c80f426fc8f84fbf7ce9bbcac","storageKeys":["0xe4ced1d64d16c07c4d599507f687d256ec3fa4a67d4deb47157dc446c74190e0","0xbe7376c7d25479ca917b2d177ec7f37e35941a45ec11fe363b66f7d0fe2c68a5","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace","0x7d63b2f3323c3188a4dd521dafd4b34024820f036082740e91ddd8c198f9dbb4","0x0000000000000000000000000000000000000000000000000000000000000008","0xce0edc4107994ff8b742eb6f22256d994fa4856d91c22c761866015c64c635c9","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000007","0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636f29","0x5d7cc7dbe140af4534d7be8e5f9efa37975bb12d2d5c4cd0d72d6b421c62dd00","0x0000000000000000000000000000000000000000000000000000000000000011","0x0a28eb57ea52997b7f6bcb9432cb0ff306f27d2c8ff0add15d74aaa2023ebb3a","0x0000000000000000000000000000000000000000000000000000000000000002","0x658d2488e049ecf069285f01ae0883f370fd5c75b3a3576bd1d4072fde038e32","0x7051c0e62c07cf8eed60bcf52739bcc8892e4d81227d2007a53b342da400bd1c","0xb62970be2a3d95e5f7da9664e84b583927a0c596d57739dde9674a0743315f22","0x5d7cc7dbe140af4534d7be8e5f9efa37975bb12d2d5c4cd0d72d6b421c62dd01","0xc88ba530ccd40c915f2b6cc494a9df1c4c3d538b8411484b0cba887452882634"]},{"address":"0x368ae5dda5873cb9ac125759123c2ce049fa3556","storageKeys":[]},{"address":"0x28a9e7bbed277092e2431f186e1af898962d4e92","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000037","0x0000000000000000000000000000000000000000000000000000000000000051","0x000000000000000000000000000000000000000000000000000000000000004e","0x000000000000000000000000000000000000000000000000000000000000003c","0x000000000000000000000000000000000000000000000000000000000000003b","0x000000000000000000000000000000000000000000000000000000000000004f","0x0000000000000000000000000000000000000000000000000000000000000033","0x000000000000000000000000000000000000000000000000000000000000003a","0x000000000000000000000000000000000000000000000000000000000000004b","0x0000000000000000000000000000000000000000000000000000000000000045","0x0000000000000000000000000000000000000000000000000000000000000032","0x0000000000000000000000000000000000000000000000000000000000000036","0x0000000000000000000000000000000000000000000000000000000000000041","0x0000000000000000000000000000000000000000000000000000000000000044","0x0000000000000000000000000000000000000000000000000000000000000043","0x0000000000000000000000000000000000000000000000000000000000000038","0x0000000000000000000000000000000000000000000000000000000000000050","0x0000000000000000000000000000000000000000000000000000000000000053","0x0000000000000000000000000000000000000000000000000000000000000039","0x000000000000000000000000000000000000000000000000000000000000003f","0x0000000000000000000000000000000000000000000000000000000000000052","0x0000000000000000000000000000000000000000000000000000000000000035","0x000000000000000000000000000000000000000000000000000000000000003d","0x000000000000000000000000000000000000000000000000000000000000004d","0x0000000000000000000000000000000000000000000000000000000000000040","0x0000000000000000000000000000000000000000000000000000000000000034","0x0000000000000000000000000000000000000000000000000000000000000049","0x0000000000000000000000000000000000000000000000000000000000000042","0x000000000000000000000000000000000000000000000000000000000000004c","0x0000000000000000000000000000000000000000000000000000000000000048","0x000000000000000000000000000000000000000000000000000000000000004a","0x0000000000000000000000000000000000000000000000000000000000000047","0x0000000000000000000000000000000000000000000000000000000000000046","0x000000000000000000000000000000000000000000000000000000000000003e"]},{"address":"0xc3112f7c3037ab2653d78da6f68c77f00682c8b6","storageKeys":[]},{"address":"0x869ae5761c9f866f47c75874fe5e2fdda1ee65d5","storageKeys":[]},{"address":"0x76d788704a6771175b47399d7ad28d092e8f70b5","storageKeys":[]},{"address":"0x80cf916402ec71de83c075c8172cec3d1bfa04b6","storageKeys":["0x4444cd5680745c72535fdbda5ad24a30aca93377f3e79b8aae7ead0ea8a8c74d"]},{"address":"0xfdc25b5f93b539e26325a630d733b0f3668f6b5a","storageKeys":[]},{"address":"0x156117da54cde3427320297266b6520a1da5e3d5","storageKeys":["0x20ea521a6bf40c1b7d633055d552704fad3e611ec114f8135b534b2d8de8f1be","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x999fcd9d9baacda40beaacc4a126d5000b88c79b","storageKeys":[]},{"address":"0xc00e94cb662c3520282e6f5717214004a7f26888","storageKeys":["0xf54c17c939c95056b2371bb181619f0a479c2ff3a009eaf6fcd506c66065cb33","0x5f4a958d163293ab9558661b2551cb459bedfdd0bb79aab5bfe21012cc5e3fea","0x4902ca1e86b78ed620d5941365e5a4b9896577c6563e2c3e8efe890ee92c121f","0xf1e30897d541b888444c9d0956343148d81197d9274d4220f3900fb3bb395ee8"]},{"address":"0x10d2290b6499b28c31aedf746465a20e470bf59e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000033","0x000000000000000000000000000000000000000000000000000000000000006e","0x5a9158cf32ce502a1c575369bfcdb49409273affe10157f52669ded2aed37121","0x1631c29e4eb189ae257f8587355ceb78bcb6f9478087572ccbbde079fb4045ab","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x04823950daccb52300ecd20f0f6096c72a77d1caec3e569189da960be4941176","0x1631c29e4eb189ae257f8587355ceb78bcb6f9478087572ccbbde079fb4045ac","0x0000000000000000000000000000000000000000000000000000000000000065","0x18c8cb20752177317b25472820acbe91cedcc3d2bcb99162a7a3edff04a1bf3f"]},{"address":"0x8a7b7b9b2f7d0c63f66171721339705a6188a7d5","storageKeys":["0x659a4ceed2b806fb3f1651a1f9d9eda8a3a803528691ca29ad0cb6903d9faaa4","0x0000000000000000000000000000000000000000000000000000000000000004","0x2bab454520286b51c08bc24844fb90e7fd2f9adacc21d96020e2a6cb17635a2f"]},{"address":"0xdb5889e35e379ef0498aae126fc2cce1fbd23216","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0xb93a83c9a7a9aab3e64c8220b50f008831858cfe","storageKeys":[]},{"address":"0x06cc6689d7b1a5cc72a7ef8d1f34e32a0895dc7f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x98f3c9e6e3face36baad05fe09d375ef1464288b","storageKeys":["0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c83","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8a","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8c","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8b","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c92","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c85","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c94","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c4","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c3","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8f","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c90","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c88","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c84","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c86","0x0000000000000000000000000000000000000000000000000000000000000003","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8e","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c91","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c82","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c89","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c93","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c87","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8d"]},{"address":"0x074f67b15bdc7dfab62a05b351cadfab348ba0d1","storageKeys":[]},{"address":"0x2d2a7d56773ae7d5c7b9f1b57f7be05039447b4d","storageKeys":[]},{"address":"0xa27cef8af2b6575903b676e5644657fae96f491f","storageKeys":[]},{"address":"0xf848ff35058dc7f6e713da7719c17377fddf36e0","storageKeys":[]},{"address":"0xb32c3d0ddb0063ffb15e8a50b40cc62230d820b3","storageKeys":[]},{"address":"0xe903d70549d9943575f62f23f223e488a7a13cca","storageKeys":[]},{"address":"0x5a5d0ad85762979caae341274f0eba22df8ecedd","storageKeys":[]},{"address":"0xa299c04eb002e667bcb6c0d38a024eb5022a5e1a","storageKeys":[]},{"address":"0xd4006530da498c6fede1ef57b962be869932fcbf","storageKeys":[]},{"address":"0xd6e8376a3a257c5d5a6160238e699ec5a089365e","storageKeys":[]},{"address":"0x1c22b5f3938aaa8562fdcd9cdd27b91da6294eed","storageKeys":[]},{"address":"0x6edf968da408a9640b8865826429a977a11c5048","storageKeys":[]},{"address":"0x7dbb4bdcfe614398d1a68ecc219f15280d0959e0","storageKeys":[]},{"address":"0x3871a1ee8727d78be9d6f7c2e0981216f159073b","storageKeys":[]},{"address":"0xf326e4de8f66a0bdc0970b79e0924e33c79f1915","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf","storageKeys":[]},{"address":"0x0d21d05dfaf309c08ce3387658dffffd9814ba89","storageKeys":[]},{"address":"0x1bac8fb482d9603947bd39be9ccc601999d9d445","storageKeys":[]},{"address":"0xa294cca691e4c83b1fc0c8d63d9a3eef0a196de1","storageKeys":[]},{"address":"0x046eee2cc3188071c02bfc1745a6b17c656e3f3d","storageKeys":["0x8730115f3af379603b1e9225ab1e6bc6993b5fd6d0e00c24280a6ba17c0cd6af","0x000000000000000000000000000000000000000000000000000000000000009a","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x12bb162f230eacdcb6a1dd8993845aaad51d84d37c1f42a5dac314937b844630","0x8490efe14c80b79eea7b3398101a3ad00a11df1bb401a0d3ee43993f94cdb5da","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x00000000000000000000000000000000000000000000000000000000000000fb","0xb9a73f10c7c13a0dce66330823ab2fdbe4f6cf54f63dadf2489941e416f0c9f6","0xae725a6314bba6e614463419cb800d0807cc2a4f688ab68828b74bc255fecab4","0x5de73dd11a40bb7b11ed31017e24983073ac791a479fe37c93e89d1271941731"]},{"address":"0xbb0e17ef65f82ab018d8edd776e8dd940327b28b","storageKeys":["0xaf16c2bd9e5946339c6051abc1169e5d66ce508bcb4e938c79c6ec8c0862cc65","0x58be6dab34a060f53791c7e744b8a200203f53d8c29f859ec6abe9e1c596fde2"]},{"address":"0xf186a8d2fbac2986a4b4434b27e3a566571d9e54","storageKeys":[]},{"address":"0x2858a227f9a0578a927311be65c4dab2b739ee08","storageKeys":[]},{"address":"0x23ebcd701fd92867235aeb0174b7c444b9b2b3ad","storageKeys":[]},{"address":"0x8b6a6f5b828f086a2a9d8a3150b958e79e91a82f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x8a9a513b9791a18d5272680de0b8170980d584db74d5cc608d89e97f4ae4c892","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x79df89b7a4bbcd685ec9287578272f43b1f01d53","storageKeys":[]},{"address":"0x9350d003042622f8b7e5b893a6bfa9983a55a6ac","storageKeys":[]},{"address":"0x1a11bc142c3b57ef6c628b7968eb4af8a5b179aa","storageKeys":[]},{"address":"0x6d5e5aabb7579b2db6468150b9a6704430ba8c36","storageKeys":[]},{"address":"0xeb9b9d0af960e9ba579f624cbee86856bb1d7e90","storageKeys":[]},{"address":"0x07245eea05826f5984c7c3c8f478b04892e4df89","storageKeys":[]},{"address":"0x202d5435a180ecb56c9b17812f65482908f700ea","storageKeys":[]},{"address":"0x76f36d497b51e48a288f03b4c1d7461e92247d5e","storageKeys":[]},{"address":"0xaee0eb2ee801e74b8fbc181539c4b0384fd3fe92","storageKeys":[]},{"address":"0xa93546947f3015c986695750b8bbea8e26d65856","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0xce8a96b35e26f33d14c2204bade96454efe3fd165443c5a6a20f3292428e6ca1"]},{"address":"0xfc426a7850205d2aa7d0414345e7c9d7c2e8dd1d","storageKeys":[]},{"address":"0x94ce11b1ef563e6ed61fb3302abc8bcb827b37ac","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x5756f580d2494a503f5288f38cc5229b36885d51","storageKeys":[]}] diff --git a/bin/mpt-test/access-lists/18363442.json b/bin/mpt-test/access-lists/18363442.json new file mode 100644 index 0000000000..2e177619cb --- /dev/null +++ b/bin/mpt-test/access-lists/18363442.json @@ -0,0 +1 @@ +[{"address":"0xc18ac6f2917d4c9b6ff3dad7e1937da8e9244fa4","storageKeys":[]},{"address":"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9","storageKeys":["0xf9a32d67f3f8c78696e247ab205357778797ca26b6edc245827016d71f40901c","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d52","0xa5ac31719d9f4564672a106339496685f6250ad08b6ee3bf8e1ddeb0c36d52d4","0xe08aad639ffd10ccac329590adb88878e4ea69ff976a955eed6ae73f151b10d4","0xa5ac31719d9f4564672a106339496685f6250ad08b6ee3bf8e1ddeb0c36d52d2","0xa5ac31719d9f4564672a106339496685f6250ad08b6ee3bf8e1ddeb0c36d52d5","0xe08aad639ffd10ccac329590adb88878e4ea69ff976a955eed6ae73f151b10d5","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d4d","0x0000000000000000000000000000000000000000000000000000000000000034","0x53bbdf4cf4f70d2494b9e1c24700a6c1a17d11c747522a0d584f0f40229caaad","0xa5ac31719d9f4564672a106339496685f6250ad08b6ee3bf8e1ddeb0c36d52d3","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d4c","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d4b","0xa5ac31719d9f4564672a106339496685f6250ad08b6ee3bf8e1ddeb0c36d52d7","0xe08aad639ffd10ccac329590adb88878e4ea69ff976a955eed6ae73f151b10d2","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x8e0cc0f1f0504b4cb44a23b328568106915b169e79003737a7b094503cdbeeb0","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d4f","0xe08aad639ffd10ccac329590adb88878e4ea69ff976a955eed6ae73f151b10cf","0x0000000000000000000000000000000000000000000000000000000000000039","0x67dcc86da9aaaf40a183002157e56801115aa6057705e43279b4c1c90942d6b2","0xa0a618d80eda9243166be83cb7421d97e9dab6ddddd3c70ac7a6b4440256e8e7","0xe08aad639ffd10ccac329590adb88878e4ea69ff976a955eed6ae73f151b10d3","0xe08aad639ffd10ccac329590adb88878e4ea69ff976a955eed6ae73f151b10d0","0x573a3501f034fffb5f878b1b350158420fe247d45136d31a8142b0c05e85e37d","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d51","0x53bbdf4cf4f70d2494b9e1c24700a6c1a17d11c747522a0d584f0f40229caaaf","0x53bbdf4cf4f70d2494b9e1c24700a6c1a17d11c747522a0d584f0f40229caaae","0x53bbdf4cf4f70d2494b9e1c24700a6c1a17d11c747522a0d584f0f40229caab0","0x53bbdf4cf4f70d2494b9e1c24700a6c1a17d11c747522a0d584f0f40229caab1","0xa5ac31719d9f4564672a106339496685f6250ad08b6ee3bf8e1ddeb0c36d52d8","0x53bbdf4cf4f70d2494b9e1c24700a6c1a17d11c747522a0d584f0f40229caaac","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d50","0x4cb5a02f592bd29403ce60c982c7f5174b16842da4fff5cfd025d6836dc48d4e","0xe08aad639ffd10ccac329590adb88878e4ea69ff976a955eed6ae73f151b10d1","0x53bbdf4cf4f70d2494b9e1c24700a6c1a17d11c747522a0d584f0f40229caaab","0x0000000000000000000000000000000000000000000000000000000000000038"]},{"address":"0x28c6c06298d514db089934071355e5743bf21d60","storageKeys":[]},{"address":"0x4e5b2e1dc63f6b91cb6cd759936495434c7e972f","storageKeys":[]},{"address":"0x4d224452801aced8b2f0aebe155379bb5d594381","storageKeys":["0xd32652d49c22eb15f53a03c8f2a2bd3924f9bd0d2cfb52a65c6f39b7af1a2e9e","0xe681f55376b2c9681f3a00cf93aa9a914f847aae12de5b7a6e7225a1d4dccbd5","0x826106af66bc55e092de57e34f7303f204c36e860d648432b21c3c1cd1706405"]},{"address":"0x1a1fdf27c5e6784d1cebf256a8a5cc0877e73af0","storageKeys":[]},{"address":"0xa009fa1ac416ec02f6f902a3a4a584b092ae6123","storageKeys":[]},{"address":"0x4976a4a02f38326660d17bf34b431dc6e2eb2327","storageKeys":[]},{"address":"0x5b6ee81953dc148768f482cab48caa300abd16de","storageKeys":[]},{"address":"0x5d18b30ac9f5e8d6b21a4b783d95fecc8b3c09c6","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x539a2750cf14384f4538e15479909b4fcd8f5b83","storageKeys":[]},{"address":"0x6131b5fae19ea4f9d964eac0408e4408b66337b5","storageKeys":[]},{"address":"0x59e0cda5922efba00a57794faf09bf6252d64126","storageKeys":[]},{"address":"0xf53f1bda7ce410bef2ff913bfb832d395e74574c","storageKeys":[]},{"address":"0x6beab36b5d783db20f9c23b5512ba496badae3e0","storageKeys":[]},{"address":"0x5b1085136a811e55b2bb2ca1ea456ba82126a376","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xf817692fe687feecab62d634183cbec5394ef4918eab624e9f9f563a082d01ed","0x00000000000000000000000000000000000000000000000000000000000001c7","0xf133cab52ad4dbb2e8eaf585e026aca2131130b75fa0febe26ab08d4a8bbc545","0x2abe8b52af0dd64db0eee33f305f5695fb5fb2029ac8de4ba2150bb61672aa90","0x87090bc84023a1aa5b68055e01703131dc7a7cb6baade93013d370a5c2896596","0xb62ea3c5bdc1e90ccd012b2c34b590f214282074df0c6e6db72d53775688f2d0","0x237d497f97ac1fc21b567cbd08f9e92f376caf7800ab82d6cc36d3496a06b18f","0x42de056d96efeaee27210be1899b76be1245a2f222b9db3c3dea5d3b6e8ad34e","0xe849ad8d652c2597959eb0bf4201409e0c8a66fc52e4b25c69a4c3b32d4a47a8"]},{"address":"0xf56c5527d68a19e19b5c3e83ebd149b025ed41a5","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x42a21e1ecae229be9775b4e9bdc7b0538c3953c03a20e818d60bd7baa20ca648","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xa78aed7fb05b3dedef24d10a71d0adfdb32326a0","storageKeys":[]},{"address":"0xa76244751c10915a3578ee595e627bc4ad91d930","storageKeys":[]},{"address":"0x59d62639d1da4a7ac14939c4137c7e260c06c657","storageKeys":[]},{"address":"0x46bfbea111af9d40a7ebca47e8c0476a7fb3a898","storageKeys":[]},{"address":"0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656","storageKeys":["0x68fdfc39b76b20f280a010f9491977d8f5b24e2fc048cfc4260b97516c77a322","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000197","0x0000000000000000000000000000000000000000000000000000000000000000","0x320975846a116b11411a5cfde94c56d7713040529fd53bc4095fb1022e45da01","0xeb2a45b9dac59659535c0aec2a4685de3b79ac8d697dd3329a43b80c480f7b2e","0xeb2a45b9dac59659535c0aec2a4685de3b79ac8d697dd3329a43b80c480f7b2f","0xeb2a45b9dac59659535c0aec2a4685de3b79ac8d697dd3329a43b80c480f7b31","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000196","0xeb2a45b9dac59659535c0aec2a4685de3b79ac8d697dd3329a43b80c480f7b30"]},{"address":"0x03f7724180aa6b939894b5ca4314783b0b36b329","storageKeys":[]},{"address":"0x07e0edf8ce600fb51d44f51e3348d77d67f298ae","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000c","0x05adb633030d8d54da2381075d18bdc05a793dfbf76d97cd8e98a1d1ae39dcc3","0x0000000000000000000000000000000000000000000000000000000000000007","0x8aeec6bd8c9fc3000379137e7043cd0173e3cb204f76b1de95b97d8b667959b2","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0xc3d7455bee9868577bb56f43327cfffc8afc7a18b864e82d323320c141b2ce76","0x0000000000000000000000000000000000000000000000000000000000000015","0xa022cbe094d6365f54f49093ce7a0be53a3634f3fb110245bafbb252a39a79ba","0x0000000000000000000000000000000000000000000000000000000000000010","0xe499bc236e8314ac20e78349e6b4ec6cfec6f2c69c1e87e6b3781c3cf9fc051a","0xb24892e25e57d74f90aad96d0103c6a5d238792d42f1a3e024ff54d1de2c6e4b","0x0000000000000000000000000000000000000000000000000000000000000011","0xc9e2f387119a8df58f3d7c4f05ecc0f8977e9da2dbeb9ad99ae4fdeca3277be4"]},{"address":"0xd195965d637f4e02b7f4b553c4683c202a162e9e","storageKeys":[]},{"address":"0x29bbc2b5aff41a2143f7d28fe6944453178f1473","storageKeys":[]},{"address":"0x951585733f0302630af2cb1ff021565352a86659","storageKeys":[]},{"address":"0x1111111254eeb25477b68fb85ed929f73a960582","storageKeys":["0xfb86d251d2d8efbea48ee2a47bd76a261bef6ec3020d9041b487d21ce317b8a1"]},{"address":"0xcd531ae9efcce479654c4926dec5f6209531ca7b","storageKeys":[]},{"address":"0xa0d5ce77578968d6bd4cd625344e0fd672c22d65","storageKeys":[]},{"address":"0xb53c1a33016b2dc2ff3653530bff1848a515c8c5","storageKeys":["0x740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd63","0x10f0e20294ece4bd93e7a467dbf22ab9ab1740ebd0a532cc53066601e880c0cf"]},{"address":"0x0af3a44aa2048ae1106a42877b9a8eee30653bf9","storageKeys":[]},{"address":"0x99a5995bd8fa3e1209a5272c4c6cc3365cfab0a8","storageKeys":[]},{"address":"0x056c1eb7c23feaefa4ce9187aca960529868fd92","storageKeys":[]},{"address":"0x14fee680690900ba0cccfc76ad70fd1b95d10e16","storageKeys":["0x44f7d82be682e34a3383629805b4c0d7cfe21c89bc29a1f25f155e1b9ed71b22","0x0000000000000000000000000000000000000000000000000000000000000014","0x18df128b82e8930657526e6fb5f92697a1f2317d07e5ba164eb5ba5c846e407a","0x23cce551d9ac00c581147e0d82102e5ab14df4677fb9cb69caf18590b1659994","0x0000000000000000000000000000000000000000000000000000000000000007","0x0aa767a32f1657645f98dc06d4a8dc5ce197cf770ef8cd79e5a2ab7c78023448","0xc248f3ee5cfe723c285bb7f188849af5ee0259f83f79d56b3c78998171be4850","0x9192a4c91a4b12435fb2396493248f068670c887382c1570b608adeb2b520af6","0x55dcb49e63a67e98541951b2916f9f4c5aeda940756e13fbdc1c3ee687f7aff3","0x59ec410f064c401da2bc1461018e0363be03844b08931015145b3dfba3094fab","0xc80fc2e7c48c344663e6847be6e7441887114388d10a3ca2cbd48b78a171ad8b","0x0000000000000000000000000000000000000000000000000000000000000016"]},{"address":"0x531842cebbdd378f8ee36d171d6cc9c4fcf475ec","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db"]},{"address":"0x31896ebaa868d34def9225f46cbfc0b1c25aa779","storageKeys":[]},{"address":"0x7e75debaa645805b1aaa4c5a41aa11dbcb198215","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x11b815efb8f581194ae79006d24e0d814b7697f6","storageKeys":["0x32d80bb380a6153715a380340a591610b4f5a62ca0809dce09eefe0e7c37ea7f","0x00000000000000000000000000000000000000000000000000000000000000a3","0x00000000000000000000000000000000000000000000000000000000000000a4","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x949d48eca67b17269629c7194f4b727d4ef9e5d6","storageKeys":["0x57767c446c539bbc565f295b25496cc8ef54f96473e0388a3f906848246cc146","0x40e0186d76e7e3140e8cb8ea3e58b2004453659ae684588b16ed398c2357f14b","0x46ed70dff4e88de7d66e6571d3936721e1c2e255e7f2b669fb59a70439131f38","0xf1e6cf0a638e3fb130629226277d68693a3dfce33cabe9b890202ce5e6d3cbf4"]},{"address":"0x4585fe77225b41b697c938b018e2ac67ac5a20c0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0xa00e9f45e9f0c328446d13a90db1b8ff531c4946ba6a4294a1ec03159cc44b19","0x0000000000000000000000000000000000000000000000000000000000000103","0x0000000000000000000000000000000000000000000000000000000000000104","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xe95f827838fd9419ef56d7e588f4c8c12060c91e","storageKeys":[]},{"address":"0x6ac108c4c3fe7f4d367513f599da1b9df7c43433","storageKeys":[]},{"address":"0xde8850337c25617580fc337c18d8c6f3e50679a4","storageKeys":[]},{"address":"0xf183185f9b2effb904412c5e89a8dfe0281457cb","storageKeys":[]},{"address":"0xe91d55ab2240594855abd11b3faae801fd4c4687","storageKeys":["0x973f33c0e434b580eb2ab7087fd95bd381f4422eeae16f07a423a190bb1f31a5","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db"]},{"address":"0xad8629eb236a1a769898d67c7da58b561d4dd5c3","storageKeys":[]},{"address":"0x059ffafdc6ef594230de44f824e2bd0a51ca5ded","storageKeys":[]},{"address":"0x6f804af4895e7a17daf4dab920f31104e930a77f","storageKeys":[]},{"address":"0x4087456720119e9153bff24291f0605cc6449a48","storageKeys":[]},{"address":"0xeb440bcc93d3bd714fb874e1f24a5ee7722b8c45","storageKeys":[]},{"address":"0xaea46a60368a7bd060eec7df8cba43b7ef41ad85","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x9732bf2da26ebae5a8f3e0f82de48231224a6f2ab57a0b681c3e6b1b5c42c58a","0xd3cda6710bed842b507c8ca89230f38cf3b047970c3ad22e10aa575020ef8880"]},{"address":"0x5fa39b96dc7aa99ae8ca60dd0427f91ec86db277","storageKeys":[]},{"address":"0x07c904d8c04323ef9fe6bf13aaeba05b62c54825","storageKeys":["0x5bd3e423fe09fb8b6ff74d7ae9502c5c5066ec362d832a28912ad3d41b5d991c","0xcf5fba3d34590e8e85f0c5126a7a9e09971b2b52891635223dedbdf4a63f17d3","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000010","0x16b11da3347dbf636d5aca769e49718b1eb46a2a72b79784302d9535222eda88","0x4aecb740b55e2c6254de1063cfe39b0abda92a23413481ac3023c73cd0384a9d","0x0000000000000000000000000000000000000000000000000000000000000007","0x0fe5c537094c9245254d30052e75e832ae59120fd2474a2b5c1a781ca5533b4b","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000b","0xba2fffb5b294c0eea83bf5f5e3e4ff09e5f87ec0dd5fea8e35b533e05e399403","0x422889bae5c575fcc8260e224085341ddf7aba1cc1f47370f6eca1557cbaf989"]},{"address":"0xf3808ab2a83efcca2081e427cdc15ec0aa6ad79e","storageKeys":[]},{"address":"0xa88800cd213da5ae406ce248380802bd53b47647","storageKeys":[]},{"address":"0xb4a6d352f8a89cfab5502a6ed227bc3ec7490cf3","storageKeys":[]},{"address":"0x37bf363f0530ced7f7088bddf3931c446d769ccc","storageKeys":[]},{"address":"0x60594a405d53811d3bc4766596efd80fd545a270","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x608d093ce9933575d78c0796ab9cdc4f1c4212394db9b5269ffa8fa22c833167","0x0000000000000000000000000000000000000000000000000000000000000066","0x0000000000000000000000000000000000000000000000000000000000000067","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0xc99c679c50033bbc5321eb88752e89a93e9e83c5","storageKeys":["0xabf3624c8a015c02dea7345efed1d2d0e53c714036944b86c6fa8d0e98a31d79","0x9c364783779bb46a22caa014a6347200f929e726b93284f08d56e9f7853fe1a0","0xdd3be26bcab0f34289c2cb748b0ea92f67f86ec30cdc15b3c74d8df362b774d0","0x7ed03aa81c5ef0bb64251ee7eb1c2f293f198bc7d89f2d5be8eebe8e5ea98a3d","0xacf8692bc1621db186dfbebe1fa4758f3f5724eade94d388df63491f4c572561","0x127e093215bb2d405ab770d5cbb56864d3fa2c04321a3524a538520805ede1b2","0x95880cd37239b96192e9f9c5ed0deedcc21bd06fef79ed857e9ef9ac74470a3a","0xfd58d2fa6c8041f804957a0454cb4051c69ba6246f18b6c1d9bec54a82639247"]},{"address":"0xfa9c97893edfc2dbf18814467158fb7eada4d8d3","storageKeys":[]},{"address":"0x415ff1afc201eec50beff210a2f456674046920b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000006","0x637034ff9a9768ec1d42ca6e42f6582a3447eb554d12d9f5461218dd45d1b84f","0xe702df336400ab3ac9d83f673120f6829ea009c1dd586132aa5919c175c32dd9"]},{"address":"0x71660c4005ba85c37ccec55d0c4493e66fe775d3","storageKeys":[]},{"address":"0x1c050bca8babe53ef769d0d2e411f556e1a27e7b","storageKeys":[]},{"address":"0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67","storageKeys":["0x29bf3886dd698f1aa9baebc2edaefbf66002dc935f7e18dc4c3dd04a82a1c337","0x79d5796aca10e4405091624ef37a3c3ed6f73b7fbc2869193017f01a2c32f019"]},{"address":"0x755b1b57ae126f37138a67d6cc6aba15cb64108a","storageKeys":[]},{"address":"0x81dc771e308c76c3e06f635abed7fb24830fb824","storageKeys":[]},{"address":"0x538d72ded42a76a30f730292da939e0577f22f57","storageKeys":[]},{"address":"0x3f059a51ebec78eb78f724733d3d14ede9b1e134","storageKeys":[]},{"address":"0x1b36f43697f9c4700a8200032d7d3452bb3b4d50","storageKeys":[]},{"address":"0x98db3a41bf8bf4ded2c92a84ec0705689ddeef8b","storageKeys":[]},{"address":"0x808b4da0be6c9512e948521452227efc619bea52","storageKeys":[]},{"address":"0xb1d605200428394224a6356d57f295fbe21decc0","storageKeys":[]},{"address":"0xfdfd9c85ad200c506cf9e21f1fd8dd01932fbb23","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x088876687ac7c4c60cbc0690a4bfae0971964162","storageKeys":[]},{"address":"0xb2dd987769e13382624272549d1807d39517455c","storageKeys":[]},{"address":"0xd7623f1d24b35c392862fb67c9716564a117c9de","storageKeys":["0x79643732f0fe60b4b194a6705d7b99ca7bd8c3ea7ff976b0ae9df422b04f38fe","0x000000000000000000000000000000000000000000000000000000000000002b","0x69d964cd2e1a6e807317c407a8e32bf9639e31a60d7bc12cb4f50d8549a5418f"]},{"address":"0x1522900b6dafac587d499a862861c0869be6e428","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565"]},{"address":"0x72e6886d19e9318e0ae17f501ffb368480738a24","storageKeys":[]},{"address":"0x2d108e77ede06f89a0f285b2acc40491fb886ab2","storageKeys":[]},{"address":"0xb81965ddfdda3923f292a47a1be83ba3a36b5133","storageKeys":["0x0504359d2a7818f5457fc89f095b177d7a343e546844cde896347126af569b37","0xadb6fd0d435d41431f81fdb4ec6771dbcc650e185c08dede2212497ad76f4e43","0x98809d4ecc3cef10c6d8c5f2aa7ffc335759d2040bd100ecc9dac66f3aa617e9","0xc1d441304aabac8fb55664b9d185f32ad7fbfc203fbe4587b7a2f62650d4f3db","0x58fc7ac8c990d2b5029ddcd15ce34504df526b017a519f1863dbd1714f441afd","0x0504359d2a7818f5457fc89f095b177d7a343e546844cde896347126af569b38","0x0504359d2a7818f5457fc89f095b177d7a343e546844cde896347126af569b31","0x0504359d2a7818f5457fc89f095b177d7a343e546844cde896347126af569b2e","0x58fc7ac8c990d2b5029ddcd15ce34504df526b017a519f1863dbd1714f441afb","0x8bf9a5b818cfafea5126b6aafd5069579a913f49fbd610f9c7f22b863e48c4a2","0x0504359d2a7818f5457fc89f095b177d7a343e546844cde896347126af569b30","0x129580119028c4ac5f82a93190fcc88f91ef554512ba9caf3a0e82a389f48bd2","0xadb6fd0d435d41431f81fdb4ec6771dbcc650e185c08dede2212497ad76f4e44","0x2c2e07467cfdc9bf3997d92401683c8f031721867da8ddd1dd95e479e4a64f62","0x58fc7ac8c990d2b5029ddcd15ce34504df526b017a519f1863dbd1714f441afc","0xadb6fd0d435d41431f81fdb4ec6771dbcc650e185c08dede2212497ad76f4e45"]},{"address":"0x0b511a9f8e8ccbac76d4b32e6e6f53491f64b547","storageKeys":[]},{"address":"0x3e9d24b9a83d4cb144d01594f437a9b94ccc8d60","storageKeys":[]},{"address":"0x71a30bbea64bf575255263b13047dfcc6b78711a","storageKeys":[]},{"address":"0x9a772018fbd77fcd2d25657e5c547baff3fd7d16","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000006f","0x0000000000000000000000000000000000000000000000000000000000000070","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x7d35cc2b0520994422695eb24e3bf4f74e9cba2704cae72ecd9ec54409a56afb"]},{"address":"0x2a418a3ad456cd58309ed722fa85f1e564d3d95a","storageKeys":[]},{"address":"0xee9f2375b4bdf6387aa8265dd4fb8f16512a1d46","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xe8cfad4c75a5e1caf939fd80afcf837dde340a69","storageKeys":["0xf005d90a19dd82911cf92f3f54131b64ef1f4a5c7ddca3eb63a730828b3eda02","0x0000000000000000000000000000000000000000000000000000000000000005","0x12b8ba28555eac908c7ceeaffdb0aaf4c1c68d4c264f05b89b617d175125e4f7","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x3999d2c5207c06bbc5cf8a6bea52966cabb76d41","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x820f8b3fcb557f365f90864a2a22cd0f3731e289","storageKeys":[]},{"address":"0x5a5485a1b0f83f84d62bec94e3c13f05732b1405","storageKeys":[]},{"address":"0x0e992c001e375785846eeb9cd69411b53f30f24b","storageKeys":[]},{"address":"0x0e944d59b8e3a9deb884676440006acc79e35f74","storageKeys":[]},{"address":"0x39aa39c021dfbae8fac545936693ac917d5e7563","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x05296c87464aaf39494f320324030b6a33b96407c2f70d16401aa3484e5cd1f7","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000012","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x6481ff79597fe4f77e1063f615ec5bdaddeffd4b","storageKeys":[]},{"address":"0x8fef490d614fce8b93bd6f28835dd35a8b3229a9","storageKeys":[]},{"address":"0x44a72754b072998e14ae22609ee30231d33c6ec5","storageKeys":[]},{"address":"0x2b33cf282f867a7ff693a66e11b0fcc5552e4425","storageKeys":[]},{"address":"0x16938e4b59297060484fa56a12594d8d6f4177e8","storageKeys":[]},{"address":"0x371267a1863080c5f39229183350e0d87d39743e","storageKeys":[]},{"address":"0x81076d6ff2620ea9dd7ba9c1015f0d09a3a732e6","storageKeys":["0x0bf9273d9da51b108efc6f22ae746ce922368c9d6385ab8e96bf8c607a6abefe","0x31e98e0167b11d20ad3645ffaab0d46b71126d2290e918b23fb89f617ac5dfa8","0x000000000000000000000000000000000000000000000000000000000000002a"]},{"address":"0x17144556fd3424edc8fc8a4c940b2d04936d17eb","storageKeys":[]},{"address":"0xdeb288f737066589598e9214e782fa5a8ed689e8","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x74bb4995d5f1302b55b14bf6c1df9eb39e3f57ce","storageKeys":[]},{"address":"0xb23360ccdd9ed1b15d45e5d3824bb409c8d7c460","storageKeys":[]},{"address":"0x1634683fe980cb8544a37ad2e00cdea14b6b0ee3","storageKeys":[]},{"address":"0x98c3d3183c4b8a650614ad179a1a98be0a8d6b8e","storageKeys":["0x798ccbe29346a5fbfd5a444781e94d0e404758abd7e34bbd55822bd2969d23c3","0x40e0186d76e7e3140e8cb8ea3e58b2004453659ae684588b16ed398c2357f14b"]},{"address":"0x11950d141ecb863f01007add7d1a342041227b58","storageKeys":["0x6bfeff439fc3303d403eac8f3e782e7ba6bff4a567c7fc87d5d3903899f388a6","0x0000000000000000000000000000000000000000000000000000000000000020","0x0000000000000000000000000000000000000000000000000000000000000021","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x737e8a8b5f36a388638285d558f80af7fbcecb8a","storageKeys":["0x627e3f23a37a531864664c886159447b884defd31bcb129d01d44041ced07df9"]},{"address":"0xe290c42db4dd54717b6d26ae5ea3ae7da359f034","storageKeys":[]},{"address":"0x5f1ee29361206f1a129e808736f11598356c6031","storageKeys":[]},{"address":"0x5b9e8728e316bbeb692d22daaab74f6cbf2c4691","storageKeys":[]},{"address":"0x235c8ee913d93c68d2902a8e0b5a643755705726","storageKeys":["0x51a58dd99f3ea493f642be715c0ad0564ccfecf4561ae59de2105e5d0f5a5b44","0x0000000000000000000000000000000000000000000000000000000000000012","0xa49bdaeace4a1dd899022db0ee5a98cf586c6a8b4470a8ed149a023c4489df2b","0x55c32dfd9da1450d01c7ed9cd745976a7e63b057bd6d1210c3ee4cb67e6c91c2","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000000a","0x8f8b3b3bf45e71fa27f37364e8552839302e8f27a65455f04f2aef5a28efc57c","0x09e2ff9afe7a62018fc3e2297bb0f5fb17cb71366e867f11e30256536a2894eb","0x000000000000000000000000000000000000000000000000000000000000000e","0xf08565da301a221857aeb4616a40703c4534029e82e52df968583e1b2bbc29c5","0x0000000000000000000000000000000000000000000000000000000000000005","0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000b","0x19a919343236c02e8bbb28d160b783f78a53679e405ae54040da30841a0574a8","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000011"]},{"address":"0xecfa4e7409917cc9b08a4b02a1b42c3515b85819","storageKeys":[]},{"address":"0x6cb3ee90c50a38a0e4662bb7e7e6e40b91361bf6","storageKeys":["0xec88513cde3236b9759acf08a05c3215ae8cec8acbd844991b14db8cd22d5606"]},{"address":"0x3fda25f27211a138adf211f4c060f2149674be6d","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000007","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x5ec4bfcbc12deebbe745d7d92801354fdaa6452f","storageKeys":[]},{"address":"0xa40f67074bc008081cc2596abcd7312952aa67e7","storageKeys":[]},{"address":"0x6598c42d7291167f3a36796b166078422ff301f7","storageKeys":[]},{"address":"0x6982508145454ce325ddbe47a25d4ec3d2311933","storageKeys":["0xba43b84b17deebeec7f36d05cea2b2641fd23600f9e29f5940ca5a63978b912d","0x2cd9b4c4b045b96f74c9d3db0a7c0faf11db8b60aa05374b95c0738a129e5e66","0xe938cbea75928dfc1b527e108d009324e80bc839aeb53f39fe4b2c4a1a363094","0x0b18a50b508350f7c2dd395b6e624b1eb63ca8b44ac906ea700bf0743c2aad59","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x9f7033dde692f37d399f7c5e42e459df2386c9f0","storageKeys":[]},{"address":"0x9155bb1d5b63f924f399995f31f9c73f0a64e227","storageKeys":[]},{"address":"0x9d4578c813d69745092a4f951753ed2b28056279","storageKeys":[]},{"address":"0x2f29943a8ae002074f2b00858722e528ca3e01d8","storageKeys":[]},{"address":"0xbf94f0ac752c739f623c463b5210a7fb2cbb420b","storageKeys":[]},{"address":"0x5bcbdfb6cc624b959c39a2d16110d1f2d9204f72","storageKeys":[]},{"address":"0x7de0d6fce0c128395c488cb4df667cdbfb35d7de","storageKeys":["0x2f4107203adc28ceb484d655e8b8c689f62690ea84d57f1d067d52335c928ffd","0x000000000000000000000000000000000000000000000000000000000000002a","0x330a461656c6966361af62a41198dc5b917e97fffd5a3b22fd236fecd1fdbedf"]},{"address":"0xc15e41eb55af2c0f7c34fb150a688f672d4b1be2","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x73a79fab69143498ed3712e519a88a918e1f4072","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000069"]},{"address":"0x5927a822a5b8d5efabca902302fec6a2a0ce1a22","storageKeys":[]},{"address":"0x102c776ddb30c754ded4fdcc77a19230a60d4e4f","storageKeys":["0x6a0ecfa4bda432376ec1839e62c6ad040351e53d4359a39b95a9952a8809e766"]},{"address":"0x8a32f49ffba88aba6eff96f45d8bd1d4b3f35c7d","storageKeys":["0x49e349d4f386739afdf8e55db7675b584d46c3b2a603eef62554e21dc437b5db"]},{"address":"0x9c9093f71e462ae9b6b4648ed879a2fb1668a4d3","storageKeys":["0xb429116be0125c32063a92ba8f9335363678a83b1b3fd09226f955b16a252759","0x65fd9ef4e3fa0bbfe82662cbae3587ab75dde2dee8ffe1e19be49c42ea857983","0x22ae4e1bb4478d22850525cc287e1e75d275bc0f415ae465e20117943b80e424"]},{"address":"0xdfd5293d8e347dfe59e90efd55b2956a1343963d","storageKeys":[]},{"address":"0x09e4009971f9745075df4494fcbcaeb01582548f","storageKeys":[]},{"address":"0x3b9260a928d30f2a069572805fbb6880fc719a19","storageKeys":["0xd330d89cdd04aee2394d3770fdb76e861e5bf5af7f5638ebd8b9cb9dfa87520f","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xbf2d58698a8a215f868cf24baba360c77266b466","storageKeys":[]},{"address":"0x21a31ee1afc51d94c2efccaa2092ad1028285549","storageKeys":[]},{"address":"0x3c3d457f1522d3540ab3325aa5f1864e34cba9d0","storageKeys":[]},{"address":"0x17b31762fcf95a6c8ff5666a19323d5ee525ddde","storageKeys":[]},{"address":"0xf0176e493e8914cd276bda5aa6a91dcdf5609c3e","storageKeys":[]},{"address":"0xa3ed5b592855635c1fbfe1f59486578050234964","storageKeys":[]},{"address":"0xb8975328aa52c00b9ec1e11e518c4900f2e6c62a","storageKeys":[]},{"address":"0xd4c4044aca68ebbcb81b13cc2699e1bca2d3f458","storageKeys":[]},{"address":"0x1796ae0b0fa4862485106a0de9b654efe301d0b2","storageKeys":["0xce6c65c9c3720eefcaad670f10850a21220d706db266128b02196b2b821f46c6","0x30b71248e9c3062e703a3064a163a14e1973646033fd303b14f844df6d46883c"]},{"address":"0xd784927ff2f95ba542bfc824c8a8a98f3495f6b5","storageKeys":["0x7d63527ad1c40424d1866972fc34c3132ec8237fe7036b7aced149ffc12c5c10","0x291444ea7c00a38f3d9c0601b1589a1b31da8aea876afde06f92a7055bf08527","0x0000000000000000000000000000000000000000000000000000000000000034","0xc30a6c66a97b946c6e5ce9899976ff5676feb5097b73f95c40985536be5d6f52","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0xd3d9ddd0cf0a5f0bfb8f7fceae075df687eaebab","storageKeys":["0x1ddf7a25c6ce56ee9f12954eb3e786c824c546b0b0e0d8e969cc55f856373d46","0xde5a730b6759f5eacd40cdb0bcf5db10d2dc99f735c85b603d09701b56d6fa4b","0xfcbc0e99f0dbde989e7754c500c808572a1eaf5be1367ad687b9ab677e25f98f","0x0000000000000000000000000000000000000000000000000000000000000000","0x310c1bfbb10ad6987383feb413590481fd21c9bff37e40f326d49c3ee363dcc7","0x5ebfd1a7e94d09423b636e2912b0064abeee6d201af983701e39dc3b677cb20b"]},{"address":"0xc6265979793435b496e28e61af1500c22c3ba277","storageKeys":[]},{"address":"0x69fca11480d66a09f09d2280f806b8a5b85cc7fe","storageKeys":[]},{"address":"0x514910771af9ca656af840dff83e8264ecf986ca","storageKeys":["0xaf89390a66013b9a552732b1e00ddc6e7aba323d057e39b8175c0c4714d6b316","0x4e506517218e6fd1a30d242ea8d040f7cca9231df83c626f127c989eba48e518","0x9c26415195f1f5086037f2f4e262ac2fe5ad02733146273591887dac05d1b31a","0xd330d89cdd04aee2394d3770fdb76e861e5bf5af7f5638ebd8b9cb9dfa87520f"]},{"address":"0x51c72848c68a965f66fa7a88855f9f7784502a7f","storageKeys":["0xeb702a743cfd21101b4e3bd7a3ec8cf8d1ce01f39d4073c9dee5374b01201602","0x0fb940e5a8f01c04e0a95326b0cc1d255b3eae95a2b9a9dfdf12852a20d72361","0x2751eaf94d6c4011edece59f1a1fd921ef96d564fa55c0c6c55748c57e401220","0x78590aea451494431e7f55a43d0ad73d5acbfd1d4035af8d3c9f04c49c521d33","0xe38627b3e89ed8fab02797f51f2e2ea77e141a5ead0c7e7ca04495e891ba9d43","0xb80a9d7d1fb9cb04e9157f542397c1085aaa06f2cf93c672a9f9d45730146d5d","0xdfe5939369c15625a98ab6fd51697e8fec60ad9a81707a4bd7094cf48c04d68e","0x0000000000000000000000000000000000000000000000000000000000000000","0x14260e1e39c9608d07edd9e7d0a9cc83880f85b021a8121ec429be8c6dd99309","0xb2dae8acd38eb9f57a471e2797be145fbcdabc2615a294726b919ebdfb713ffb","0x9bca1234a4955183c0ec3bcf1df677c6c718128f5d868d3558a927461b2476cf","0x885629f4a4b0f4dd95ef131bfc0951563f67cf9cc652e9e5925e2ccbfd142f66","0xd4626a8b64705fdaf56721e89daedd11d9543e165d280b0992cb61da9c7b9d37","0x927a0c57edcdfbce1739182a4eace6e124988679bacee2a219a50707582f30c1"]},{"address":"0x1d5e82dbb15ccc8db23a9b91252bc97e75f5abe7","storageKeys":[]},{"address":"0x6d4073bf817c4cee7ecc1d2037c3eeaa4ab65d8d","storageKeys":[]},{"address":"0x619beb58998ed2278e08620f97007e1116d5d25b","storageKeys":["0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x3d9819210a31b4961b30ef54be2aed79b9c9cd3b","storageKeys":["0xbccdc544072f1d154275788f84bcf1a9429a7563287106936a820738716d6e84","0x189ce800d0d168d2207e1c5ce2c81af16afc58492d6accd0bdf895381c11ed47","0x6c627db00b3ec0f04ea2ed17d2c73909bd167cfb6ad5af5b2c216bc8ea6da0d9","0x8fc13d1caece6612221ef6979b11849610022c9b44e3f1d08267517678547dc6","0x7f5f2787a3910709ad84d7203166b9923b1065447344f459da15b31d9435affb","0xe3a7a80f43ed498b93fe658098fe84fc45e7f4e46d0da1fe5058a842a2737af8","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x9f4911feb3555946f734be0d38ed8efee2149ef0","storageKeys":[]},{"address":"0x7b4c392bca0986b5f9f06ee1e27659f8b5bfb45e","storageKeys":["0x3bad1ee22d4b4da4e4a9857d797772ee449c4c30956c50fe7996cd53981246fe","0x24d6ca0dac231c1f2b7b3f8314f752965620e80fdd76881ffdc9705a01c52871","0x69f11aed767574697e2219341ad07e5e01dea74083d6c0f1c1f411b63dcfaf89","0x87e9eda8959df12f811190dda83c57b95a3d4f8f6571f5b8527a536dab554bb8","0x393d880bd3e96fdef891dd8860dd8e55a5015b6a66e8cf4904d5194988e96640","0xd634291d4b735c4a1de76debf538ea631431e6a6b0644c3c6d9164f1408ee8c7"]},{"address":"0xddde1fa049209bc24b69d5fa316a56efec918d79","storageKeys":[]},{"address":"0xef9080ae61c13c8d389b1811b5708fb363f39be1","storageKeys":[]},{"address":"0xb62e45c3df611dce236a6ddc7a493d79f9dfadef","storageKeys":["0x3aae9e214e2fa8e50f1906539f07d372cbfb95d0726303e7eb3451c9c4804bc0","0x7f9ca86731c9630c99e10b9421238bec3c6485da63102ba8fa22efc8e7c71b28","0x022b476bbe7529ee5698d0416095c6df52c3c69cdf916c45b119690e7b1f1f86","0x4ec4d99ec6d2fd0a3ee3c2c04104ae9b67412fb2052c8b0929a59eb093e25663"]},{"address":"0xc662c410c0ecf747543f5ba90660f6abebd9c8c4","storageKeys":["0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fed","0x8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4","0x9b5f19058eee7c63de4e0d2462612dd31cec3f879bd630c15aa3352eeba3130a","0x67963652696f3a8e8976c8d0956f2afb2fdf053b99be7bf625d956fc88a52815","0xb4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fee","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec","0x04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e","0xd1d11358ad7cba437acd2599ff8f7c12b9b97ab226aeecd4709c260804b0341c","0x814b7854122c5e357b0afbd8a19ffe8472df7a91952e0e5017103d17b74cbb6f"]},{"address":"0x63a395b574d5e23c3dbc6986be5994ef6743afa8","storageKeys":[]},{"address":"0xb5cfbbd7e6b98475afe3c8ab2aee4ae852146b52","storageKeys":[]},{"address":"0xacfc50ec5fe0fd039e83380b8ab343b77a49704f","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xff337e9629db413670f20a0d35c46edcfc9d609e","storageKeys":[]},{"address":"0xb04af4843e3808e1fe6f7a8ee4f456937d7afae8","storageKeys":["0x24f2478871bc2a12795c3586c48ab3ef0cac33a5bd5513e8b5948eb1c0cc252e","0xc248f3ee5cfe723c285bb7f188849af5ee0259f83f79d56b3c78998171be4850","0x0000000000000000000000000000000000000000000000000000000000000001","0x2ac45eda366f11bddaaeea4e5ed59efe98a8820fe29acf66012f683803cf5f4a","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xe8e847cf573fc8ed75621660a36affd18c543d7e","storageKeys":[]},{"address":"0x704ad8d95c12d7fea531738faa94402725acb035","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0xf2b3a892b1a865da32c315d5b59c5da7883a421b","storageKeys":[]},{"address":"0x085e34722e04567df9e6d2c32e82fd74f3342e79","storageKeys":[]},{"address":"0xcfb675758bf83ba714cb9e68b3a51c90dae5ca7d","storageKeys":[]},{"address":"0xd343d5dba2fba55eef58189619c05e33cab95ca1","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0xbe69d05f3873f044403ddc603d07591b324cb662","storageKeys":[]},{"address":"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xbcca60bb61934080951369a648fb03df4f96263c","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x68fdfc39b76b20f280a010f9491977d8f5b24e2fc048cfc4260b97516c77a322"]},{"address":"0x150f8843d15e8a6c43ab0b4dda755bfc4d63a773","storageKeys":[]},{"address":"0x4a632d9436505dbd6e5062c16d321b4c33bff466","storageKeys":[]},{"address":"0x3b94440c8c4f69d5c9f47bab9c5a93064df460f5","storageKeys":["0xbe4edb14bf9277de627bf0c12b0865f158ee175e1e0fdbf25d08f3713f0c0714","0xba69fbfc5dc9b589e425165582693c74d49c6df6d20771028781a58fcb918ed7","0x832aa3b925bece9a665bae76f2fc35ac4f94ff7e74fdc223e0e2e8adeed434f1","0x6e22e1ccd2db0c08a8ae5f96a77e09fe450e3f1cce3fe3693643b59e38e50cab"]},{"address":"0xab3044d92f7d82bf332898653453a2d9744b4a36","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000004","0x621ad9740c6621dbee22a3d5a4bab2913510f4af07f4f52267f5fba5cdd33954","0x87906a5499ff68b93966dffb8ded6955834aef23e1cf49dab904b9f99e65e6d5","0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8"]},{"address":"0x4b15a9c28034dc83db40cd810001427d3bd7163d","storageKeys":["0x1d9847d0baca698fa161dce6e5e1be4c45442375d5978acdfdfa21e7c84cb69a","0x04a9d33581520c6b378ef218a3f3d8ede7db9022a24a6bcd87bd19b1f58f9f69","0xf81e71c92c32acc914377acac7e5a632b30b2cdb5bfd66ef0d862f2aa3008820","0x000000000000000000000000000000000000000000000000000000000000000c","0x96d48c2878ccd570cfd9f4983ad0ecefd29b77478c3357528825f04b7cda9e54","0xff78195653be9178cc65cf0997516165d0e03c5ad3a30cbaf0524ad833d2897c","0x66b08413dd69a08c7c098c5026d58cff7b64f9033ccb45a77892ec736ff0cdd5"]},{"address":"0xc2c9dda5158f66e1088333cb2f127f46fe843c8e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0xf377e614ebf060ffd3a592667b14b65ef761b258b68bf422a9c7bfae70ee46e2","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x8bb164dda7c138a8c768cac69a99a22379186cf6","storageKeys":[]},{"address":"0xa4e5961b58dbe487639929643dcb1dc3848daf5e","storageKeys":[]},{"address":"0xe8b8db87ddf242ed56dada79aad5bb0f3db7afa3","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x5fa60726e62c50af45ff2f6280c468da438a7837","storageKeys":[]},{"address":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","storageKeys":["0x1f741f753a25bf054ce5bb0d03898f7837befc299fefefab8f05449dd31a66b8","0xa58e983b6bb89647e2658383cfbd16dfc6af473fdc1559c7b788017f58709f9d","0xd131a243a4f8a65fa707b991e8aaf35b5561b2d012ef14740493b1f75e55c0aa","0x78a0666848aae33467fe11a605ba1568a1e9311861554cce842c273f828dd1ae","0x3ba73b07f53cb93ccd18be78c1c8e9918fedc307255b31ecbe55a2bceb8cb8aa","0x4b1db8e192bdf3fce7826fd903b7b3315c56d2770bbbf2cae5cee960bd96a642","0x8d07a8c84a4d3f89791895fd1a6b044c012217909cd4417dc217c52ef105e44e","0xed0cb59692398309f3b66faa75559527f5421a4612ae8a70179664e230f82c7e","0x24c09d9cd41e893582ed9b685c2f61008d4f103548177a791173648a3b141ab7","0xe6680f7eb980be5bdebf498ff1981dbdff16365e736fc0d627d1ab4349ea6027","0xdaa46e04254ce41665cda5fc89278cba437838d5bd53364871dabc5d5924b410","0xbccdc544072f1d154275788f84bcf1a9429a7563287106936a820738716d6e84","0xfdc098bff113ca82d1b3b255e9c5e41664b4b589cc52d23183e245883f6c562a","0x63102869cdb351403a8051928e23543fe78bafcc1bfee686ed78bdc7ec3124ac","0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0xd1e9ab0f1cea773167dc4d9bcd074aa45fb231cf0400f4d29db5801c26e8ae41","0x0000000000000000000000000000000000000000000000000000000000000001","0x73c27597781c557765f98a1fe3273f2be87471e4dbfcac56faa155f36d91b098","0x7ad2430453561ef01f93db7a6a45f6f5d908324318fcfd1560c3a758175bc070","0x8125c7b6e358fb37977f8b20593f6ab48ed3e7e123615d3b74e99497e98341b6","0xc830cdf76eda2fd18d45c67a174feeca76eff3f8d2dc939f9c5aa11affd3fac8","0xacdc1b0980bcd6ca7322abff1072a3bf52cfefef165c857818a66b303daff429","0xf274220561bd9979e3de72bf27262aa9b0403e8ff9a6cd3050dc9aff22a0a08d","0x3dbae6a11efc91068573a3f3718075711a52e48b01fcfbc380dd6d6f68fce5fb","0x713782da38878c1e133104840d879e206672fbf86c7012091549db2ad5dd1ae9","0xe1e631c3c3c30b736d406ce1adf4b1426bd8c5ac9dc20f3a06ce9c367f3eb032","0x721115dbc6df353e9e1bafc88d67c7a7b75b36b097f248664a9c371a9cc3d86c","0x605f2bdb17107311c0ebda453fbcbae2642343c1fa5d39dd7ada23d484075cbb","0x44f644dcc1015f1bf35b84f1ec7d6afd47a3aedc2db7e424577a3822b1dfe65e","0x394bc2dd0f94516c3e05c0f71dfc4e0ffd5eb4795de812a54167849af9f751a4","0x854bade951720391b475dbbc09128e86c61a4933af5daf72486d778a52b8ace1","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0x45544f144ac23be62f2d1b3bbe9593176ebea62c731b38425d489a7b202f73e4","0xb04fb5fc5ab7f7e00977de50f7c256894d0092ad7e91d00477cdf5619d3295ce","0xa654c14b4af30b2a1513bfb60ff8d6dfab1b87e1b3942a80024a1967cae3ac53","0x88f3305ede7c585ff29cd4b83bd948374dd88c902c64c23ce58790c290298d94","0x239bf8e621b27fd46f4d8632f0d6fe922ccacc92c199c77fede8a2d083c39d82","0x3a3aec5717af62dfc0f5ede964a3e44cef7c5ba4453963ee6e3545ea9708690f","0xd1d8e54aa17b52061dee258dcef066e085f29a75f4ca876126fb8a255e83591c","0x80270de4da90ddfee357caa7de29d60f3193fb9e2bd5bdffc18247b5137cc5f3","0x10f2f3b7c4fa9683a30144f0c344528711b7ff1b6d9091d8c85fa4d0929287b2","0x1ba662b9c5e456a94293853e47f2618b8044d5c2a7ad5390832e007ea35c00ea","0x17d309f8e43b7c8f34242d99654a84580b47c572b8d9b0c740f62ac252246239","0xdd578657406a8f2db893e41d9b769d14c2739e31e1e36ea50390017d9624663d","0xd938959fcb5467b0650f8f17a7af8d7aa736d8973aa2525820865cb6a32c6c44","0x5e1f2fd1d92f67a9febf63c605e83a0a253ea3ac522d9767212558f5aef55939","0x15a0cbb458e788285becd971f20ce3136806005c1ee80707566079f95cef342d","0xc80fe19981a5b35aa5cce4de177cbf80c82072f8cb0a9b194313dd4dac73318b","0x4e74e8bba02d59da084150af724b177738d936bdcd930546d6e8fa39cb7608bf","0x25ad1795301616dd3463e5a1b07c52b661a91c163c4b45269609dacd0a899d1a","0x26e3d1b906ec1d9d8f2e85e8e65ce887158ad9fab7166cbbf6a614b9952c5455","0x078e34790eb983ccdd9ae3a3283e5cc9ccb7bcd5ed727a00ed701508181ff8fe","0xe5cf72a733f56d39a2f80be19fe0ceebb8d89b847dda152aac2c26bf2407cdd3","0x6cdb3e6d3e74610146938ff89649bb2f5a5715da9abd053dfcf11a2343ea3490","0x891251a24261f0f881c34f15b2b5979be1f467d246f8ee93e50b92b8fae6fef9","0x0ac2bccdafd9602c6511a5bbc76e63a724ef5a8db45544b222eff7c1c4253e0b","0x8ba0fbf5d6143c4f0fca5acdbcfbc8d865972d2ac352b0968dc655c7f53dd673","0x613e37f9116ca49b43f08dee513a87e78c3c5a4880e0f389e7366805cb2a969a","0xa4b1c61a508b1e3bd94d88ed0d75f39c6ec3221b792961f6aa5fd9d29f1f45c9","0xed453e8e84ba0f96584f9d33f83393be492e7dbbdaa1a2b188674002eb309294","0x7b297e387df36adb8170d895b3a2be5a1eec722e9db38d74216204b2cc59dcf8","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0x238fb56e14131e6a0c6d4afd6773fd359a8e0ec215d3af906bfe65414830c6a4","0xff07ee6e2772c91d8b57705e9d8ad8f91964fefd40f6d6e2f2b8113f384632f6","0x686d47ff3b63c8c416aa244f714e4d2674f92c8572bd2531117aa7fd6d2fb12a","0x816871738f2beed62d92204dfbfeac6a65c2fe37d2d08b445a0c0bee7c6f99d9","0x5361998fa8e73e10915d91c4ded587ebfffc80a8baa65b11af92cb500178c57e","0x49f414f220cabead4627bf003f9d9f3f0ebe76365fa6cd9a47dfb76a5a745c7e","0xf3d78c9384dad187d23d6c01f15fd76796209597862a78e94bed34fbbe2f9895","0xd3400edfa28fdf7eb01d3bfd4c45967343572ecf3afa2ba5cb3957f169acd526","0x3020d5b81a0bc3491f3cd5a8b8d1aaf1d036711f40535eff8ee52db3c2d1f538","0x2fc3a60d03f289b167da142350d2773910d3dcda1cd432b57c087634cc29be3f","0xb3dc4ae9e13ac4acb9b69cd99b9e830528d6e1c175382adcb03273cf4a8a7449","0x1b23a579721482d58bac6de83361cfa0e988b268d31d0400b8d4e824085a89d3","0xef9aa6e78baadd9fa11efc775ebe24781e6dd67d28095a72c3297161bfcd60c2","0x5c78b5f2f12a6dee29ce412e23130364cc07e81d34ecfdb12c0e677a104bf117","0x31062ad0e0b98e9c252f65642bb0fbed69386a8e6baab96797717fa736ad0c61","0xeb63bbe0f1a4672cd92e887a8f1182ed01c6c18ebe80039e2a3a14f3df59c26f","0xa75285fd893c4d64fd17ed31b6ea447551f8706f8f5968e91e38431484149438","0x71901719a5eb8aef036f3f8af568881562f22ef26efe506856bf55f3232b88fa","0x1fd11129af61843822dec4a1d08cc615a863d81c59c7e5847208232a591bd77f","0x4240f817d568e2b9ccda64e46ab25ad40fd6977c04f8b2f68a9684457555cc44","0xb7574d157c4abde95c4fa0abed26b21f8195b4607898e3b48aa49a7fdaf39468","0xc4a779d6798f07c607c7d2438d5566bf0a5fc3ddaf36534be97119ad659b43b4","0xb8ae5c6dc2a75aeeabc6989d62ae3ee6326bc036d9f30d89ea2b3239fdcca521","0xb8e0fddde34c752c6433ee0880aaadab086486c1512b24ae29b4baef0fb51a3d","0x707d21555577ed67b771e2f8af86b57aaf7370224655aea6dfbfd4a3227de429","0x0ed94544dd98388a102cf90a203cfc9464dce6ee3368321c0fa5029f6cf2d9b8","0x70c463b5d36499943c424d5ae8e8504095500e2c2e17a8acefb1df98cc040d3f","0xd535cb81e9f073138a98c202d7e848cf3c3c08673d20a81a0fe3c0361b72f056","0x38a75fa4481c378376a6c8615561d3efc7bef39e88570bb24280130d5c4a22cd","0x69f04a0a83b07d47b6dd3a5b21c984b777e36d924d5008ad706213b13d56ef2c","0x1755e51b8f7d0db4992d47b02c5b1fd9d6de1aa0182d2eb2922be75f1199f7ce","0x377f4034d9f3955c420e8e28f3d9c356343fc2f812515e428cebcb6e975a2363","0xd7a7993ea591581125813c88cdc08274c6957dbef396c701e1f529b40f1e2942","0xf4b4591ea932fa35afc016f29bbd5e717d8eaa647abfc939d7b5db603f3b93fe","0xdfc95fbb562f69a7deda4bcc940b9d9b301a6046015a6b822e9c2456077734c4","0xad8c1ae9ce37c4ee0bee8a56a141580032ca3c9eba881ca1d0ff54adf06670f3","0xc2ea0c7f74528ce0ccfce71772c48e9c5cc7868700da59af2e7f163d4e185613","0xc5e5664904199cfeeaa3544ba3c57677372d8112ee82a253946d90432327315e","0x49582348c90492f08fa99511514e68fef5a24bdcaaed7ee39e0b040c4bdba999","0x72dedf0880af9b2cc26746757e31876f259f60156ff2b9f76ddf96a98cc74515","0xb3110bd975a9f27526d482a373032306f3aa9967c8a7921c25103da8858780fd","0xf73e2a2b89727b612ca43c4af5ac5f79f5d2adc18653c70ac1681008f5762d9d","0x2d0d4f460e4daa53e343019bdd3766db2a8e830a89e6fd95801ac962447171a8","0x867719f591e1911b15b23b4f45d333065f1b4ca223ca009a0ffab9211641786e","0xdbe58a8ff109ac6c957f77e37f7f90d020e27b11c75bb86e6da1c427a9fac2ae","0x8f09e912278a1e40b587adea08586952192835cc54e6ffd8409bca14d1852179","0x1f21a62c4538bacf2aabeca410f0fe63151869f172e03c0e00357ba26a341eff","0xb02f089d6251a67bddf6ce4da48b359ab042d3c8f84c7def3474646bcb11f806","0xaaf9da845e46921ff270e8349ae2edbf48cd416b6f01fa9a8c2feaacd7aaa204","0xfd94a94294d6e86696b995741dfa8bb337e63a65dfd57d7bde0b0579df7ab08d","0xef223fc126ad81ade15fd47de0861b1d33a002828b147b14f523b408fac736c2","0x09c76cbd06caf0d4cabdf463e43d5a394bd466fad10617137ef2ea73ed61d114","0xe261b3431ea9f29fbe24d396b53ca883844f5d207288ac9d1c67ac04dacc6c71","0x66e18f664a8ccdce84631d7384c41e5b894fe9cfec6d93b4d42c1de8dab889c8"]},{"address":"0x0000000000000000000000000000000000000001","storageKeys":[]},{"address":"0x4e81b2900bea537464cfd703deb9600de47bd0b6","storageKeys":[]},{"address":"0x928ddd7c2ffa5cc21626bd5ee621a706017bc8a7","storageKeys":[]},{"address":"0xdc45492c27dc311800823a6379436138510f6953","storageKeys":["0x3bad1ee22d4b4da4e4a9857d797772ee449c4c30956c50fe7996cd53981246fe","0x24d6ca0dac231c1f2b7b3f8314f752965620e80fdd76881ffdc9705a01c52871","0x69f11aed767574697e2219341ad07e5e01dea74083d6c0f1c1f411b63dcfaf89","0x87e9eda8959df12f811190dda83c57b95a3d4f8f6571f5b8527a536dab554bb8","0x393d880bd3e96fdef891dd8860dd8e55a5015b6a66e8cf4904d5194988e96640","0x7e18d97b7f8d6d820a39a76ae68df7fafdf78d96fad47df5ec9dfb0a55ba8516"]},{"address":"0x01afb7d15d14c6130ee87dfed47f944d0ff1149b","storageKeys":[]},{"address":"0x09e050f40b3ccfaa568680bf0e459cf8dfc4157e","storageKeys":[]},{"address":"0x0eae044f00b0af300500f090ea00027097d03000","storageKeys":[]},{"address":"0x42eb6012f53c5acece0e5568a44ff46d969a1641","storageKeys":[]},{"address":"0xda98f5587564065347385e2ea39432d68dc670cd","storageKeys":[]},{"address":"0xd8ec56013ea119e7181d231e5048f90fbbe753c0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x5f607daee0670a2d1845c3bd2ee785e6cf56d8f4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x733ca30d19f193c1b60340697d066d11341acf2b","storageKeys":[]},{"address":"0x2c169dfe5fbba12957bdd0ba47d9cedbfe260ca7","storageKeys":[]},{"address":"0xdef1c0ded9bec7f1a1670819833240f027b25eff","storageKeys":["0x4a432555e3fde060855a28d4d0b3bf599bbd04b75121e1e4d841e85fbc68da12","0xfafa9e60b7fc3a82d6372f25242b5c1bd30e3927bfa454fa7233ccc186ec39fb"]},{"address":"0x76e222b07c53d28b89b0bac18602810fc22b49a8","storageKeys":["0x4a8360dcbf2fb9aa7ab86da1ac9b80c2b3519c759a2bef3e5f16c0fa8d6a9b52","0x0000000000000000000000000000000000000000000000000000000000000008","0xbad65403230c1aab0e91ca43bed2244f678e58b410f9823facdb161bdac782cf","0x0000000000000000000000000000000000000000000000000000000000000005","0x000000000000000000000000000000000000000000000000000000000000000f","0xa54a1d9627c99ad8da44c66b0164725b2920c9224056b92c88d945373f5bf811","0x62b519c8f2c5a758577ee07b11d8abef980cae7105b6096c6dc03f7865004e3a","0xbcaf2ba6637abde58bbc361da53e016b274b3fa38459f5876330a346b9aa9286","0xf98842e2fa2be07315e79bd73114ddf878bbab917ac38f430b03d90174fb41a4","0x000000000000000000000000000000000000000000000000000000000000000b","0x02b8d8834ad9af8d7307f3bbdbd773ede52b32eeb265e110116185bce8222791","0x81cb7f404d50d86308eae3a1ce17a4091fb0dd2a1a57846b2949c28029c085c8","0x0588d0c3a76602a35b103254e95b5b0d99294eb2f4ddee93696edcaa2e07f1ad","0xb5e32bf50149885d3d646d8982464d72de4ae399d83828a675f837354bf33510","0x873648e847e45338af8c77aff773908ee877c8e8f711b4fdb69544c2adb7dc53"]},{"address":"0xf584f8728b874a6a5c7a8d4d387c9aae9172d621","storageKeys":[]},{"address":"0xefb47fcfcad4f96c83d4ca676842fb03ef20a477","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x000000000022d473030f116ddee9f6b43ac78ba3","storageKeys":["0xfd20a2f52938a77db3766e3e75a57f2c6a244b4144815e8520ca379df855b65d","0xe01b7e69351d46a056e999f98eb46eb57cb9e5ec3a01be2ddfe7e0bd1e77f061"]},{"address":"0x95c618f318b0806bb157a800d2d0fac8aecd40d1","storageKeys":[]},{"address":"0x80c62fe4487e1351b47ba49809ebd60ed085bf52","storageKeys":["0x87c9e955454d19a2f33a6ed61cb8fe1843a9bfafa9af72f65953e3251c5fb237","0x0000000000000000000000000000000000000000000000000000000000000007","0x78b35599871be95768b2fdfaf9293a4491ecdc8ef25b872ee404fa1e441436e0"]},{"address":"0xcde3eb49d53d932c605efbc1bc425c6affa5eac2","storageKeys":[]},{"address":"0xdc5a9a89e31651d60e9a1e6feb767dc9feea763f","storageKeys":["0x4bad5b073458e12a82616354f21c0cefa48c70051b8598525370059bff1942bd"]},{"address":"0x1527beff62b110c09ac527b1ecb11ba8ac3a95f9","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x51b039b9afe64b78758f8ef091211b5387ea717c","storageKeys":["0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db","0x973f33c0e434b580eb2ab7087fd95bd381f4422eeae16f07a423a190bb1f31a5","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x797a05dd6a8bfc1e1eaaa62e744d3aff197c46b1","storageKeys":["0xcadc17d6df60323062c6ddad440f897f800f401d222dcd5f85be63bc3d9c8b16","0x09072674acf826caec7f9bdaebf65fffa68af6c3b0900e11312f4432dc832592","0xc571c2a47af1cda3d1596770eb842fef9f52b7970fa873c7834e1d425c5be295","0x534b98ee165a1f5262bd1a73460a488085e7298387b6f32ab42fd67303f01c4e"]},{"address":"0x535b6c97f2a4c73f7826a8b4f6e3472974e78a0d","storageKeys":[]},{"address":"0xaa0e9a1e2d2ccf2b867fda047bb5394bef1883e0","storageKeys":[]},{"address":"0x5b060754b27844dbc3578382886828be224b804f","storageKeys":["0x0945544070e9911ba50b09965b23c946b789f36a7d76443dbcab055e30916d55","0x4562396b3f6dbc3ad37c44f532030af7e6c98d81d57bf92e90d69897b9e07021","0x7e3fe0c8de69ad2b1f039ea2390748a41dced549ede98d21620fe299691f12f8"]},{"address":"0x4648451b5f87ff8f0f7d622bd40574bb97e25980","storageKeys":[]},{"address":"0x0f01120fd519e01fae7bb14d1434fd68d9234a28","storageKeys":[]},{"address":"0x7e43d3a147f66a953979e4272f0368dac3a5c826","storageKeys":[]},{"address":"0x94d3af948652ea2b272870ffa10da3250e0a34c4","storageKeys":[]},{"address":"0x849b59222d093011726d829475c81c79f90ed932","storageKeys":["0xe6b148c3e9fd17908cc33cea45cfa719f6c49a54394793bf9e8ed19ffd78033e","0x0000000000000000000000000000000000000000000000000000000000000004","0xf9e7669579cfcb20cf2d6955697e06b17641ec90516aa45b2947bbcd2c542b84","0x4e5639f24ad509ee465a3b689c8dffaeabda9f54b9b6a01a67ef7496d00936cc","0x0000000000000000000000000000000000000000000000000000000000000007","0x1b7907db36a824c8ce98d443ab191a8178cb6e9e2bbc04efb5324a8a56ffcfea"]},{"address":"0xef887e8b1c06209f59e8ae55d0e625c937344376","storageKeys":["0x0ef8261f3cae401b8cff5d877ca02b47dd3d2894037ea0bfe79b46b408d9a81f"]},{"address":"0xa91035f93618e582ec60099c17460f94580a28d6","storageKeys":[]},{"address":"0x9aa10f23065d274a4abe1ec3b8a5431e89eeade8","storageKeys":[]},{"address":"0xf52605c7b778563a5a9144ef4dc53b57463ca2c7","storageKeys":[]},{"address":"0x0072d180797ff4ce05b1d12310d44ecf26c8576d","storageKeys":[]},{"address":"0xb8ffc3cd6e7cf5a098a1c92f48009765b24088dc","storageKeys":["0x8e2ed18767e9c33b25344c240cdf92034fae56be99e2c07f3d9946d949ffede4","0x54b2b2de1ae6731a04bdbca30cee71852851cfcd3298aaf29f4ebff9452b27ad"]},{"address":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","storageKeys":["0x8c2f16f235092052b401051eef9e019dac94bb7b8f7c80be2557b939537bec39","0x4369309f68f607977384269b5da3da5c5e2613b4c7363ce002d6e8ce9d8bb26d","0x0000000000000000000000000000000000000000000000000000000000000005","0x9019172a5d9bc0b6615a6c7c628df52ca42162e812b5dbe034d3b14e4539f754","0xdc276a4f120117ad5ae6415d1c724b4f3a0e81f0ee6466e1392ca121b63123f2","0x5935c736e23ad4d6e6e460e0dc6b8b0aca699e3bf1f0848d0d58b0422b498124","0xc7d4275a066e4b7b21d40774fb08b3826b655682ec4cad51b3174878aa9a459a","0x89b759767f65427c4a18c7717f8394a0142a5dc2cef03452521b758164e18b50","0x3890681f8a64d272d9436f6480d1ea5c5ce20151c9680821b88bfbf32b176a84","0x356ea57d585b4c2292ee2a39c9da213499f25d18b4fba5671c7bc01208e40e2e","0x2784f1c75246f8f7ce09b9e7130d45ea120a62f8a723fd2aace4aa4f1ef068b4"]},{"address":"0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce","storageKeys":["0x9319194a372d6da00e43ed5f7027e57f755d1a31b34a5351314b4fa3f025c34c","0x3429c7091f0830078fdde887c3c2184ef27bfd8cd949487e51410a262c10d064"]},{"address":"0xf87c748e4f2c699d60029c31ad3a53b862b19953","storageKeys":[]},{"address":"0x803c746200dffd726abb5636031f5608c33d8855","storageKeys":[]},{"address":"0x91aae0aafd9d2d730111b395c6871f248d7bd728","storageKeys":[]},{"address":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","storageKeys":["0xfb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8","0x414f1935e0464dc82ed705324c997d328f5a7df4fcf51ac1eef1bd0f3d4452e9","0x635d66657ab7efa4978a0ada1229131bdb12bdff440df002b11a37709c596697","0xf762dfe765e313d39f5dd6e34e29a9ef0af51578e67f7f482bb4f8efd984976b","0x993460b7a842a34c6de2dc08dde1c527f4354825432b190bba2e4f8a7b04c6c8","0xd0b8c6f3157e5146d9edb8dd25b156d8af5046a6719564b8fd4978ec8532aea7","0x7b68bd46d681fa3f81da0e940b6a5d8c90d5e80afc2eeb845cafb1c8b6ec036b","0x6a4eff247b7329536ddf871ed3dd8d4d7d9d28d29ceac00d4f1f45bc6a92ef2c","0x8ded6157b1ca153a307d4fad9269bf57af4217a59d392394491e9b12d3ff07fa","0x3a3aec5717af62dfc0f5ede964a3e44cef7c5ba4453963ee6e3545ea9708690f","0xee882cb0e61efbe2f7edd0fe7a9feef75c17c350fbb5f6e38a0a447346552280","0x12b8ba28555eac908c7ceeaffdb0aaf4c1c68d4c264f05b89b617d175125e4f7","0x34fa8801e13d3dcccf2bbb3ad8e54c0f7473629f3b4dd2fcb81df18cbed11292","0xcd1c7cbb83b106254f2544ce2b7ae8aa02a218dcc405730b8c0de260008a6434","0x2fdcc99b01e8393a8bf0eaa262e26ba1981b8052fb1ec7ba1213ffeb9028ea16","0x60a734b9931b463b5ec40c9bfef86d3ae5a93d7796ddcc3c79118d946aae6b46","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0x3fbe6099f169b217d3e3f44e5b72b54ed4319f5e6c163e6e3739eb3434dbd572","0xd634291d4b735c4a1de76debf538ea631431e6a6b0644c3c6d9164f1408ee8c7","0xc34811131593ee88429c7c60af3da7952e2c9cf75daa4f50ec0ff95e3a52e57d","0x4a37057ac6316c16f6ab114e8c7502c141610309edf356280b3bbce685feafdc","0x9ede93be0d8fc6a5eb9cf1c7345a85b7519d8487a727aef0c2f00ab966aa7716","0x1781261727bdf41944e3b1b4b4c4a685858610b8b308e198b4946aba6256f557","0x7855793a2275e6fc47e53ac86bc7359b678feea89755332cf75f01c6bf5dccd2","0x7e18d97b7f8d6d820a39a76ae68df7fafdf78d96fad47df5ec9dfb0a55ba8516","0x73d637d229721ca538a0a2e9712eeef46a1889496c0a60f402b430eba28d4a2e","0x546227570689634675c78524a7bbdb1b9a0ee9178685b69064a1d1e6c0648bb6","0x674994ab631faa049823288ef8b84de2146a4c9528e1ae43eded0b8e59b3c47d","0xef982481b635103b0e52b38555f17a90bf88de82ca144dd4f6da1015e08a5142","0x239e531bf05da9829df96478ed136912e9830c75b5fc001180d074dcd18dfcee","0x09072674acf826caec7f9bdaebf65fffa68af6c3b0900e11312f4432dc832592","0x4fb413805902e1d9a6681d54d7946be4d2c3433fadac4304eb49ef1b5a52a8f4","0x39f5da675aa1ba82d67d06c4ecc0212013a55b74d970e7fecc9495894fd19c6d","0x0cb865ff1951c90111975d77bc75fa8312f25b08bb19b908f6b9c43691ac0caf","0xe03178286da22a27dd0b1f68fb538cd07bc9080172ee9a5a2238416fe86db02a","0x23ecf26e171eb6325d732c65d1fe70a647d4434ae74b95c22ea2fce11f775cba","0x0cfde81cdef18be5b61e36abce423320f5851fb3d2f5f460a99b2537bc6c1c3c","0xdbb14cc4e2641933009446984ed0fe231c44a6b9132c54c6638cb24de164f0f1","0xc906b0b0df36e2042f059120e95e6dd99f11c9ac2ef306a59ba0efa77fd8622d","0x4175c49d56cad0bc6d69ef289864fd048386a14da4ac19736c9e074139b2e912","0x865182cb1033f3c438f26e83d271474c96d4563f7968cc57b55a4d0fd0d5a456","0x7becc3e4bba15a81504c14df5b2a3a45a58ac8145e484eef7c17528e21940785","0x503c48554e87a0a8f3157569e349fac0135dfb6108ef5322b6b694522b7f18a0"]},{"address":"0x56eddb7aa87536c09ccc2793473599fd21a8b17f","storageKeys":[]},{"address":"0x99e81edbcab512d393638c087fd29c3dc6c9b00e","storageKeys":[]},{"address":"0x32db8f7f81c60e6405064d935b6e7bc80cb070d1","storageKeys":["0x119acc7f7d83d9aa9169687c5e110979463e6125bc0869138bf19b5e5cc82f1f"]},{"address":"0xb71e813080c6a1944b0eb79f609219f9d813178c","storageKeys":[]},{"address":"0x6ab3a801969145035f93549a2c96fb95fd92e8d0","storageKeys":[]},{"address":"0xea22035c3afecc62ffaf21a8028a6c8ba60dc2ec","storageKeys":[]},{"address":"0x388a189d2752ef07a278f6586f5944fb73a1363c","storageKeys":[]},{"address":"0x5a55dc769d478ca70b4daa935c88ddb3ca1295f2","storageKeys":[]},{"address":"0x9746c4304cbcf2b9bd02b0686eb2a1443b07bd8b","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x031c6111cb1f0f5bd478bbff32910769166b0a2a476481d708302789f5c0900e","0xd1ae39517b4c7d4995db65c04c8f47ded33153a041e0537d9672ed5960e8b148","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0x37564213918344bef90d672ee3df87b725d3f0099e35b0fecc2cf3c6ac3e713a","0x71292cb7cf47fb87bee9a58a050a52c575391b9c90317773ade7d35d4ea25788","0xf0e313bf90ed3839c64a9fa927a4063b5e02407d2535470248383001e0d81419","0x000000000000000000000000000000000000000000000000000000000000000c","0x0897dfaf1c37c8dbe7def5779eacef1f70ee8772a9b3244ac94223e45b045a6c"]},{"address":"0xdfc2cae99905e140050736e54fef1bfde14ff9d1","storageKeys":[]},{"address":"0xe795d3de925c970cbef7c691f9c39505202afaca","storageKeys":[]},{"address":"0xc3649f727bc90d870aff0400c378301104244cc6","storageKeys":["0x0366b3141919ec9f847cfc8c3b10153a8959c006afe327ab0f99d0272003ef14","0x0366b3141919ec9f847cfc8c3b10153a8959c006afe327ab0f99d0272003ef13","0x0366b3141919ec9f847cfc8c3b10153a8959c006afe327ab0f99d0272003ef16"]},{"address":"0xa50ba011c48153de246e5192c8f9258a2ba79ca9","storageKeys":["0x591a3b2777bc31889c69fb5cad740ac457874aa5ce74c0ad08912df8ad7d112c","0x158cab4f3f3d7fb3fa7c40cadad4cf2a7d7d1541704c6190fb3782e9411c2817","0x49e349d4f386739afdf8e55db7675b584d46c3b2a603eef62554e21dc437b5db","0x84893e0f271e5f8233d24aa85ba38e0d2ed8f0fc8f608c286ccee51e6c35dd6e"]},{"address":"0xdcdb515e7e788badf0120c389753c4d43519d5f8","storageKeys":[]},{"address":"0x48cf2a4b8a74974beabf8db1f45f9123edc79c06","storageKeys":[]},{"address":"0xfd858c8bc5ac5e10f01018bc78471bb0dc392247","storageKeys":[]},{"address":"0x1689a089aa12d6cbbd88bc2755e4c192f8702000","storageKeys":[]},{"address":"0xa858ddc0445d8131dac4d1de01f834ffcba52ef1","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xdcdf0feeede933ceafc6131b663f1ee210ac61ae","storageKeys":[]},{"address":"0x5fb30336a8d0841cf15d452afa297cb6d10877d7","storageKeys":[]},{"address":"0x98f3c9e6e3face36baad05fe09d375ef1464288b","storageKeys":["0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c87","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c86","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c89","0x0000000000000000000000000000000000000000000000000000000000000003","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c84","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8f","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c90","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c83","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8b","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c4","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c3","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c85","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8c","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c82","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8a","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c91","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c92","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8e","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c93","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c94","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c88","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8d"]},{"address":"0xfbeedcfe378866dab6abbafd8b2986f5c1768737","storageKeys":[]},{"address":"0x1f9090aae28b8a3dceadf281b0f12828e676c326","storageKeys":[]},{"address":"0x5200a0e9b161bc59feecb165fe2592bef3e1847a","storageKeys":["0xf105718eba48e11374f2a9eee37e30654746b528e81db102f28293c635eef935"]},{"address":"0xe41d2489571d322189246dafa5ebde1f4699f498","storageKeys":["0xb787223be3bc8ece62cd060cbb37243ae4b639a954a79701ede142b807c1768b","0x3a93b8d547a55b9f57e9b11b821bf30b45e952fe28b30d4c837a73ef19c1868d"]},{"address":"0x8d2f3ba53de0becd02a768ae47e7daea736d18d4","storageKeys":["0x4ea7a3fb4ba9283cd9079d2f05b8fcd3154aed7afa3187dda178d31371cb8d31"]},{"address":"0xaf713ae6c540d59553b4d15a1838c501e5c866ba","storageKeys":[]},{"address":"0x63c847b01957b78ea7d2be6f4a41f117069d8b8f","storageKeys":[]},{"address":"0x97e3ccd126eedf3b3f6fb68e2d680371ed06b434","storageKeys":[]},{"address":"0x46f1a9df6384d69282f26739d1ec0ef6a86fa3d1","storageKeys":[]},{"address":"0xeae736e5d6560169f9285c62492f8a89fb4ab790","storageKeys":[]},{"address":"0x79e9c4f8ed2130f5b07f58308de5eb12e6b3bab5","storageKeys":[]},{"address":"0xcc5c7dedf02cfbd9c5c67db32ece201e460fc645","storageKeys":[]},{"address":"0xfda68f66824ef2695df85a5aaac94097587d2893","storageKeys":[]},{"address":"0x41ca411f6a9889246ec8389a946bcdd5bd89a399","storageKeys":[]},{"address":"0x4d07d25b928299adb32d54bc93cc8c21825420a1","storageKeys":[]},{"address":"0x696cfd63f98dcd1fea2d6bd27f3cf85c2007a2fd","storageKeys":[]},{"address":"0x2f3633184849d57169189eac6768029aea9a70d6","storageKeys":[]},{"address":"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf","storageKeys":[]},{"address":"0xa1069fcfe87c812039fccf9a2c4a81db0d3c9501","storageKeys":[]},{"address":"0x2103d671d7cafa70a1f6e30d9b3ebec20bd59943","storageKeys":[]},{"address":"0x28b8d70e4414090ed7b04f42d12f21f563e8bc85","storageKeys":["0x28016cc98acae7fc08088265b14dadf576f00340724bde504c9c76ee8ffb4382","0xdf17be9cdc750e1a9a5eab270e7bec6881b4e6038b1e25c02aa58db3666ec948","0xe07fa82049a0e42eb1d7535092eaaecfa1816acde8a52156c14347d7c6857b7c"]},{"address":"0x98fc407ce8bdda6b99d3313c3652cff181f5e89d","storageKeys":[]},{"address":"0x986b5e1e1755e3c2440e960477f25201b0a8bbd4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x5c8bd9977978810a534f5b3fecc338502aac393e","storageKeys":[]},{"address":"0x8571c129f335832f6bbc76d49414ad2b8371a422","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0xbfd5271a58b9b77988395e7a3bf7add18038632785086b00ec9c11e5e3e1084d"]},{"address":"0xcb0c1257b1ee18debc5d9522639adc260c36d423","storageKeys":[]},{"address":"0x264bd8291fae1d75db2c5f573b07faa6715997b5","storageKeys":[]},{"address":"0xa558ea1a875f8b576f0728d32c39f62158e49b92","storageKeys":[]},{"address":"0xc2fcab14ec1f2dfa82a23c639c4770345085a50f","storageKeys":[]},{"address":"0x11965b87ef36c4d816a75c7b48801ce78ccad8e1","storageKeys":[]},{"address":"0x19029459beaa122d4c206c1844b3a4a97368da50","storageKeys":[]},{"address":"0xb73e13200ddf41fb663208d3371788f6e5331f9f","storageKeys":[]},{"address":"0xcbff3004a20dbfe2731543aa38599a526e0fd6ee","storageKeys":[]},{"address":"0x861a1c63ecb0c650864212eb6733e3da242d8ca4","storageKeys":[]},{"address":"0x969c00942e13358a5b704f5105fb41017c15bcaf","storageKeys":[]},{"address":"0xf5dfb95f348c6a3ebc1af4a057185ac18f5556e4","storageKeys":[]},{"address":"0x75dd42f3456f3b2c5415cd6addc4be1c22a18d29","storageKeys":[]},{"address":"0x26fb810f14c0f43b5359b72b3714f96a268012fe","storageKeys":[]},{"address":"0xf05b0e4689f62ffd7ccf34906fae7f106f9204cd","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000013","0x543fae4ebb556a7e3ea46b6922bf9129e6840e7df76fbf613dfffb6b2479fc7f","0xba9f0a9d2918d1b53246d8caf54ac3df52e0b2e15494ad8e447636ee5efd27f5","0x42135f6292c9ebe03f3e4c587ff09692ca4c596b8f3541c7d16af07507fb5525","0x000000000000000000000000000000000000000000000000000000000000000a","0xa6b5adbbea95dd02ab7ae0ea748d852e19dea5db729ae9b55eb736cbd87a7a41","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x541dcd3f00bcd1a683cc73e1b2a8693b602201f4","storageKeys":[]},{"address":"0xd9db270c1b5e3bd161e8c8503c55ceabee709552","storageKeys":[]},{"address":"0x4b8a6a3a657ba4568bd582fffe776a325a8616af","storageKeys":[]},{"address":"0xfc426a7850205d2aa7d0414345e7c9d7c2e8dd1d","storageKeys":[]},{"address":"0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43","storageKeys":[]},{"address":"0xae7ab96520de3a18e5e111b5eaab095312d7fe84","storageKeys":["0xd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b","0xed310af23f61f96daefbcd140b306c0bdbf8c178398299741687b90e794772b0","0xe3b4b636e601189b5f4c6742edf2538ac12bb61ed03e6da26949d69838fa447e","0x4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b","0x9f70001d82b6ef54e9d3725b46581c3eb9ee3aa02b941b6aa54d678a9ca35b10","0xa66d35f054e68143c18f32c990ed5cb972bb68a68f500cd2dd3a16bbf3686483","0xa24761ee361134adc7da3d66337e75960499c185ae47c00b319ec63b4c79eaf9","0xe6e35175eb53fc006520a2a9c3e9711a7c00de6ff2c32dd31df8c5a24cac1b5c","0xa3678de4a579be090bed1177e0a24f77cc29d181ac22fd7688aca344d8938015"]},{"address":"0xb34e04184ff4b3d7d684d33664a06dd4385fdba8","storageKeys":[]},{"address":"0x2008b6c3d07b061a84f790c035c2f6dc11a0be70","storageKeys":[]},{"address":"0x963737c550e70ffe4d59464542a28604edb2ef9a","storageKeys":[]},{"address":"0x99f6de6cedb3e430d8d1f1897fb92c68758f896b","storageKeys":["0x4a6f485c1c32cc07b41a962ff745e1d2a15f32520f92181d93f06ac057458486","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xb9e5226e56a5f3e9251a26379b1889445f5c8f76","storageKeys":[]},{"address":"0x8e79e45c9e008b430aff86f7121b122f9ad27aff","storageKeys":[]},{"address":"0xafe69384f5febd6cf791df9e9cb2a72647dc97d6","storageKeys":[]},{"address":"0x030ba81f1c18d280636f32af80b9aad02cf0854e","storageKeys":["0x14a553e31736f19e3e380cf55bfb2f82dfd6d880cd07235affb68d8d3e0cac4d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x68fdfc39b76b20f280a010f9491977d8f5b24e2fc048cfc4260b97516c77a322","0x0000000000000000000000000000000000000000000000000000000000000036"]},{"address":"0x4cd636dee63f3caf6b1643588309b0adf3fd87f7","storageKeys":[]},{"address":"0x95392f142af1c12f6e39897ff9b09c599666b50c","storageKeys":["0x6a72c52290b228833ac2967bf2ff579e6c79a3accf70d3afa05caa3a68f8a438"]},{"address":"0xaee22923277f1a1f98ba9c9060f94c7e1acdbe66","storageKeys":[]},{"address":"0x40995fd172c745559432b1ed5e753dcaaee9a94f","storageKeys":[]},{"address":"0xe4922afab0bbadd8ab2a88e0c79d884ad337fca6","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db","0x973f33c0e434b580eb2ab7087fd95bd381f4422eeae16f07a423a190bb1f31a5"]},{"address":"0x6000da47483062a0d734ba3dc7576ce6a0b645c4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xba4b21f973b8419704913adcc5c4411a40f83963","storageKeys":[]},{"address":"0xd9ed413bcf58c266f95fe6ba63b13cf79299ce31","storageKeys":[]},{"address":"0x9813037ee2218799597d83d4a5b6f3b6778218d9","storageKeys":["0x5f844128ee28f69817f43fed32b1eb6c3b672cdde9b2dc87fb916bc0b525b37a","0xc9af2cbffaa7378220fb956f83f49facf69fe782f55f2dfa57ca99d3fff3c387","0xa9bf534c5c6bd701fe0a8e3ed64b0769b2bb8701b6be59a4287915456580245d","0x6f5db8421302e22d2e26dde41421a59d10b0f9ab1990780de421c6f2a5271ce4","0x92783bce1b8fbf5d5a004ae454c0294c9e3a8d45cb06a52fcd99539b22445478"]},{"address":"0x00bdb5699745f5b860228c8f939abf1b9ae374ed","storageKeys":[]},{"address":"0x51301f41c8f83fbdffaeee11f846e9c114fb8046","storageKeys":[]},{"address":"0x3b2a77058a1eb4403a90b94585fab16bc512e703","storageKeys":[]},{"address":"0x340def432d1d7965c01a46e9812fd00f1a34d9e9","storageKeys":[]},{"address":"0x814785240ec46f4bafdd035414bf04bf60e169e1","storageKeys":[]},{"address":"0x5fc67fc46ec69e5c14064d651e1891c00fd720ed","storageKeys":[]},{"address":"0xa8b1b971968420c0ba4413bcfd1cc4c87abb3a98","storageKeys":[]},{"address":"0x62fe806bd23ccc4ffcc080ecc7f99920a28fa17b","storageKeys":[]},{"address":"0xbafe01ff935c7305907c33bf824352ee5979b526","storageKeys":[]},{"address":"0x79bc2620964b48b41448e29b724df3bc1300f3e3","storageKeys":[]},{"address":"0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24","storageKeys":["0x6e9e74e4891bc64247ab6fa47c6a9776d34ed4eb8d9e9e21b9dff2aa8c340879","0xa8099389dda490a23c219d55ea7558c09d5405e39c1b13e3af640aee86b1351f","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3"]},{"address":"0x2200cb93099aef790c1c049b0e1c7602bb7240e2","storageKeys":[]},{"address":"0x50f39e9419920809e17ca75a62a786cd3de5da40","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0xf11d1d2e3944627282095eec46b0bc50ad3f94e5","storageKeys":[]},{"address":"0x9696f59e4d72e237be84ffd425dcad154bf96976","storageKeys":[]},{"address":"0xa2aa48e774653c6c6e1ce7e4d7f4d211352c051c","storageKeys":[]},{"address":"0x44980c8c2a4480b2a26886ce39a6589cbc4048d5","storageKeys":[]},{"address":"0x3cb0c88e41b1aad2e59b93ed51d9fdbdda021af8","storageKeys":[]},{"address":"0x974caa59e49682cda0ad2bbe82983419a2ecc400","storageKeys":[]},{"address":"0x736ec40644ebd118d170d65079ba2bb1eb4a1178","storageKeys":[]},{"address":"0x4e977830ba4bd783c0bb7f15d3e243f73ff57121","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000003e","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db","0x973f33c0e434b580eb2ab7087fd95bd381f4422eeae16f07a423a190bb1f31a5","0x000000000000000000000000000000000000000000000000000000000000003b","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x5e0b7c6a4f59fbc984f9fc746b41740c63a5ef61","storageKeys":[]},{"address":"0x1bfa2f0d2ca96989bb18e665fdb843a635d30e4f","storageKeys":[]},{"address":"0x6b175474e89094c44da98b954eedeac495271d0f","storageKeys":["0x995f3b129dd3291868ddb9cf202c75cd985227d50e309847fbab0f8da403b19c","0x639b0fad8cb3c3f822c7f87d4faffe54b8e4515394bf43d17915df9c544359d8"]},{"address":"0xaaef4d5ae6ea726f542033ddd8e0a1df6b189794","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000e","0xf7bb1285e79a16a6587846695900bb30f85e80be0a7191954e959e2a3b39e370","0x2b1ccb8910d873f02577b3dd0fb0f3f5a20c2b974e1a42a0d5491acb79c5c155","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000013","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000007","0xceef804a006c10f9dbafe22f97acc7148e36c12470a1806b4c84cd894b34d8e3","0x629f20d8bfbe9a62bd05309ab8c8ad9929adea79f2545b8bcf91de7858d8b19e","0xbbcfdfea5791c371b711c6f268d09b4c37483b981b0f807985dd4dfd751c4433","0x63a9eef542482dd4b4947ede6e9f73263865424d44ef7666ed0bb5b0bdd04a7a","0x4f15c395392721a0fe530a675595d11a164ba298055c632e64a6051f30552034","0xaac10f53c8294471a32f1aa5b789cbfa01c87f3872f33d2f6bfdda17414e9e0b","0x78ab86b66e47bfa0e3425c306831e0e3ebce127e57a351efdf34b7415dd2ab37","0xc2dfb276fcc959893296bfd70cc30815c2f9644101e66a584f9cbf0fcb3b9c1c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000000","0x7ddc26c1864fd03f01accb2150b6fd9676acf46f63aa04c0be37033c8747654d"]},{"address":"0x0e9e3eff16d2d19f5d7a04717d70b81f2c7465a5","storageKeys":["0xd3d672ebe2dd1e895e9b9a35ae8a26b726888b63db7f929c27a17b82904d8e33","0x34159d7f11b10955e3538765a38239580dc3f4f4808c10fbe7149e67673c4e37"]},{"address":"0x458f33b481405be241dd06504ce2f7489d270285","storageKeys":[]},{"address":"0x8b6a6f5b828f086a2a9d8a3150b958e79e91a82f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x8a9a513b9791a18d5272680de0b8170980d584db74d5cc608d89e97f4ae4c892","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x01ce31914fa70a1eb073aaa81cf00f00bb000355","storageKeys":[]},{"address":"0x9c39809dec7f95f5e0713634a4d0701329b3b4d2","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db"]},{"address":"0x8fa8f9d8b228eee6e7df2056faa97ab23822deae","storageKeys":[]},{"address":"0x48ec5560bfd59b95859965cce48cc244cfdf6b0c","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000b","0xee7342d08d28a9410954edecc9e99e0516566a29e7f6418f9ed88d5457a16bd1","0x35e830c43059d6a7cc540f34f150ab48058cac729b2b25760456d61d61b674f6","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x78e851c35326c9296485e9720d85cb3bd153b428","storageKeys":["0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565","0x0000000000000000000000000000000000000000000000000000000000000000","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564"]},{"address":"0x1d24c6be3c1254a0e7cd8712978fb50dc7f1bc1e","storageKeys":[]},{"address":"0x8ae4c29c97a9dfba7a4440c6336a7d37eba0e12c","storageKeys":[]},{"address":"0xcdb921ee04e2408b46cac61aaf3514ff1df0594e","storageKeys":[]},{"address":"0x1cedc0f3af8f9841b0a1f5c1a4ddc6e1a1629074","storageKeys":[]},{"address":"0xf4d83a5dc5666067c0530b0468aedccd00318888","storageKeys":[]},{"address":"0x48c04ed5691981c42154c6167398f95e8f38a7ff","storageKeys":[]},{"address":"0x21e0f13e7c78a2e4160ccc454c02ab3e8a9ce2a6","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x7f86bf177dd4f3494b841a37e810a34dd56c829b","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000019","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000014","0x0000000000000000000000000000000000000000000000000000000000000004","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000003","0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xac4b3dacb91461209ae9d41ec517c2b9cb1b7daf","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x4a6f485c1c32cc07b41a962ff745e1d2a15f32520f92181d93f06ac057458486","0x0000000000000000000000000000000000000000000000000000000000000029","0x000000000000000000000000000000000000000000000000000000000000002a"]},{"address":"0xeaa9ebddd373c4bd8bb92dfcc9c7e7fcdb268e51","storageKeys":[]},{"address":"0xb2ecfe4e4d61f8790bbb9de2d1259b9e2410cea5","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000012f","0x24c5445a8799ed44e9e927c6f37b8d360a5ccefed281a4f86990e92aaaaf08ba","0x3dc40693fb3bf64b979c0e0b720cba651945e1a1c67007f82f8a170b92d7faf8","0x5b04c2c7c7fdbc31e5660769e48a87a3f26e1769b9982d799b6ff35b585e42d5","0x000000000000000000000000000000000000000000000000000000000000015f","0xdbce54fb76d23f3792440c2e2abc6617b38209a9e60adcdb42095f9178274e46","0xdf3c094b5ee518fa5220310d3c9712c850f4061f3e8028db5c10f763bfbe9b61","0xb1f2c095c4f33af3205737b3b638f170f58418ddf7ecb565e70c47afbb54205a","0xbc5dc498aa3b0cce90b55bcf2f4bfa38f2546adf760e816c85ed50fec632f89f","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x00000000000000000000000000000000000000000000000000000000000000fb"]},{"address":"0x4bac702dd1080a6e8cf524f4c727fd598f089faf","storageKeys":[]},{"address":"0xec2876abe8e819efced11ca1d9a1cd0e68e45e7d","storageKeys":[]},{"address":"0x0000000000000000000000000000000000000004","storageKeys":[]},{"address":"0x0e4aacf9c865471ac62597e23692adae1231f32a","storageKeys":[]},{"address":"0xa1faa113cbe53436df28ff0aee54275c13b40975","storageKeys":["0x2e261fad5dfec9e907f754bbf1467bf31efcbddc6e3937f505d225393b0dfcca","0x89b007483d9727c5c35c4f9d2201c45d8027ec8871010e1a2859acdf5c6cf59a"]},{"address":"0x0268f7e093584511bda13abf76275890405b54c3","storageKeys":[]},{"address":"0x8431060c8e72793afada261e9dd0ab950e80894f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0xe82a373272d9343f65c5826842d07de2fd655890a7154f3421dbb8bf4b542611","0x0000000000000000000000000000000000000000000000000000000000000009","0x1fa17fc9d5db9de841e8a6169b0b2d1092cdb14c73ea5c8b7e7812c757e2a4aa","0x1fa17fc9d5db9de841e8a6169b0b2d1092cdb14c73ea5c8b7e7812c757e2a4ab","0x0000000000000000000000000000000000000000000000000000000000000001","0xe82a373272d9343f65c5826842d07de2fd655890a7154f3421dbb8bf4b542610","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x9f52c30f29bfc5514d79a587d61ace79ebde82da","storageKeys":[]},{"address":"0xf2eadba9d834ececa12b618ff6ac68f4aee805e0","storageKeys":[]},{"address":"0xf5543cdd5f551635e13ebe07e47d01d0fc9cbbd5","storageKeys":[]},{"address":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","storageKeys":[]},{"address":"0x49048044d57e1c92a77f79988d21fa8faf74e97e","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xccb63225a7b19dcf66717e4d40c9a72b39331d61","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xfba175fe8169f08eb02239ca1b235a8e13415204","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000011","0x743d0b101c262aa10d1ecf8658918ed7f11805f5a8650d7aaa22dac0c8c4f76a","0x000000000000000000000000000000000000000000000000000000000000000b","0xf2431a146209f0c0e20bc3dd1202f134d4419582b5b81084bb159b89675a656b","0x2030305594dd2247024da47a510703eb7ba5c9dd7a560e0a4596c201595fa18b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000a","0x164ae76983800950db5a0e816d00ae65e10920df2fd537af97f9722ff9f0b0f4","0xf2c535f78bbf70e8c137acb4e29e2f986545c919fc7214c8b5be774e28c99ce8","0x0000000000000000000000000000000000000000000000000000000000000009","0xb6a6ba516e372d74247785d3abb4f5443766e8f574a21d891f936eff3b3b0d3d","0x3bdbca05285fc70b92d87d8c7b9e489bf0787dc47751ba4fb70ff7a65e9bb3a2","0x0000000000000000000000000000000000000000000000000000000000000014","0xee722d724c89bf250dae10049726c7ead1476357b09d9efbec404caf9ea81e72","0x15a48a2e2aeb4a3e849a022a4c15676ac29860fb5a115f1d6f264a00f987c9c2"]},{"address":"0xdb5889e35e379ef0498aae126fc2cce1fbd23216","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xb543f8d66765c7074d1d77147d7e07880c96908f","storageKeys":[]},{"address":"0xafdaa6776ce03307469014a90f6b349c3b811e26","storageKeys":[]},{"address":"0xdac17f958d2ee523a2206206994597c13d831ec7","storageKeys":["0x9ffde5b44448c88a20237a7058da36efc84e747cad7f90a58122443090ad1f7c","0x8c8de58f529ae55e139d7b5b184fbb995b30d3865a11609fc4bffb35f1288bd2","0x8ede74c750105ce2fb5f2d1fe2ffa7ac9ed33eaeb281d12bdc9d790a221e60b1","0xb3847cc5d7a4860954c9a57142bb46d4f7416090ba5924ef74f1fc9ca3475f34","0xbafb32dd290eb78d46de475343c62f1f2a5ad7187f6f4e2c710d8e9987ffd80d","0x513b73944ea12005b04686b42896c504dc9740f56f3ca3cf41a801cd6c7fbe29","0x7ed1270bf9985ad0c49af6c38189f8ae41f0891a989410c4f1186ba37b42f342","0x9d441f104cff256078a6adf734a479eef99299bb28a1f82421351a727d683ecc","0xf97d781a9ca9776d9d3b1a38008e76bf1381a33940a87578110c9086a0362fea","0xb46c17c59376627e85b25cdddb0c35722c9fedafb78c66846d602dca62438788","0x673b0f0b053acf61f6f8f1846a9fd7436a51038fcd3f3a3397ee4df148b3d8f0","0x56ee5c039aedeaedf1032028e6c6acb8882795c2c1cf967aecbff3b2c39ab4c0","0x8d2403de072e792fe9cf0459126e0ccc9e4847e1a4cd6e70d3318bef51027274","0xc18aaa237f870a4d48b197f8b369a3900576d678e9beedbbc01ff1a0e867f085","0x93e4f9d25d09cc179f094b171ebe148287febce312d587312a2f18245974acf3","0xb120e35d07d4bd4187947793e596e7860c1f4e018b3a1c96a7ff3af92fb36c4b","0x0967ed5d0ad88daab1c7293a13269bdf91f32d7ca36ee10fda21d83597bcf576","0x3c346a88444e7f66c6399dd5e06c71ababc22d00dc7162f073c5cc50fced5623","0x9b6330e318991e5e03c22b7dd061a94019614e7c61e5bc7b9ab074428d2754ba","0x1d61b751c500170e1f2412f6013d5dbdeb26167be5653ce8573be3c189bc0ceb","0xc0cedb9470e41de154adee00d52e88dae60788cbddec51f676e9dacdac231977","0x94909b84551d14be639387727bc06f2df637bb55324a44bf9fc5f78e0e9e4932","0x4c02fdf59d5e9397f1719923163f6be5534e9eca4daf51f1a5d95e0c18264f79","0x6adf312d1e455f8463beba29fe7f24619fae626889f97cbc39f192bb458bb288","0xbea69bbb53ac1c8f9f304debe90f2f910f01e167907208fbf77f464e664ec927","0x685ca9823441679a09aee8e726a75083ad75e8d3bcbd68d07cd80fae41c10934","0xa00253b3f517bdfa46ecb7a04a6f2fce00bf4a7e318e2554a3e4d4ee4b9db684","0xa45d74523be7c1c49accbb5a419d77fb7de1035a341d93dc507bdfbcf79ae393","0xbd6d14f193738e283da2abeb0d0632dbcab7ecc8617c625bf49fbc971fc89313","0x176090ff7acf2144c76d3ac997c3cc26550d1f1e30187a447462e243962b412a","0x846bb8a09486c0be2e38f90f64d639ef06392c0c4da9960320e17a83f6d4b35e","0x6e6a68664f90e78d65ae0e8ef840ba37a70d92811f1f65f53120dc6acfe4b9a1","0x16f004e89ee59492de04d4f1c204747d552695fd97cddde044da1d1934fe0cbf","0x50c1e6bd531fb2aaa30fa4a972015135d131deae3f6a9e58e1fb163740327fb0","0x0eb60577085a9d049cc8510e96f0cef7a6aaae970e154f2c7108d48fd4349fb7","0xb7f1e32f97437dd540acff45e1db7c9f6711679d3753b88908dac536b94c49dc","0xd9293a630e28d3a5e61462a4f5cf955d155ff86ed3ab041ecb0533dc126b3efe","0x1e5dc723dc3f3b29801f6e6889d7e1f3270f25154bb3f7a14d1b60486e328ca9","0xc602ab3e515395034af169cd866102b11b242fd144f40785077a9866e9589b8d","0xfa7862924f5601c1f39299711d5f76fa2cfa8a207fb6605ad0c587ce8c525315","0x8d788519759306dc94c64c0360ba819c56e3d6eaff093b7bbe6f2f4ec61ee7a4","0xbe05400f97604e025f37d4ab04090667a8c7cc7f3b4bda213821868a5cd55052","0x60894daa4193203bde4d84d84870319d3f20e3ddf7d97b76bbb3e082c8465112","0xc692efbee87c967f2b3c4bbb5278d3ae68bf086501fcaf962aaea9a0adedd61d","0xd799df84c6601d9ade74005f422f31a9308c6398323c29246383d35237af9fae","0x61ecbff3bb04065cbe693ed14e280780224723722a8e523beee45ed99ef7a689","0x88904bc060ab674869155192bf1045a267dd5f06dae770eb480946730ff6b1c3","0x02109e648c764353db47b1d8894f1769d5b0e66c7caf2df343621702e7f66d88","0xff74eac351ecaabec94d24f9ab493b9e00e6f80e41439e3e33375fc4590a64ea","0x2361f0a4e0a7736aff38b77bb385f68bc1e3d241b26c67ce82933ad5fa59fa1b","0xc242760eabb96416573939975625064d0a4378d4f666476d33b944e0721c857a","0xdd6798771e43461192ecd5a15bdd405ba42f8c55d704c64f1809b1be114f54bc","0x0c5d9813b2185b448ca933e1eaca5709973271bd34ab7810302c5976285eb1bb","0x7c88d3cb74722d80d50567df1c4c6bc9082bd5821e50de3a79593e5ae778ebaa","0xd55e8ce344d811904fa3fa665cb5597dfc0888944d7f61b817b191ecd1edd8ea","0xf14741ed82d9408c177f46121dbb6df86d15f48946c487dd6a191c65b2484e37","0x47e2a6bd1a4a7d2d9ccb50db7cc8ea5054b173dc5f8d2d477dbbb253851f26be","0xba2bd0999fb5f7faf98fb04cf97608e75c7589c9970078a2c6993bb3ecdaebee","0xe1ec2b661c768fdc2b939490519c0a0d74e9778ca80745262ef058b202c946eb","0x825567a8757a03dbe2551e097e7434bfaa328fdf8ed174bf88289bca9d901bf1","0xaeb021e184b2838669932d6025f230be73896028f2bc906bb735b9747395e9e1","0xf79f0cce47344bece44e61f8999e4ec66166f5075e9914b50fcc0fbb024502e8","0x4eaaa84020a3b745aefeb4c1b542f399ef6b300a44d47eb4b0fe161ed42f1f84","0xfbf7155c833fc041a1b957c5d24f3f47beb7aaf0c77c420716897dc94017190d","0x6a0339409c908d3f577b24374505ed60b73e760d4187adf91c845864bc5bcfc6","0x000000000000000000000000000000000000000000000000000000000000000a","0x3a849f6bbec6f87da3309525a0c3c9d5dfec3505e911735f9994c3109f857147","0x426a6724c84c66cd90a97eccff356f2c9633414685df631b9c1e0ff105f618af","0x4f07ee1d124fb6b012545eeb93eb7646c29901f49b360f9fc0ac24f90ea5c14d","0x2f020855657d6aea73f452bfb0b121155a8b03120861cf24447c2bf96ba5f7e6","0x9b5bf6e49d60e72dc3948eefd6a72cd62c351487d96191ec83010fbe33ea0b2b","0x29d766f95258b12980126cb011af382e539103fd95ba6b493199beffe50e3c9e","0xe88eb99bfc904c443a2bf65417c2fa37fa60348dddce1fd1d3b5d6220f53f9b5","0x86ea0c7eb93bd8ee6c45884ee3e9228f3d5fd487ffe26af465f9ade55a5edad3","0xaeaf8520f8b4ac51b4e85d5f0a758accf1417f6da54e1491bd17097cd544e862","0xb2c4cece11835867f2ba71148c436f4b0e3ce22045267d5e6af44f369f1abe93","0x01e8c85bc67a07abf6fd84f17c248f65173c83f977e8c7d446d30dd3999be685","0x4a0218fe46259269083d094cd8ad05c40d613bf6e75789baa6c3020d5d5b92a7","0xfd61f971bc4d749f2f40b7adef6a056936f38d25222bc5fc773959d8d8305f7f","0x11bd26280b748685f71aa07dd27adb367659549b371924ce9f43bf27bab47ddf","0x06dabd79aedcb2c300b7934a293ffeba97742ce68a6c79492daeb64f2bd2b66c","0x09d95b47586eeb76d269fccfdd86e7587a8baf0f8e124833528d5335584d1ecf","0x27d0f5fcbf422c8e0f1da4dda8e3d14161b39b0d0a56f3b80b2b99f0399288ea","0xd1749e791df7dfd0079f641aaf9e63bb153a0d6cc831d3a74df9a64b99667be1","0x3c93dfa09d33d426834bc972202b882f2bce558cc453283d05f2841ca95110d3","0xf01ccb6e15a2962ec28facf21ab514910c2469175c004bd2fe2caf76918fe1f5","0xede324c4960c70117f918acefade26d2f1c526231580754d2effd680813e46c6","0xc3e2f450dc94130b8a054e10309987e1842fb4972aca41aaf8f3d1e6dd13e9ad","0xb7cc972229301b516f04636d1cb2d748c972335190955b754418c37fecefd5d2","0x560454ecdc3ed6a6714e3ffbbd694423886125502fdd88c3c3c4e391f2970feb","0x270ffdcf39d0c58b3e782db00cd6f76bd778808a23931ea6d821c8201b5d4d6c","0x68f1f863b7771eb283dd569226a5a137f4fec1dac4802099e7da3a10d3ba72b9","0x5bb96862696c2d0cea055c97d882c1aea2e43ff2b77ddbff047472588e06de3f","0xadbcc83b8fec034c3c0e9159bb909362298f13d908b4d27f6b57cd037b369613","0xc6df7368e38bce356ced80baf0940834ea9e7268aa1bc534af3af592c6ead3e8","0x0e7bc7ed145913d5ab3ea90850abd19bc3727883a7a2331eece1dc5f1db9f7e0","0xc312133211808fe66f9fb1284b56f2f648012c9e0ec2d7efb6192dbdc36d9e60","0xd905cd4a4ede32daa4aef46620fa9a1e48bcdc1d23f0ac02598466ecfe9602db","0xa7a255cbc6ba6e918e1094ef7b518d93383a1d4f96dd3f2492514cef80dc0e3e","0xa32f16378da74f95a937df6b5161305bca41894f3eebb44a77ca0fc62eb4b7b1","0x3a8fedff2f3f1cd9c37c2b6a1ad62ccd79a9301f992e8ad0871f53d87c28f6f7","0x79cc67886b6cb080611236a5d7843c023b73b6a42c30265821e4fe3ff741d7ca","0x7cb23149c1539c50577695c7e37c975dc8ea6e0e7f09c91d0d3453b4a8a38382","0x6ff666a004e90d738ea76f289fc845ec140bb3b14a3c3a2dacdb499087a44a50","0xa6e3506d6768e0eec022595cb4914867cdc03ad6fbd76dbda60573c54613d162","0x1c6619d2f2a832bc29decd86aabf28fb3177c675ef9c2cf4bb5ec8a04a901ba0","0x4944424f4626ad6817a4444e35dde950f2d813a598c237e62f877433bf145a97","0x3036da25f7115342028cc218cdbf78e09cc23f9e9f257d2d5851fe0c7f83c847","0xa4694dbb0b73f83be3e16e47c97a7f0f7b3ec9e1ef1c473b3a01819b3eac15d5","0xacee48d7605443bdadb32ed475f62a00a2059b9baffefb2cb03e4168afaa17e9","0xff411f9dd9eeff126f8ab89ccf6a0648b3ef39f469452ed249ad99451c1432a5","0x0c8124792236cbb5b8ca76508bee85a331f4543ef07fd43c116e7ffb59c49031","0x1ca7fb97f4ac8582561844711bb80616556bc6d590da3175af5d93d3d9087278","0x980d161f74a7062f7ac0ec0d09d5e22e3807649939cf61cd706c1e7168709544","0xe0d79a0338b511e70a792eed15cf9524cdc284153cab1b1124600561b86e4e56","0xeea10c754c9aad032d01b8c2033989b570b9478ee3c904a27816d022a3026037","0x3e706b42c49248cb4e7bc23a95871d949b0d4d5ee11c59b6d9a73f326e3bf5ae","0xfe5864648384c85ed745981fa7891e9d1389e1b4c461a4f3dfe9f4104d0be1b9","0xab81ded25dc5eaddc842b73a81746b055d5f04ddaf4c4f3975f1b084144fe569","0x18ebdfa94c69d7a075b0fd1de99f3e77a44a93441f56b06efbf1fd6fb46bca91","0x2e65b0516fd74458d73e0c68deb523d5741e335dd7f99b6baa333487d07812a8","0x868f7038621d35507ea88d56fb3509aa313da8bf4529615c9637da776207c35d","0x21988e9af4c39f8a8de3f00341890c008b7fd9b93e29a31542e99de04273860c","0xe364329ad7fcb81777fb8ee1679921b3cb5e69cd8424d64f7d5b003a1916dd43","0xc71f6623f447800c74207217a206180f389070c73a0e9fe459f1544a24446bcd","0x57edf41a21ca23f59ebf0d29de16a0a115192b0b4264de268352f43fe70073ce","0x0b776bc7b496565ebfae9c6ebb715d44d27685310427598e4ee987454d8feed7","0x16d9fb7f92216ab7ba3139e4ff3456b423b5dc169acced199f9f75c9785d760d","0xc199da25d9c7767b54bd23343abd08e36e2f52fe6d540a3961446c1a0a82d97d","0xe5ea1c020eddf10ab52ad845fbe32c9093c369ee5f87a1d6de433647fd7c50b5","0x43c225ad708ee685c27f102d347d33689aebf49adf688a0d2e1742251a299ff2","0x9f9d6faf4b1de92770f7d8685c4b257126c89c8cf05b4ed0363c2893c93269f1","0x15224090de68bc020c1d2a85986c2ca9198f3ea50c1fa0e6457dfc43894160c1","0x6feb46ec44622e2f7508e0577738a21c1035bb048911d1ef001e2083934c71f8","0x4f555509ac2cdf492daf3d23a16abd9703f68a44c8d5d8ea8cd1b9c7140c4965","0x24eb3ed6531fdd9cfb376c1174efc1b86161f1d8eb32469137b8442891ec4167","0xb91a40616e0096b2e1b824f7e4d1093cc34bc1a78f1183993d3dcecbaa6d7eae","0x0523a07059cced2df1ced2b91cbc30f14d20bfba567bb3e73b0735312afae380","0x0f293e61cf5227f094df9b0534ed563efac231953ce3a80d2716da5e1cd9b8b9","0x2943ceefefd28db62bfb30df41e8a816c062890c30cb423037f4eb65111fff4c","0x1a76996953213f8aa7f8f6bd5f20bbbd5b51530ff791ba03794082aae08a0484","0x306312d647f63a0535d9dc1f081f6c42eb31e54099e06bbbc8df04d8f90ae13c","0x760e719dd9a20c13555ad64e39162031aa8ed5a3376c9f1afcfe97f83991e7a9","0xacad3847b3553d1552d503f5e90f34b89406126abbf0271b224f63d4de4a52f1","0xabcc13ad8f50ee0f97ed2f86dd79ab49e320d4041d608fc36ed102e4e89d3775","0x138b3079520d24f953873677d04da453af8fb56b0bb6951ce7372d507eeefea6","0x9c3e81eae7296a9517fe83adec833d5214d955e6c82a14e2bcc4e699998c6360","0xf2aa0bfd93b622792e6d63add010f700e78986665e8d813b7d36db3d1ab2166e","0x789a57f79b43e2f4e941daa56aa0a11b07eed1bfad9d7e794c3d014c53e5f586","0x38c93013bd92978e34cd78771581a4ac6c4c76ebf50201660258c2dc39096a8a","0x6c7d8cf6c4a64b17ee50d4df45af80d2b999841515fb966b3e64519126e079bb","0xe3e18608abb358d99016574dc936e81de86f2411419133a4c6d4bb4e85c5bc5a","0x50158e1a34c692956fd793aef929aad5adddf2d6bf399de80aa5523d4cf0356f","0x3153bbd80eb6d5b26730795f662051077545b1505179bf69bfce4a44641290e3","0x0ac9d78c663a5e49fd9be2860dff72b89548844546240d1a37d5717cbb21cbdc","0x441a95f1e9e8d145433f79aeec18b96c935b8d138073f55a31e903ffaf3f68b0","0xdacdb23dcd8fd9596d89eeed187be0850b1fdf18355e5ec429e37a39d19e654b","0xdd677fe13b7fe0d232b996247d69a9256c55d1f37584db646815270041078f1f","0xe83e8c9100a868a9a333e8beb076fc2c0bf2b21017a6c1adfabfbc3ba7425f0e","0xf52ffc3b06617bdda4cfd91d414881c9433e6283a0579805542503db0382f4a7","0x0bcfae4a0bf4336947331b9acd69a6b7dfdde8a31fadec086400ab3f09d10a33","0x67bcd919598b2ce9ae1228fab78d2c5c8fa702008ccc9753d51a0601cfcc3904","0xc08272195d653104cd5cd55d97f5cbd11dbcfa7eaa0476c578ffb97916716bd1","0x8c35156d31d53ea36c079b9356f5d6d91b311e809b77a4635639bac30be52bd6","0xe70b4a8590b66602fe07518a17f6de474e7cbe36d4d2045561565da76f8b5afc","0xf26223fe95a5672bb2d242514a7d0a1f4dd6d08fbfac1836d427bc8702a320ce","0x75f7f8a447801bb3acf20ed694b60cd14d95954391a921e8e0e05339d096a919","0xd1d05e656ea1a0986dacb863d0cd2821efc38614e05951b88fdf55a0942d5fdd","0x7172a700197a0a26dda57445e2fbfb89518f7b4bc691f525ec86f42be842166a","0x560864607666d890df7290ef5cbfa98d20eb69c16ade8983a04e0bdf101a8e64","0xb0bd7e4a1b583def2a87bec316ae0488d8cb2bb0c0f45eda6eedd14082446d99","0x0bf966dddacc909947ffd7ffeff60040bc4e4907fa1418598ec0ba209ba39484","0x4e22a5d59f287c56cbecca71961e56fa96d4f0886c0abe104c2ae7924acfe06e","0xcc080730b54f8be0ee8be7fd4b8f91a5ebe12655c290d1532490b82abbcb2981","0xc27d9b54c090854715f411295a6e84702f69203b25c2c6f7969b1d070d2d67a0","0x41e0053eee47f499f2f87dba74353b410692192910f937c60ce411f5ca799020","0x3768de7dd1c4cafec8d9b8c71027701b3b4e9888abefd150e9c3539be9b25653","0x6a52b9542c6f58741aaaa107e1d988ca05100c71109b6c8315d70be6d10a7256","0x63bd10a3ff2d8633a389735f9883c12c5ea1efd7ed6c85230ab88fb212e3223c","0x619273e074a624d168d66a23c41d8c4d778b81130e4c421716042a9ecb35d2ce","0x24ac437869229c0baa55bf3c8ea5a9baacdb831aef54b2eb3b237db5b9fd8bf1","0x4235ec78597c64af6ae63e101761ed9e5a41d185012e97cfce39e25537ef8b87","0x58f616fbd943c66b28779d0ce6ec1a4c7a6410ae9e0b535d86e8ef8a602f38dd","0x8b788c1f76f3ed2d60a489801fd2cbef6eb1376fcadcb39271bcdb871db1be76","0xab2e9356bdf0a67ce9a5b98acdd0899f8c7a30b155644b8f9e5529f6f180ad49","0x26f4c9de43d9484f02ba67a4127ef15b0bdc3445a3d489734323555c7439b338","0x8f3fba7aa023dbccf54e7866c045aa958dfc708caa1647d86e43cef90f6b848b","0xcc5be6b4b4150adeb70255c49aac8f729cc2d9e7e223b441856db2c82f93d6ad","0x664d40707f8afc46cd94b6c93827dd49b3334670c6489db26eae2e0989ebb241","0xdcbf52718813423f99ad8390432090615e03d8b327e7660b14c186d9b79001b0","0x67f2216c81651be52519917c9b1f7ac6aebb2de3215f6ad2c9bb3f3a937470ec","0x71504929c73d24b01cd5ed9f9705e682a33200f6b80c57e68e5e8c1b508ee6e8","0x80e5ddb0eab7ea334899ab4eb7259dc0f82546f6566d19ce74059d5e0dc2e850","0x27107f68d6ba46706d0a93296ea56b828d9fe8ee2bbe3cc8ade9c4eff7a1292c","0xba9fef47f87a46e8f14e237bd4e6ab70c4edf018f1c95608c2428fbc20d52ef2","0x423a94df89ded9aa17454508e2d097b64af6c812fef51403649d9a8ce20edd69","0x3ad2db55fe5657fe773e3b7111e43f4b662a181a20e875b3b8be52dd9f0e2333","0xb17488bb3b0a2f76f38be74133e3a1678449bf69894a5a5b446930af0d94530f","0xec6f67140836296b2ca930def916f3c457dcc0c2a0d528cb05a0265a8d82d41f","0xa411a759ca15c53c02aceadab5845f34695fca0a13af890b8f2a1bf7a7a24cba","0xace344342d0b5c957dcb76adef708abffe0aff6cd315e3a5cf2996f27e680a66","0x32b30ad28001b07bd2fdb1bcc0930a673c96cb3108ca666687cd48c71d63fcac","0x6ec85895f612bc513d6fff14fdb02cf761a46599894d2b2b9d9a327c54f0eefb","0x6f4f80a32ebe3c86d011f81828fa7a53596150b19fde8f19c8022b6719b3123d","0x0797b1467787a8eade4ac725685287af48d6988ccb96bef04a728b549dfcb0fc","0x449331483d80c53342792de66fec85ceff607953e5e9aeffe7f6fda1694dad98","0x0c27ed749dec26c01d4e9e8910443323f1ac5b4e2b6314bb5783b03a34d13c22","0x36235af797770d4f61d3c96d3b9287d4872ed12f5d65662f72aea8fa60c9cfdc","0x2cacc66825f3b04ecbeab909fe68caf4dd5fd4174034e088a13876f75c17fc7b","0xb9c00e85d95adedebddb276707b7f6f138843d45e55ad106246b815e78eb12fc","0x21db567eebb89e5d736e8d64fa93df91021cf1e1508cb0be29707caea7be6e0a","0x4a60e70883ed5cb00413a19f4a1e41ee7d24daa217d63c8941754434cc961463","0xc3482b63084298a0638cc8c79a2568f0a07b1cf848607a35dff184d59039e426","0x37d081e5eefe91a4972ffc3c3f9fba51e9ee1df7df46ff00afa988919e5814c6","0x5d275bceb3e15b91dbe1c0a72f1e6294aab35500a093c06cce83e34b0a12bc82","0xf2ed6662a04fd58f8696b6996ad05c272307fe1800cbfb58daf7c49fadf3b950","0x6c69865940ae940c0d26db0d61f882f8dbf7e4052d06555b5fb7cf8d3d9debae","0x628aa477eae0cf8be720c88e9cfa1cecd2f88c9bdc8dc7a54ba54c9e0f41df13","0x08e2c4596e8b4053af4147c2410891b8a6b1548323dd8d781786cd41a7608cf7","0x910f04c7f4204ec6903fe52c67c653a1971858a34a277ea808910729b30c03b6","0x7f457ce9a5ea462b7e4a4320bb9aae1bbf2c09b1cbb648d4d47e3ca32cc7e679","0x3c4631ce48305f927271e0078df3788a8afd08fd8b1bc5253eb8c6073d294924","0x52b7377b9f4d6e7d481e3898cecb2005faa4297a0748920418d2046faa2f8983","0xa15402c043e68b5ed1feea87f69e814a413475e261c13c900cdc7d7f02603064","0x32aca725795f43dc36d13d8d094e531bf8bfa889059dd0f58f9e07bdf74be6a2","0x1cbc197bdce048e5e420dd5ea0b215b643ac5bb81ef713495193209202f470e6","0x0b40db39047919a79da06cef186d9d5502220d6e4da92e25fe2eb965d04d1c37","0x9d1f2e8f3c002e9d033eb5260daa0925b171e84faef4fab932ba6307359a67ae","0xc5592b083e17eff0c28303a03ca466c00696dd69822a13be86a2f020b4a22df4","0x8b87faf7d08e6bc02822b719fd0093899e61852696f11e4418d96a0c0e4782dc","0x8828f96345bd347ceddbcfe7dce783d5b88209b2d7af2b792efb70e89141e633","0x403ad2919a7c50860d24002488b242b8da50ee78e7cc6105f2d3bb44dc94ac9b","0x78b35599871be95768b2fdfaf9293a4491ecdc8ef25b872ee404fa1e441436e0","0x639b0fad8cb3c3f822c7f87d4faffe54b8e4515394bf43d17915df9c544359d8","0x28577b583eac71d1cc83d5c99964f04aeabf091f4bfe80d26d477bc5068dc3c3","0x7ecd8640901d58f6d7b90ab0199f15e8a487b97861615b776db53a085e75683e","0x7362edf0245b94639b0c160d6f398bb95d7b995e4a5d838e6f4e19459dade094","0x370d4476d0dbfd5dfa2821372de6231b6e41ba39180f2e2a0d3951df969a65c3","0x71b45202025ebb4e1615b11fe92609e7ad1f0d64c925b877a8d3ec1a3b47b4af","0xd537e497f03d2e7b7be3fe1b91f2e6a82db8a644d9f01f8293ed168e7d3f0ea2","0x9223941a43f35ef37db69d0122257647145c16c7ecfcdb28a0f8b746872fb2cd","0xb8304c2ab619bb6b08da4b89f4c30f9bf16240a0004359a685cc83dc0c0f4967","0xd0c6f9821238c26656d2df47d481f16727610364cabe475f7fdefef517425be0","0x26cc1cec77b55bba551d182c42ad8be8134b2381f654f66ba598f3cbc0b30777","0x1db0790071ee1a3b7a14a060b226989c468f4e1cedf74df7f1aa2b8ac14e9197","0xa39933c54d9083aac3ba7d7b4afe8126ee6357612d82f066090c6c59d6ab613f","0x2f4c65925b2577db4e4629e46acf27ebb536565e66efe9dcfa164a9f1867a962","0xb571af6d03341dddb95d9ee1e856d5d5e57d4136606e1bb21b09d218c792616b","0x32e7e7dff82aefc63ceadf82737097d389f9cf6210d6502d6df0d47823a34e4e","0x90dbc1ca56dbadb2b661077a1ceba6aa3890c372369b4751054a7ed3498ab226","0xde708a5749dcbefb285c70536102071adc5c06b55912f58d3a16d43a256168f4","0xebd326d9a2bc9e8a22ef613756e627bbdfc522683cab4cebeb9d513a15421e61","0xda6726da755fc1d0cd998f88c52a98fee0ba5c7934a87c8e0bb2a70ad62c630d","0xd3e4cc54c6fc55e75a44b1a5b3e68c4777f170973a11572ddaa00ffff7e098e8","0xdcd8b9cab833de5614c618b7661b3909ff5c12f2cf03c5e52351dacad9121b69","0x1dc754466176cafd659b71e627810b7db358ad8b15914bc81ce1bff0569cf71a","0xf49f060534c981c2f2d8f75fdd8ced77ee7476a2fcf95a183606666622e271b2","0x698f4010cf63ad30fbdd055d804bc19ddcc94daf79a257b2dbb7730c4a867e9f","0xacf2b9a2c4c5d9b6cf0c22ba2b06bcba55517583d8024c8ba837326308bdc706","0x26e17d0ef809b4e0578ce53ee42b74a0d38e7d676721929ebf9dbb12cdccdc82","0x38a67e02ded2f25a722b62e2696685203621a452d4e20cae0a716877f40beec5","0x64a423be0140774c855f2d8e5e2703e292513b4cb3aa5e88a6f1ee21f890e986","0x98c52b83cef0bda902a4f1cea33ec1c1b25a7a5a59a56ea33d8fb0412a505e07","0xf902e47f64af464d40cffb10a95b4e2b9e5ae28ec33291b68263089bd4520e40","0x00490e071e5d2524ee85401074aca9981f5f3ac219ec2ece50d6be53eb887bef","0x6d210cba628cda7e0b4dbc8999407ac52fb29ece1373fdd213e161ea4080d97d","0xb6abcc19fc8652f8eedae2d44a08ebc291490e6426adf40a8da777ac88a105a2","0x5aba81091c9f333045744f2dfe8980e6286c2bdf0cfe95678f9f2eed1eceb791","0xe274b705a96ee21949bc302a7d2c33e41cdc5d7628f0d532768d570381c0e9fc","0x14eda6f813af714556650891a93ceecdafcc65464195a3066a348a79f6ca27b7","0xdd0d093c1d3848db7dfc6a4f6f1d6401adbf251cf8addbb88cda8ab0d8241f57","0x8bbe375e328c15196b0a4c539390dd4b363c0b32c0c6075fd66a2b7eba8c8d31","0xf7011b1a076d65bfd62c734f62d4299ac0f6bd520dbc7ca6ce143cbe66975407","0xd58b6e7c5e921c355dcc9a1424d9c45ba5617cf66b707de1ce47c3387f70071b","0x85c32ea92c9829c0b6b92268ea223a6dd0804c7febaf74a0ad200e71f9692474","0x4b951f8db84b9d7e1b9e4f36eebe32b099e22509d8fa9a620ac5b6f73d6067af","0xf9d08a0d89261d4499dac681d5704db6b0f22a004d25ed9cb2c55535881909fb","0x169228ca33ea854d54aa1e506e59ec687f618a41074f5f5de937a0e9c6343e5a","0xfd05421312e754d03fd7664caa3e541b080e33d28867738cc80298420ebcf7a0","0x9dd84ef9f7edb81cf2866c2b87684f549ea695fbf5f1ad8ef1b5efcf00b186b9","0x7869810c94f6f003eec898d8627c020b95eddc8c6b6cce3e56871df63333575a","0x6b3e65a74ff4682f5644113957c891e21d41f6450f0cca0baaa8296b230531a5","0xbe0b3933478621951b85d617f88a1216fd761df0ef64c0dcac091124bcc947b1","0x118c137c59ec5df9510ccb5c0c44d07f17139554473881758d8ddd869df07cac","0xc97e47dd11b24634a4f9db0aee18ddc9f2804af5b646cf4ee3feffc683b8848f","0x18bbcf2f67dbe1bc50dd211a926c01726e228bd96398d25c2a3a66798bfeaed8","0xeefc71214ea1dfbe727ca29a841eb90d58b033b3b4366126fcf9405ef9a915c0","0x17d96a75c02805a81bdc347d47fe3e77ea543893ca9e6fa34558c473c24040b3","0x726882d1677354aaded40c4e78e6d40ceabd3528b82c8c19f46ced9985e1b723","0x83edfecc3f1782f2560da9d2c9626b6e1944712c1a63db1f9634eb17012334b3","0x69fb3f4f81f2b847c6788b5ebb9582bc01c307daa4601533a567c5533a7f47ae","0x851b95e96d3bbbbf2c243c39a7a524a8106744dd9732158584603d31302b05bd","0x3f041be4179f6f320e4a3dc015fdf5e29aab69dfdf4507e25ff5b9c1e307ebd7","0xe2e8f179680e27135badb96f908de5ca7d47469b6643d05e1fc3b518a03119ad","0x19155476e9833446784f267115c214f94ab917d061cf42813dd4e5e4a0346ee8","0x2c153506662cf99aba8c88c1779bab0558342a5c9f722d59bbdb9a934a6956c8","0x0000000000000000000000000000000000000000000000000000000000000000","0xc7849e953d86d4f6c8e131043ea8b2c37c5a17c8cac390fa03238b8eff986adb","0x24b35e49568a1920b33c3d547ea4b4c7d98ba2501063cb78ef39cd6174cb3488","0x3ed7f65bd9305eda28aeac4dd8c6fb35781b4be8ddfe2ebcee257d1ed01434b5","0xf89fed03aeba79c6311efb4879b084aed9671542b345f433528b9359e8f75e0d","0x3804ec71de95260c50e1783c5da6227c5d50d63b70bf04c1d0a4d4330eb0f42a","0x1e5fc96047be10be978656e500440c233d4946cbd3abfbbc775486cc86414c94","0x0000000000000000000000000000000000000000000000000000000000000004","0x1b4e1cf6969315746481d515e1268217b0d55fba270bf1388f315a960316e7b1","0x4bf1fdc440a1c755fa9125a048be5c9970581c18c12427e962c2afef94da9b52","0xd4cc1f71dce5bbcb62ee8fb495961d3bf3be91405f7a5ab7ddc238a57370a408","0x870c4294e2fb414fdae4367899fbf0138cf15b22d7bb6ecc13905c46ae921d85","0x4912aa33d2fb0762e58a5ccaead722eb40fca71de3cc07d49aef79962bfc76fe","0x6776df6fd1d8b642d0304a49608c5404d5cc31254ad0dad84004f24d67032998","0x9f1910d51d9ed0adc824cffdc25cdf43ce13160c709bb6a4c8330823b404c351","0x999063083b058de1dc7174a582e9181e83fd2346ac8d4e6ec2421d149a1ce4d6","0x9a81c43dc0e2b05c4f316040d4f09ecb8ed80663d7e49be451fda28ba4c6c855","0xd0ed4c81298ca613984ffa624462671c524fceebf6d9912427b3fa1197557856","0xba884e7e965dcd23a7fe546c57d312429e116160773dca27a23c17bcc74bb880","0x868736eda33ae45c6af8c7ebd2c5f4fde1ef0e6e12fd33fa790f17c656512b72","0xb6b2a44a43bd95746e5feba6b797ccebbbef35f7890e8905276e679622d667cb","0xcb340178cb180dba4cb24f95641071b8469f9616a6babfa8296945fd4c9f3ebd","0x73a6ddf0f493978a972f8a4745d33b94ff2430a33e65278d20a24da0e9178f0d","0xee855aaf6e4b0957bbf9001086e8130dd673332c02931b014b80af58a29b1f5e","0xbbaf37d5b12cba094ad8ae5ff216db659f109db99ae2a7beee9e9e9032f98e7b","0x1273b98b6c6958a2cd5d97f42c0742f68a8d405e6f7c13ac76d90a6e4fb08298","0x6ad52ef33ed022788136b219815636f0d07fa81b565c4f526148f59f4ddaeca4","0xd48444c98f08def24dc4f564ae27daac2e7e3388a7de9795baf6ed67de32cff3","0xa758d578cbf0f25c20f4c3dd034d07092c81130c757bbef55329f0085b072db3","0x770cab6478eda515ee42809b219ff036967c82881ac1cefd9448d717dade7706","0xb857fd7deaa59a0bd34fbdd6f64441bc33d16ba1756a970d0cf7478c73428ee6","0x65d378fc5ee176d2ca410cf4d0c7c2bafe66862d49ca1ab4352ed8379d8b2358","0x5bc7e4334a03eb245e262b8d4ca5bbe9eb810b9978b2f037adc8822e139900cd","0xb56ce6f9635cbadd173c544a9d174298a2cdf759136f6900033fc657d02d7b0d","0x711c02a65726a261b888e0158e235f8ecc20e242f53161138c3e3fed097c49fc","0x75519f9f64f71e1f14d73d79f3d75ade15d7e3fbc59926e425e5b4e1bb244a33","0xdbcbb3b11d3165ef92b5285c3b86f8c9a652a109023bb19fc4f9f42c74887467","0xdb890207ef016355cd1050d6a0cce6651cf90de81d37287f7a54b97cb5ce0441","0xb7ce4782315b2eec76c8304010c38a22ac83c7b170cda2018b6796812778cddd","0xde21aae08246b2001411a7e10f8723d26c3a811b80bd091db242550c42e6232d","0xec89e6c8d4e796158d2c05a458600b1af2490139d8c46cc4c33b0ce1e9c202e4","0x478c48c1503f200c3304cc11c60aaec097faf82fcf354af32007aca5a74a4bc5","0x11d10389352831271a9e13171b3aa8e45a23cfeeb95ea24b58ea59cd7a9823f7","0x9eaa38fe0289fac586a6c100de9923962160a839a726f5a4850de5ff4a70b5e2","0x7af7a06b24bb64dee4c5857054333d34b16fb8f4511eb4f7e0992cfc99b94bc0","0x0ba8c50f6d0196f6f16f7b215ff326aa21c0ace264a950a2903e48f595d3e96d","0xd139a14408ebc0a860ff81283aefa77fbf2deb67f25494bdeb23687ccaa12794","0xa9040b647d621e8eb3c320964f79acc66ce8772c3228f40bdc9996b0187ca017","0x11fab617d1bd97dbfebb6b39665b9cd65328595b697743a23311fff58f43a4f2","0xc49867a9b87443574ca9c747844ba3512abfe3b9502e33006384ebe19b03d745","0x7d682c7fcea20b9fbb80156f7042d76049f0115849ab2e436fbb76a05137e324","0x5ecf8e4ecf5da8e8c9b39ecd43c1d0c07d15349bc0c65701989c1e2d2b5da7ff","0x5db437c3ca51dab3cf07042ca210d3eb832584d0a7d287103a339b919065791e","0x8e87005cfddb54c349f41cf5fc9d4452ea41db48c6d6d2d6babd9f17a39fde91","0x70022406c6f374ce097fd2cabf1e0136bf474ec87d40141e29aa0758d3aff378","0xac7031353bdf85c0d6c8da635de24619d5ecc2efbefc49c1c1e219e4eb8c4c4e","0x913e9a335c6edeed601becf48acf25831eaab1ece0d27d68553c356a099da606","0x12261f70a493a86f370d8dc576b493c61f3dff3fbcecb5f9876fb3da8e404042","0x001fa49e73f290bbba276b833111ab0ae2dfaf50b0141e861e88d9e12d878e6b","0xdb8f6c735ae6a8a13e4a251ac99de62b56f098c55763992026da0f120c19c66e","0xa252d31fdc0542781e4f107cd6a6d2102769d82ce74d2d59b92e50ad1a7d2048","0x9292b72149d52bf0ca762c8f176157c00c1084376b56f9ee137d277ffc41a435","0x810660ac7d1e8f9af8fee3b76b76235742a0aa2a679036c0589e57842f6856bf","0x4f64516ad103ebaea95433a45d24503e0750f5d402ec2d3ab1a5e98dbc583e53","0xf23d12e24f1a6dfbfffcd720b62ed389bf23bb95cbc2895c1651f4223e2006b7","0xafae9044ac456fdda75ac54708cb501c9d83a72de2a2702f889ba0fd039f2f00","0x0a4852f877948613d7aaa7a03d032dc59d5c42a42a0b647dc943479d254b4c7d","0x308d04db1591a19e35fa67047b251406bbd0f71daad3c281b86488abbfded3e9","0x96ef8b4b0c74f0435778ccf893048b06a72b93cdd28b18cd52d3f7bed33ab57c","0xea55555b1996672dfd928a8ea85ce29c820e3334c5cee58630c157aacd6e87fd","0x8272b820e113138fe9ad0da3b1f2847f475fb0bcea1ca6fe0c3fc63777f7e7a9","0xd8242c4ed5f3054deb296f63a6c80e7148b846a71424723f98b39d5fa9482ab8","0x8de213acf13b7136efe28e3c2be0a096ba69220ed68ea31c415ada1e17a762e2","0x5b9d290e27af115d1e940ff88c2badb59f5afdfcef9d4ee105856b142dbb314b","0xa1b4cc344c98eadb8049e68e6ca7edae28ace42522f87f401edafcb9466be9bf","0x92f2d1e6361f77bb6408fbbca988b57950300a90f8732b6a92e8517daf29b783","0xeda37904e89a6980fc7c9366ba20f2b6890d86fd61b724526ec95ae23bf417e3","0x0aeb64504649ca439f49855d327db849a5697514b3c30a2e9729b8a766365847","0x83dc10f7f5cca84f311839108dd7fadef43db7ee18783b55a923e3800f70de57","0x157f6cb6a955922a8f49f139c1e99473fb5a153507ce6f392d8a7bd4cc414607","0xfa30b1950043201b3c1048953439c1478e7e7f6c51de053af214a421fa01814c","0x3124a5b9798d66536dcb3d2d447f81ed17c02861721f21a603dbc2d15bf4d1b2","0x682f6ae005f5f06ed757a69c6e386e30ae4f074aef29a29e7f03a0a409992555","0x1ee829fc7c8c97459125e2be6d58d2c6faf16d88b82cacb6da1d15ee85b3a080","0x4e1a473776a9ef70b47e9b326c4ba8796c8d7ccaa7b2cbb125acb8f882bd5c4d","0x194b67c66ac5f0e392eab3041441ef1b13617d1c0f6511d251c2f56b41cdd100","0xd643b1e1bdb8890d59721760c97ae330aacf5e43568e5643fc62f72eacee6f2f","0x9708a7505d7c0e56eb7a6181afc0e3c2cd3ec04c18908e5c02db21e9ea686604","0x3fc808d025832d2970a868b161bfccf946f648ffe981298194077739ce12cfa7","0x5de0c63870f084b592a6b62bf4a367b32da5208b258725752a2b777eab88d1df","0x03d1fa72673d42db8813667508b35863fea85f574d5c2f0136dd99339434f784","0x7b7a935acd0aef976afe76810bd0e0fcbc6f8e6e9a227da704ad846bfec5ec90","0x6dc67fcf4035e58f993083083ffcf3d3420fe2b18028c04065df94fe2ba068b3","0x057193aaf9f16ac4fa900b7ea08059456b61d350e1ecec3e819e9432b581e82c","0xfbac72a6958343a82f570c57bf7814ad0cffc6981a38ff87fcb3f3fb996aa2f7","0x444afe5f64a38fa7cdf58519d641b96b5c6e3d684948bac5497858af432bdd7c","0xaa17c48f4c7102fc913892584915786560d2964f8fdbb06f26d589c8335f05e3","0x8284e75c404e5bb88bcf1daf6ed2090248216822c5b362fd219949128e7dc637","0xa623a8cd996e8904c0f67630799c95e2e80f7fb0ae86c8dd542d54d40bba7b37","0xa86eff68e9bb733699e5ac5ed686aa41eaa893aa675a184c1321917b4d114669","0x0b43ce1208a187e272b204675c2daa7f381e7dea07ac8198fcb4092306c4f0dd","0x4b1242f4b1a387c9b14f8449eed7e7f0cf8ad2ec8398954c7a57f12ce04b6327","0x9b254fc999b50165bb20bde707d500f67a1d8d4bef0d4ace0aee0353e65164a4","0xf61acae1bde04ab4b8245f4f0940bca94e043fa12f85d70a10e75403dffde3e7","0xf3803d0d4d49d64733837a96ba3f99fb6f81a9f7b436a94215e9b988ce2e00ac","0x5a993269005558983f694791e9713ac402cdfd6a3bf4d5f9b19b1a8761884a28","0x503350a97a38e5744eaab514e78fee1cc5fe3de2485959dabdcf3406745a4f49","0xdea4cdd23ba0e0c45e9a5753cff7a182056bfa0ef3edf2d47d2c30e6acb05112","0x42df27c03f295e4dca40b990f7f50af41313e2203e4b6ee06c7f3bb401c77903","0xd9442f2a34b186f970390294eeafdc92fd1c862da3fd9040baabeb3695ad9570","0xc4a4899a685e0865d97d33ea1e8b9ef4a9f46e0133a6520706e3805d3d6ec400","0xd895fb398f3449e2e22579b5c2acda61b920b948d9fcb3253fb3d650f8888eca","0x66a11d329bdecdc9d9e28837e39c5f49a3caa7e762a4432868d1ffb4e5758a51","0x48fdf76abc603179ca5a871143e414b0231b3a39c54f3a3ed61aaf43f2df2323","0xb73e76b0b6151622af6c30670cc42b6faa4142812e51304a6ccb83f06ef50808","0x1dcc2bc197c227f54cd07056e25f610ada629caeaf2fd8d944247ff538f4ced3","0x62cec307fee5c8cc3a643138d61fa8c026ed1234351c2b5a758a5926d8390807","0xa13ba4b9f6d583ce27882b664cfec84ccac2ae5fcc625ca8a2dc7ec2b5ebc7f5","0xd550d865e5bfdc54a934656ec2d508bb917c87c335db7cef327a56e848e72f85","0x2de45aa08973c6fceddda16f130e4f4a84841ca25a1fae4a4a37a89d4d2e0ea4","0xf26f0aae713e0299a677faee59d5c70a887b806dcfe6a6cd3ad428b284a59b27","0xf18516aa8dbefcefb94b66f89226595db1757c95bb4f40af8f0f9589709da1d0","0x816a19a8cacf8a7f7e3fd551cb64a22e73f9a8b4cd020da258061e666c406c78","0xbcbd097c1f05da74279533632d645f0e2fc294b92c1bba7f7c531acac572579d","0xcd49b42b765fcc609e6022b407fae8df78ac5b0cd9d873e0c685094ec5b63998","0x3510ab3e13d9ed1b874e912601a16c63a6660d95e524604dc0c5e339db242d2e","0x35e68fb48c5627204a5c29fc64e9cccac7e0cf9c9c61c3e4d143a771e0a5dbd8","0x9621eb72928ac62f4e2b08f35f81c61917216bac50869f55d9727706efbd2c12","0x99184088a31c220090a85bb78e969b0f66c744954977ccdf2e41e167d1eeec7a","0x20454f732d155a2d50d8c4e4867dedfcd5e0e7330afed1454993624a1ad9ace0","0x63c67feb137ca46defeca012d6fac0f07183a3c9305bb33bcab94249ba4e9bb3","0x6fd756bc01cc98c7832190bd8197db903635d7d53907609dc8bbb2a0838a72e7","0xb65883ae2cd740a60d1819540d4c27874944d874cfae3d057d2fdc44486ac9ae","0xd5b9d2fdf003eaf025af83f59eeeece1f82195cce2e11ea28beaa5b958b190ee","0x8f04b3fd2da5cbd2e7af05e0c4d8317e3dc1ba81c699fddecee8635cc940c500","0xc0f8e1f5cf1ec509e24419462cdf687470b85ee08c3f63e5d86109de48bbd38a","0xa1e38a01d026078689fe414a99d21e91a27f9a130aa9f569bddc166c0dc1625f","0x639ce7c81694f48fc5dac96dbedc6708634cc17a71349301543ec7182d18163c","0x99a69fc0857aa6d2342dfc856aeb92731fedef02fefe4b830c7f50f973240a2b","0x518b93ae8d0bbbebb0360cb2b6125519c3b0d8cc456a64aee8b2579526ae3b21","0x83ed5d715f2b6223bd292768b2ecd91525f9e8ee6219ba4e7a5d22c6a9b1bdfc","0x3414670f98678189b3a491534c0e65afd1c39ca9ea34644ceaa5f7bbd2d4405b","0xdfe6be72dd0dd354f3175e31c234e38b0b418f52f0221c1343aa1c1e815fbaae","0x13777edddf47e48ad944096e12de5c6c9991359302d3970d47ea2c2e2f9b25b3","0xa4774584b9a55b64a14854c07687203665843640fdff0e2fab9458bc01004dbc","0x42a84ac82db75c45c0d71cf629eab6a96e70d2e026eb734c17f7564dccca19fb","0xe5800023c3112c3e4e020787e86e802e6451b1dc3af2ef8fdb4f76366b672b3e","0x56541abba26abbf4908b8cfcb40639df9102cda2badfb9541a0e20d18b57aeb4","0xc8cdf5b296b2ddb1814cb25d6d438857238de37d4720e40662b8fea0ce7a537a","0x4e973152d0dfdcb2b9ac6977efa87b0134ad8039f1b4053c59631d07eb9fad35","0x822e3315a479740bc08c67dcddcf0bc5b87f47721eddf766cd87c33f27d5bb02","0xe3eb369704ae45278a683152ca870874d2269d35f29cef7aaea413e94273aa0a","0xb0b300509efaf6427d843e0c32bbb7f17165bdb4eff946acef7fc32d5104e817","0x6ad430de027c87af2f959c7678e93ab13882cb468f7eb4ead477c927d89da2ad","0x77c59030f67ba33792e64ffb8ffeafe2afeeab2cc2410041b7a70a2966ef54f3","0x7aeea4afbcb040ffa51793df1e5aa9faa1c4e85eeb0912677e31170087c7e7c1","0x2e6c0c31d8877240154df533e38b0ce5caf9ed192ebd8adf7b5a3931ee433175","0x2fa97cf55e864a6a485bc74c2c494ebad3489b64f4c0bf05101296b0bd43406a","0xb63ca7b8bea5ddbfc6bfd850e7690031fd9d853c6fbd1c70506193ad1fbc8544","0xbc07a44733190f7ba99c889dee95d25e7e9d2409826866292899af9f9189d466","0x89cdf1400af6f92f542466cd5dc347aa2eefc2e5d558654ff7207159972c436f","0x89c9480c36a4c210d52ecb58d9a4faff4360ecf385a5efb4aeb86a94d35a4c37","0x0a3d1b619702715ea33b9b11405792e0383c2a34c642cc7656c6cc14e67bd474","0x7f1de084a21ab850bd19d9d9bd9e79f2ea0e929b91e22d2d39a02ce05559ddd5","0xbbb6a7cd35fd804fd0d610552f9b91c396db0525c2af87803fae6097ad6328a5","0x68cb2354702deee361cd1626f8770234b6f9920a4776d4a0da1d88963c697f76","0x53ae9a97d93c2a7a51d9f4dd17cfbb35c974a72b9e1a5b6d2c3138c645eb14d6","0xe12f1c794a9eff1edbcc999045c3e2b9f28b4101ededa233d3c13074dfed0ede","0x41381b13ffae9b9d006fb192e15b99531fb589aa4c3baa17f81bf32bf8c5e391","0xdc67ca0a03b51bc17fbc3ae68ec6db4f26be225e813bcb33fbc9acec56cfab71","0xadc3ef48188f0dcfa4016971273e42ee34acc6c3626d590a6e09b204a7183143","0xc2ea62f70f134554dc7e6f5b535550fc01fef1a72a12316e3bf408138a7e2a5d","0x05687d220f8b79e2c25708f91cb262a014954fbcac78d5f78c939e2da0e06ab0","0x781d87e6b972cb8a157eb0faa2906c5f6fcde66dfe99fcf43f356582c1c4f4db","0x56c08ece024e13bf393743889e35da55c3de610aa005b1a2f9410088ae8382dd","0x246771c5b80e7fe40710ca086e6a9198fc3a69d42b57154e938c5224dd7cbfd2","0x5919476737e6ef406ec78bb65454cd10400e9f2575771b2d2b2273cbb8e2c13f","0x5249529cc94ef27806f01f44c6359d30d13d7a4598ddabb018cbab5b527c672e","0xc58236203d9443e6c09baa6be95092000e24531c351ec2183f8526d22dfaf94f","0x9211f27ce8f8035947c6214b01ce5c5e4d4e22fc43d37989e35181e6f2dea88a","0x4871ee97d2f8502b8fb43839f109e4ca5967de83058c57764b3e426a5573535a","0x443025b09bbeb064188f95744b9730ff447d64fef326c3d948823fc704611ab9","0x87276b6efede777e3bb2dd756559c698d51a56a60aac0057bb37a5287b83f89e","0x2cd6e02f9264430369f9397c6dcaafbf1aeb0c9a074fd2a4502e7a7e9d2aa268","0xe07caac441599366ff3a4d6f760a24a07b6c2f372bf34d27d6272b79f322e54f","0x707f4bb60ef501df859112143dc8941afa9573b875954e5db64a4c1aa948d4d5","0x5ac0889321ef2c639574b6ffa8ada51ce4fc0e6ca89b5ea34eda66cc99c72f2e","0x4910ed40ace415a6801f806143d1c2eff95aa13641a646f8e5aed43aedf57873","0x267d4cbf9d4fb0a286627ee08f69491b2ee5ba4b7a5d0d88001eafd922576c7d","0x2d4d962c7f71e1a057ffbf56cd3142962cbdc1cf13b8a6aa00fdcf4c7a3eea86","0x3c2cb67b0005a5f6dc7c21aef481a583a2fd4f2df57a9f999324dc45453fbb23","0x533661290cf0b4372d03365ccea394db3ad1ec2fb998e72d5e3f5aaae259a489","0xbb5cfc3bdc442bcafb18a625ee49ee40fa8480b485497b7214648cb020bb6302","0x4ea161b5049c0b2b4e357227ae896bde7ed44f6f78879cbbf926141ed1b75a28","0x39df8e75558978229e746c8d77dd05fed760aef99ca7c767eb03c066f0c5ccbf","0x6610c6cd1440c123564fe6072db8b90b29505731077795efc92a9a64e7fd7d19","0x5a0c4ac13b6600cdfd75cd5c94d3b606851464c95dac4320434d5313b3c34336","0xaf9407d22a3cd3fe6203e2092682e9afddfcba2088cf1fb6c94854fb69fe455e","0xa711ceb5299d53e93fd4cc79e4c079e1846c6b65e6b4a8c7924b3246b8bddae4","0x058598cee1e3a4c11e9471a266abd24461972b02aee399fd3dabfcd390721c9b","0xe29e8608f2c7bc8991b37c77574231bd766f613f7e3a2b89ddfa520f3b533968","0x7623c08c8b90e0ae287da7c936b5c4f5c48c314166072a95ea4506105043e593","0xbdc5c896a80bdc13a81f7e93377903789d06685de30b72ba0418a23ffe3c2d01","0xcf800ae4e19cee943f798c3d28b8ea5f9eded686da8799864b5b1d476aeedf17","0x1e574853cd4b20904ec140e931434940f2ace4d623f8dafed44ef05dfaafa314","0x4e4bde2f9656b859bfd97ef00e94d667542f5433fc655a7de5207efb0b82fe27","0x3f1c83b5858128025d98383ad37628181b07bbff25e45af8b6841f9028022e04","0xcde84e9fbd6514568b1fe8c74780f12269114e1a86ec8a194a4d04a83441d762","0xc47c507eb1f199a591067d0cb9d974486fe0ae223262f43674fbc44a4c1e5aaf","0x7d50839d549b73604745cdfcde29ce9b33a264ed3f51ef800211dfe7c2967bbc","0xb1c48f35eef573c5d18b017956ea209ef85568915a01e6fa38a6324c7dc7851b","0x12eae7d07aad29c87134e06c5f73e0771a60fe2b406da317979c2bf36db196eb","0x70a7c8a859a8aca5e6ce83900a52a575cd9080e8b89cb9803394d09b8f89860d","0xd1731814e3c7314e670d05eae9abe419721b92044f3a25250be5cffe65e6c9ff","0xaccba5f19e67823d15cff5ba3db8ee970730087e6e80d121040d3c3c7fe5ce6c","0x836c4e855b0a5ed246137d24d84b788a529488eed7ee529664d94977d5b887e9","0x93826f5058d7e59c1c98aa68bc73a7d30b821ab5e4ff93a5a1d41354dff5eff7","0xb0ef364daa1c71e7a5d53357ccbf5d2bee2174aec6a7439418419293ed370dbd","0x97e79c96e94e18f9a2eb6659d918e52f0e1a6f0baedcabeb4cac03cbfe4a11dd","0xf281ce1fafb8a86729fc05e5e21044408aac24b1ca1cad1ad72f8c3ac9970ac1","0x2f4c47889300bee2ebc976dc8441f76490f2c8caf916f212107396cbcb5cb8c6","0x01baa4316d68bdf6f56208ba6b0a9f1c907e39a687a43d67a437dce5bafc64a9","0x6bffcc4b38bba399a780f75b275963fc946ac7f7f6bc13f78084d47808746687","0x032bb7d2c79255a7c8c1848928d01eb895b1434bdd56ad122ff71dfbf32f46f4","0x1728842d702e0c0c53fac5ea652d11c024b671f6c28c9472de3e60d417a3ec71","0x6db1cf6a4ad7aea306805cd29deecb06a1897be0de236e18ad8c548e4e947f52","0x28db21b06a0632047f0f842c214dce0fb9d08dada18df3c967bfd036a4bab396","0x8fe57a30da86f3445a2781dcdfed8cb1a37ee353bf890e535a353dae67bb20a4","0xef899b569799e533fcab2d466841d0e18affed420842599a3eb3566016192129","0xbaa90bf8c718f10ede1df5f79a9e67f8281b3fa844812f10cfe83a3340793858","0x80e2c98197208379b79ee35f317754b3ffa177b43292a22d22b87a3c956d8184","0x0dd48277a75a29a8233ed703ac45a23f754d7fc66ffdc1d52ab3d9bd902f88b6","0x7278b8290c6048e9d8fc1c569654c05e03001f7f33029480c18b0953fd67af43","0x7fe5a5c34ee2b2160ec5ee3f8c4ed3e69522faea0cc46c8c1eec71ef841a5447","0xb04cf1b5189c3c7660af287fda110addf77de4c8aee3fd3e809646b1e7647e2c","0x4a4fc5d72a794d819501c2195dcd43fbbd536f30b45d38537397be42176837fe","0x84307464e6ccbaf67fda3c072fb5fbe56f02192a4675d0636db8548037f3cfd1","0xda8edb53be97dafa6f636c2327329c044057a529d0092cf4823f183910f0381e","0xfe6e954e54d0733886c11bd079d8e8c4da676aca8860487feb599bdf9d77abd0","0x251c72a466ee770cd4c6a824acf31f12ddc4140d56e02b251874d3b9287889fd","0xfd62ba5e39ab3c8aebc7c57950c52e095841e29c08546df8e9937656619883d3","0x79189dacd63e6d44b08e8f0a7dd53b14f05e417089eb88929fb70062a3a9f440","0xc6d2847805f7aaf4fd45285a7b55975d52532cf724389618ace6d44573daff33","0x62e86b9104503a60578513751a00d2bcbfa5e6d16d96b670b94c8da6bd674420","0xf0a0872d15add6ce958e7bd3acf52135acca3736284b62730d2a5e2ab80825e0","0xbba9de6e38f9f1e8f2d3d4b24dc87665cfc02ea10a0268d0cabc80adba3aecee","0xb86364d0223f46effb18ebb3544e490001056e7e575c7da50d32f98509038f0b","0xf80becd45254289b88131202aa70ff78757950c9a0481ac46a1d740c1a29f7ca","0x2dc31b9b874c196319c8810a107b27b06b5439c835fd5ef73744203d2fa8c542","0xa4f2a01e12da091daf57ee56c2054a21aca6fa73a6e7cb3e8e45dedb1968a92c","0xfacac3b295576c4ddb8ad28f80c5bb7566ba14ad75226ffb01ceca79977dd873","0x7476ba1149be0fb8796473d07608876ecdaece8039f86ac3c8f7d4098900d1ad","0x25f16e263500812c02f95d937f516746fe535eb1d37e129a216f38fa3d704ac5","0xc1d9ba2daef4426afd6eb7a671a93fb148b5a936f7af419b2f4230c0ee0182d6","0xc7d44f7027b96c3a6842503c69d3ef415c1f39e362187cadb7ce16aec0863634","0x728dd134222a949e2eafaab4131039cf3728307d14443a51fb987d4ac9cc02cc","0x49bb2c37410f2ee1faeb21481cf0451f01649609997485d185220e7f46ed3401","0x77571d6689a9724297da2f892d2184898942b90d9b2916f5f9128e566a7d2919","0x75ed13e9ddc130ea1fdd06aacf8ac9a5edb223c643fab682dd9f7f6f7427da27","0x205ff4bafb7b1e63e6f30f861e28edbc094334287ad5aa459de46f7d0119bcd5","0x072d216b3b3076d14a52d1ebbc5ae9ea75b3a73dfb4ca4dfe884ed6334e601e9","0x73517c364afaf94b48b71a979c1385e867046bafc21c7873bf0af3aaf8aed3e4","0x8a328d63cfac401b22fea911e46b2678f70aea1fec2318b3febb693e2f18a08e","0xcb5790ef44c7663de4588720b342c4e891c51664cb01cbb305c2af8f8c782e17","0xb50965a9b111af78574a5a86ddf5236b80782942e5267d283d664d191ce322a4","0x2426ad6c0a2057fc3574c3f431524b991d5f221141997ec5e0eda705d1df2099","0x0419a70d4d31eb0fd8afa14413c9d6905d95762645b5ff2971509375be939dbb","0x28b7c5f650b77cf0acd6fe0f160606af51a1bb52814f015aaaf8a18c90f591e0","0x1fbd2b445beef6d4f681043fef819ebb26f5ecc0360fb027113a62c77cb4a0e6","0x4a23788145abc3153306eadf2a5f30c051b912dae730baa2d3909116d48fde3b","0xfc6884c8cc76421909690615bf998d44b597fc3aac2429ae391932bfc1ff4579","0xda0b3eae3dfa3fc9378d42a7d61e2fa69579a3209a370a7576dc39f1e456b953","0x7944268f0966c2f4883c14a2f1ca6144187a2f422e16f99460bf9215331b3f71","0xb16d839504c03abce4acd2a2173771dd7481d54fda9e2e01eee4eca7a0169789","0x6be0ac223ae846d5f1301758d154c92c9d5993f359109a0ab2f0b20df43df469","0x5d731de1b8cd5700d49d1e0f527fc7cda571996cbd519145658f55225605ec9f","0xa303b93335c3ac3e7fd57a24d5d85dbe525936e543be946364202d6a6fd39dcc","0x6c3440d4e46a2e98a5849f2eab48a9cfbbe2910652a11f8e344950b1a41b9076","0x6ff3e0154fe627ff47bfabbaa21c0f59ea270e0d884079adacd436baf65c8438","0x47df46356594ed04b5bf8990dfc295df82810ba429c86f66bfdd707e83c2369b","0x0000000000000000000000000000000000000000000000000000000000000003","0x5615a6a431186aa0e322484f660f21ad1ff1c7e9ac44ac01b392b8bd8f22a4d0","0xd071e603da5a06269051cadcbbe003b7fc7bbc098f6afff7e1d617b9f2d5b5c7","0xac20a865383bd4283729afda350bc80bcdc7f40c2f827ada2245023f86804bc0","0xffa45d4e0078d30d3f1e5cc1851ed32c7481a2e81fa9f441bf2982a632bbf297","0x752cb3bc8a9bf506350730033976707a9616f67c9fd481e00c96e5de8cf5a989","0x7e66163297423aebc11ccfcf0cf4122e485d260c68e7b7f6d316479cbab55db9","0xfd7b052cc227e4e47842a08aab6e7fdb0d39f75dad3910dac0eb713cee1f0f8a","0x5ee5a7e14fd106bca57bc8908a68373203611fa6cbd9c12b565d77fdb1d305d4","0xb77582889929b50451b33c4b66e61e013853590896feae7b0305bf40acdfce84","0xd74f3e9eae22dd7744ed316f1786249d0fc88198fbb32ff67fc60679d9e0e758","0xb8bff01d2ee246daf64f1fb885480543b92fb33a3963e6ce541166a00e82d1fb","0x28e73c6f50166bbf605fc346e26d4b578425a1f2cc48231adeda27004c653a70","0x7560120e0e6a619c4d81f1d3eaca3aa7deaec2315704ec638723299e30d8b133"]},{"address":"0xd95276070026dbbdaff30d462a2253fa649e4a8b","storageKeys":[]},{"address":"0xa294cca691e4c83b1fc0c8d63d9a3eef0a196de1","storageKeys":[]},{"address":"0xe5bbbdb2bb953371841318e1edfbf727447cef2e","storageKeys":["0xd74772f2d3f7816dea5b83ed6aeeab044779ebba1326573f1e3e7525b0066171","0x000000000000000000000000000000000000000000000000000000000000002a","0x475d52e1600ce8a3be70dff6a6538611279b22a82bca4e83048753c8f48b22aa"]},{"address":"0xfd1b0b0dfa524e1fd42e7d51155a663c581bbd50","storageKeys":["0xb330d5835afe24dd2fc749c856c37de20da21517311afd6cfe0ed8ea49c6e90a","0x363bbd0212574d92ffb538c50a6eb0a6a352ac6f7d8bb159a41ba809eded8f9d","0x584f8cd0083bbc1647a9e40a07908dc7a4e2cc05b0703fc85d3e329c4ad81fbf","0x40f73afccd6706400618e7464e5254eb0fdfc04642fbba2e6dbe07e9bab1afc7","0x5005fb144f6aefef279b3c2dd972f69cef73676936e94dc0398e7a60e4d57d9a","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x48556fb7b73ceec8bf187a571f9c1da5b5c310e61ff862f560eaa503b53fbad1"]},{"address":"0x8a7b7b9b2f7d0c63f66171721339705a6188a7d5","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x2bab454520286b51c08bc24844fb90e7fd2f9adacc21d96020e2a6cb17635a2f","0x659a4ceed2b806fb3f1651a1f9d9eda8a3a803528691ca29ad0cb6903d9faaa4","0xf50b9d92114a759045f9357d47a14b2813ba9358477bf552a161b1a1a78a56b7","0xc74823e89866e4905ff67b6b788d7ea4fe5c0fdd8d631e5fd45599a321497af4"]},{"address":"0x42bac66889967cc1772f6bbd5d3bde494edb4653","storageKeys":[]},{"address":"0xe4edb277e41dc89ab076a1f049f4a3efa700bce8","storageKeys":[]},{"address":"0x1f57cc62113c3a6346882dcf3ed49120411ac2d2","storageKeys":[]},{"address":"0x548f27e2c1eb0c90c9c0ef3a4a61a6ae60038f02","storageKeys":[]},{"address":"0x75c97384ca209f915381755c582ec0e2ce88c1ba","storageKeys":["0x78633473e3cf03ba50d81ea6ac9b60d67f872443ac00c24dd4f9eb11fe335c7e"]},{"address":"0x2f18f339620a63e43f0839eeb18d7de1e1be4dfb","storageKeys":[]},{"address":"0xf63b34710400cad3e044cffdcab00a0f32e33ecf","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xb49159afeb54f8922b0a82a5d58bd4728b8c20bb","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x47312450b3ac8b5b8e247a6bb6d523e7605bdb60","storageKeys":["0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x7184681641399eb4ad2fdb92114857ee6ff239f94ad635a1779978947b8843be"]},{"address":"0x2568e74ac4fbb5937193f64a8e747b8372b8d1e6","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x52fdfb1157878f540dcb961561ce5f3b0bbe6f80","storageKeys":[]},{"address":"0xe3792a9c235d434b702023b33f03c48c41631090","storageKeys":[]},{"address":"0xf88859464d0370433a3147074bc6d6a5aece752c","storageKeys":[]},{"address":"0x654371aa1827c7d30e2c800efadb4c7de1ffa5e7","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]}] diff --git a/bin/mpt-test/access-lists/18363443.json b/bin/mpt-test/access-lists/18363443.json new file mode 100644 index 0000000000..5608668ad5 --- /dev/null +++ b/bin/mpt-test/access-lists/18363443.json @@ -0,0 +1 @@ +[{"address":"0x041dd57480f16530b51e13608e276798fe424560","storageKeys":[]},{"address":"0xddf294fbb9618776fedcd808c43cfa14f11cb6f4","storageKeys":[]},{"address":"0xbdb2dbe612b22854db89706769687438373d4c08","storageKeys":[]},{"address":"0x5b1b5fea1b99d83ad479df0c222f0492385381dd","storageKeys":["0x75245230289a9f0bf73a6c59aef6651b98b3833a62a3c0bd9ab6b0dec8ed4d8f","0x0000000000000000000000000000000000000000000000000000000000000002","0x12dd898f4a480c545f9838e2a0c101409e865c40558462403a8273c3ca3e2337"]},{"address":"0x2486ff197be4553775daf666a815deac482bb6b0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xca11bde05977b3631167028862be2a173976ca11","storageKeys":[]},{"address":"0xf338cad020d506e8e3d9b4854986e0ece6c23640","storageKeys":["0x04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fee","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec","0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0xc3312d608c59a50378089ddba3e807885a8eea46b12e8c273bda8b229030e943","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fed","0xb4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56","0x8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4"]},{"address":"0xabfce8e8fafe34f9add56dc2b183710a2a76f511","storageKeys":[]},{"address":"0xfdc4cf3f70e93a64116bf166e24cb8d2de414b61","storageKeys":[]},{"address":"0xa83df718a5fa09259d5f02f26013f2cd668632d6","storageKeys":[]},{"address":"0xab8363dd601aae2342127959bf8e9ed43c20a269","storageKeys":[]},{"address":"0x415ff1afc201eec50beff210a2f456674046920b","storageKeys":["0x637034ff9a9768ec1d42ca6e42f6582a3447eb554d12d9f5461218dd45d1b84f","0x4142f532bd91051d937a58b0eea4a92bce279ffe9e566097d25513f95f3e3dce","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0xd1a992417a0abffa632cbde4da9f5dcf85caa858","storageKeys":[]},{"address":"0x06ffa99195a5bb90698ffa4e681007ff6a99843e","storageKeys":[]},{"address":"0x16938e4b59297060484fa56a12594d8d6f4177e8","storageKeys":[]},{"address":"0x077d360f11d220e4d5d831430c81c26c9be7c4a4","storageKeys":[]},{"address":"0xc662c410c0ecf747543f5ba90660f6abebd9c8c4","storageKeys":["0x4d034aea955367291dbdfe8d9bec2a33be772a25cc9b93b6250d2b91a2ef4d43","0xafed529457b98a6959a182bd47397490d12ec79f19478c88cc54655860628879","0xb4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec","0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fee","0xc91518601a7d655d0f3d6c6df534338485449d61484080a48872fbc684f460f3","0xf4ccd0482170aaa798ca5c237410af2787d773071dc2639cbfa0bf66f5af1745","0x67963652696f3a8e8976c8d0956f2afb2fdf053b99be7bf625d956fc88a52815","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fed","0x8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4"]},{"address":"0x5ebac8dbfbba22168471b0f914131d1976536a25","storageKeys":[]},{"address":"0x29fea2c9dc6502c50ff3f6141b60513c60075564","storageKeys":[]},{"address":"0x60c84c819ce7a8e2915204de741770edfd867428","storageKeys":[]},{"address":"0x4919b4c03e2edc1d0297b6eb35ca55a481c9a960","storageKeys":[]},{"address":"0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000019","0x000000000000000000000000000000000000000000000000000000000000001a"]},{"address":"0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24","storageKeys":["0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0x42539d294491c145ea563cb7b189eee0555344a78b0c544178a395de5d244e4f","0x2cc468e5c6d483cf4e436ea79a4a6c28d0c2c90b0668f483fcc2aa4e227b230f","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b"]},{"address":"0x647b364ee561b8a00245d724309b9fa5c72fa65c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x4603180bbb8221157880afaa84638e0fc467738d","storageKeys":[]},{"address":"0xad684093eb4472b387f6f7a5dd1768fea65396f7","storageKeys":[]},{"address":"0x0b9ae6b1d4f0eeed904d1cef68b9bd47499f3fff","storageKeys":["0xf83db3b21c811570bbe3427c17a04e0022ec49fa34c45ccaf970a30b7efe7a1e","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000005","0x6b2be13e4077d23ab9dc280707442e6bd0314e11acc845dd86ef15694b3a8bcf","0x275efad705d0d11c88a03f2fd7c77d63dc7efe2070e07aa0e0cf946ce9d79321","0xeac66755346c9bbfdb89aeb0b12fb1c58925aa6b2edf0707448143f718b06b49","0x89088c9f2a7f1ac9ed382e84aa38db3fd85e9938edc86c983ccd46ed0b79ecc5"]},{"address":"0x967da4048cd07ab37855c090aaf366e4ce1b9f48","storageKeys":["0xf904a128e3c853faa3874e8c08e7de8aa6cc235665a2ad446f50a2b129db46f6","0xa38e259b3e467cfa7a893a052e073223923e6e1bcbfd0883b8b61ab5b9d8aaa3","0x10ccdf6a88b7ae57b83d4e64176c87096739f7d9fa50c0bbb71c0d0560cd9caa","0x0febe7a008f9b2404e6842960245b277d71c3e75e331efd48031a81cf73e17f0","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x9d98d7ccc1dac1042fb7e1652b328e16a37a8787","storageKeys":[]},{"address":"0x5a3e6a77ba2f983ec0d371ea3b475f8bc0811ad5","storageKeys":["0x5d49fde334a67e55c4a90d50c16a624b5bc85ee29dc371a116d4e9c5b8ac0332","0x0000000000000000000000000000000000000000000000000000000000000007","0x41d90688a66d73ff62f5c0a155e7ab5ff005208172c6e57c8d5fdf69358b9484","0xab65fad8d227d585b5ba6992214fb2ef665027d9a082ea237e7f435a559ab5be","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000000","0x31a2d0d2767091fe770faf3175f0334bc50f6bfc68aa581d37381e448cb80e88","0x73581d27b3f2dd9e4c6e4c3fa7779c1e009fc233964d3d5430aa18d6f10fe34f","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000d","0x6a71df0dd4d74b17a1b465477dd0e3f2ce60fb2ae8492cb46457e1d679c2edc5","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x6000da47483062a0d734ba3dc7576ce6a0b645c4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x390f3595bca2df7d23783dfd126427cceb997bf4","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000001a","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x000000000000000000000000000000000000000000000000000000000000001b","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000019","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000016","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x742a6c7fc1b9188434124b9bee7b8e22a3b8696f","storageKeys":[]},{"address":"0x3fda25f27211a138adf211f4c060f2149674be6d","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002","0x000000000000000000000000000000000000000000000000000000000000000b","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x82643b1d5aef4d8d33e401ec740a19d416296af5","storageKeys":[]},{"address":"0xa8095c177032a885819e35402646ce8d9e825cd9","storageKeys":[]},{"address":"0x696c905f8f8c006ca46e9808fe7e00049507798f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x99f6de6cedb3e430d8d1f1897fb92c68758f896b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x4a6f485c1c32cc07b41a962ff745e1d2a15f32520f92181d93f06ac057458486"]},{"address":"0xe7cd2b4eb1d98cd6a4a48b6071d46401ac7dc5c8","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x6952b0ff1797e2419e13118bb69eae62920558b8","storageKeys":[]},{"address":"0xff00000000000000000000000000000000008453","storageKeys":[]},{"address":"0x49a2fcfcf2b2025c667732ef0435f548aa6cd9dd","storageKeys":[]},{"address":"0xdaedf1ab7ec587385b9d883a2fee22e849871c2f","storageKeys":[]},{"address":"0xa690621b1d2f8cc06de2de11e4cf69935f82655a","storageKeys":[]},{"address":"0xb3d9cf8e163bbc840195a97e81f8a34e295b8f39","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x72c60bfffef18dca51db32b52b819a951b6ddbed","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0xab5245ab498aa3aa3dd7566292b9f87a8b622a91323f6dd51613fad29e486b13","0x000000000000000000000000000000000000000000000000000000000000000a","0xc9753a66ad610da04beb79f65d930c250bf65f97e40a956821a29e2396fb87fc","0x1657bfd66827d22516f46550e2a81ae8dda3c42f00ed24d8aa3dfe3dfbd85e68","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000010","0x3539903365c4436776f483e59cde8e5e3feecaa22a69da3cf2e77452f5605384","0x431ac926be0a9ff174f0c90f184fdccc7e37efb0a1b3ea9b56c96e304d7ac8cc","0x0000000000000000000000000000000000000000000000000000000000000006","0x0a8622b3bea6b77f880346589e928a5a9e981ee9adf5de6ebaa6cad387beb635","0xb1388f2db63cd8d309ef228eb70910f72c9dbfbbdab820e60447a04923322580","0x765404f494932271b4b7b96b63002d1a99aafc59a4642fcbab1329ef7817dd4a","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000009","0xfa18cce661d851bd4053e7b7c312ed1dc528d18f40ba69c91318cf3a92e7fe76","0xf33ca819bebbbb1861541c20de662508c211dc2389f53785d1fa1f5325f7d0f6"]},{"address":"0xe7b67f44ea304dd7f6d215b13686637ff64cd2b2","storageKeys":[]},{"address":"0xe2b07a269b7c10b369f3ac9b9fd11f0224871378","storageKeys":[]},{"address":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","storageKeys":[]},{"address":"0xf522c0f04dbb5b07610d7b2f67f018dab4a28df5","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x63187d71e139eee983a88d0737447c7451979b3dbb75903c76b5fe430d36588e","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x7e0e75ef5c384cc44dd7ac892cae5cea14e2dba5","storageKeys":[]},{"address":"0x22f9dcf4647084d6c31b2765f6910cd85c178c18","storageKeys":[]},{"address":"0x8efef6b061bda1a1712db316e059cbc8ebdcae4d","storageKeys":[]},{"address":"0xe91cbc483a8fda6bc377ad8b8c717f386a93d349","storageKeys":[]},{"address":"0x31fe393815822edacbd81c2262467402199efd0d","storageKeys":[]},{"address":"0x6cb3ee90c50a38a0e4662bb7e7e6e40b91361bf6","storageKeys":["0xcc6f251de275b0cbe02525d0511235dd654050f4f3f12d09c647337a4ac68340","0x2dbeb2049598770392a629a6f13df0250c7d33cac630db076ff917b65df5ee19","0x0a998e2b5267a855fec2b536d69eb411c8c8e182a57fec59ab6bbe3afff3026b","0x0fa949dc55aaf7f36d47e65c27dba764e322ac03f40b0b0e9d913438d971848e"]},{"address":"0x11b815efb8f581194ae79006d24e0d814b7697f6","storageKeys":["0x00000000000000000000000000000000000000000000000000000000000000a4","0x00000000000000000000000000000000000000000000000000000000000000a5","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x32d80bb380a6153715a380340a591610b4f5a62ca0809dce09eefe0e7c37ea7f"]},{"address":"0x13e4e13a48cffed87c63bd35383c76d67813aea1","storageKeys":[]},{"address":"0xd51a44d3fae010294c616388b506acda1bfaae46","storageKeys":["0xd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000002","0x000000000000000000000000000000000000000000000000000000000000001a","0xd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428b","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000017","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000001e","0x0000000000000000000000000000000000000000000000000000000000000023","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000001c","0x000000000000000000000000000000000000000000000000000000000000001d","0x0000000000000000000000000000000000000000000000000000000000000011","0xd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428a"]},{"address":"0x556b9306565093c855aea9ae92a594704c2cd59e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000000d","0xf68cd560cd5285fa96f176cf0d55ce2f05178e0b25aac465f04891d21bfb0c8b","0x8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace29","0x0000000000000000000000000000000000000000000000000000000000000011"]},{"address":"0xdc5a9a89e31651d60e9a1e6feb767dc9feea763f","storageKeys":["0x3a63c37e3270fd06b43c60a0c1bfcd0fbe4ecc3a2a454695ea6f9d2e18dbbed4","0x0000000000000000000000000000000000000000000000000000000000000013","0x000000000000000000000000000000000000000000000000000000000000000f","0x06929d18f29b68fa3fed7fb9d8070a5363577ed8e8e3d75439ef9ce8fe098f32","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000006","0x3dbb268e74eb5317b968aae683c524cba3e4f9796613672f500ace353ba8468d","0x0000000000000000000000000000000000000000000000000000000000000000","0x9eb9e978eded9538ddd2316255506f4ddb4a003883587256186e155816a5959e","0x353448d629f793cfd872fc5b042f4ea45274cec0126798e9881c36a9605e75a5","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000014"]},{"address":"0xa0b17d7a0e2a103e2b0ecafecc6a29b8d519a528","storageKeys":[]},{"address":"0xb739d0895772dbb71a89a3754a160269068f0d45","storageKeys":[]},{"address":"0xd2347f485b7cd86ca864017a5dee559e3e8a4ffc","storageKeys":[]},{"address":"0x136e783846ef68c8bd00a3369f787df8d683a696","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0xaaef4d5ae6ea726f542033ddd8e0a1df6b189794","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000b","0xceef804a006c10f9dbafe22f97acc7148e36c12470a1806b4c84cd894b34d8e3","0xa55fdf537d406c57b0970779e754e61af5f2023a745c44bc248d35ec1d7fde1a","0x0000000000000000000000000000000000000000000000000000000000000014","0x629f20d8bfbe9a62bd05309ab8c8ad9929adea79f2545b8bcf91de7858d8b19e","0xcdc5cacb532e20e7b4d27bd1d86e3fe331960a6c35fdfc38f5ee228ae0fe597a","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000000e","0x59b5fdebed8a0599e8070477070be40e6849ca769cb1717f281a7d5d78cdb239","0x0000000000000000000000000000000000000000000000000000000000000013","0x6eea42bf65fbf1389646386cc5d79d5378a0c8b47621752579a73c639a67f9f7","0xbbcfdfea5791c371b711c6f268d09b4c37483b981b0f807985dd4dfd751c4433","0xa891920fcad3f07391d9d57756873c8a211e8561c1f227e18e758af64289fd82","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000006","0x6431126254908548e92b90103946e6c7083c5efa38c86e2a8be92e7dd421291a","0x30582bb735035c0d67645a240d259c387c5e99478ccc4f4efe746da3b49bb51e"]},{"address":"0x5d834ead0a80cf3b88c06feed6e8e0fcae2daee5","storageKeys":[]},{"address":"0xf2b792ca68090476e7778714724dc2fa947779ff","storageKeys":[]},{"address":"0x163f8c2467924be0ae7b5347228cabf260318753","storageKeys":["0x3d2a5be9749cfe3ec60d14ef2f842725bb2978bf65d11d28555ee7f0598365ec","0x91e320e648bc3ea1bec1c7814ebbf2e41589bc3b7aad9297ff973323018bd735","0x908babbce7bbef19937f0b5073d69352545ea0dfb6386bcb0276e0615e97607e"]},{"address":"0x0a363560832bc8eec83143f5f7c823d246d8443a","storageKeys":[]},{"address":"0x16b2d19a6bcc021309e31b7a2ff8d0a8f37fddf8","storageKeys":[]},{"address":"0x46950ba8946d7be4594399bcf203fb53e1fd7d37","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x2e1f2ce9810d6f3862344d9b57fb60c3e7777a577222a301a0d2112772ed885d"]},{"address":"0x2796317b0ff8538f253012862c06787adfb8ceb6","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000065","0x0000000000000000000000000000000000000000000000000000000000000097","0x4a04b9f2c8708b66882943eddb5d5350083b4ff814542f5aabe9a830c67d70b1","0xa713a0acff6f2de46288041ab25b8fda7ef64525900295efef2a541e5ee6ed32","0xd19c737734396143d84fecab206eb205529a6af96bf19c648108a9e3631dc1fe","0x00000000000000000000000000000000000000000000000000000000000000cc"]},{"address":"0x580bda1e7a0cfae92fa7f6c20a3794f169ce3cfb","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x9f39ea8255be1fa9195709a23c18dc6acff54dc6f627292f353fdbbd180fe867","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"]},{"address":"0xc04de60292580b9b7f01d610785309f6bd1690af","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000001","0x80a66a63a11a7ae59f33fa2ceea4ce49d42f73d8bcb0028facdaefe7f197bca8","0x61e2e76f6a19393fe82df7c4619aee886ff3508cf884a6095e4114a041feee5f","0x000000000000000000000000000000000000000000000000000000000000000e"]},{"address":"0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000003d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x33a93bd484053615933502cb1299f77de48036c8","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x29469395eaf6f95920e59f858042f0e28d98a20b","storageKeys":["0xacfe491060b475e094848fc44594e8fe186ec1fd1698f56a8e0f7fb24ad94adf","0x0000000000000000000000000000000000000000000000000000000000000002","0x3f92ddf7b223311ff0e9c59321c327658afc038694a7ea06c15567fc8ea9973c","0x532c9200d1a8e3a6a10d6ed37ca3748506f1b9f33d6c01070a30abb704e0b515","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x73561cd22105fd9007908f7ba2cae2873966ab5750bcf99ce716dbec230c226c","0xc95bd371ea9dd6cc2e9511f8974f1510a9801f1d5d18ba3a2cedd73103fe6b9e"]},{"address":"0x0ea7372338a589e7f0b00e463a53aa464ef04e17","storageKeys":[]},{"address":"0xa2cd3d43c775978a96bdbf12d733d5a1ed94fb18","storageKeys":["0xde779631e3dd70d5122d73fba3cd59f0f23c17d4dd4b7d98a44c5b3dfa3e0572","0xd2a683a0c80111b5d9a848f464763f397860c9e75dbad80616d837f54f99f756","0xd13801343f04a57447ba35d4f2a09faad53876c310e963ab4f7582b86f985dc3","0xa6da79bff68c4ee67276d69a85f64b1126a8e8456c4fe632db5fdcc93e171231"]},{"address":"0xf326e4de8f66a0bdc0970b79e0924e33c79f1915","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x73270a15c25bf6f5832f9fd41f9fea9a7915310e","storageKeys":[]},{"address":"0x67fe41a94e779ccfa22cff02cc2957dc9c0e4286","storageKeys":[]},{"address":"0x82d98c813e63b8f0b0928031539046ff49128560","storageKeys":[]},{"address":"0xf0d4c12a5768d806021f80a262b4d39d26c58b8d","storageKeys":["0xa408ba8ceea2527895c548b60e4c24d07defcb5901eacf214bfcb2723fcb3090","0x108050c237422fed9b101c7db7446a55bdb5e1ba4d87e7cd1095ef534bda8bf6","0x2ddf3e8f684d2a93d6d6d5c0a3dd9ac2c849deaf90e99cca0b7aa09a94603502","0x5f40605477164c4fd355d3e893f3cc70d1fedf5adeeb43c8cb5efacb72ae8961","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xe592427a0aece92de3edee1f18e0157c05861564","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xd37bbe5744d730a1d98d8dc97c42f0ca46ad7146","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0xccf4e9af3f4eed76b44141ef1be0ebc0d034011fddd3a4cc5ec34f2be4592f75","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xb5743e6cb9b55a41ea4e0a66271c977d7c766b7c","storageKeys":[]},{"address":"0x881d40237659c251811cec9c364ef91dc08d300c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x684fdb4b219d1c63474e6c8e4dc8c2611de744d4aaa2b78c4ec411ebb6ba9756","0x684fdb4b219d1c63474e6c8e4dc8c2611de744d4aaa2b78c4ec411ebb6ba9757"]},{"address":"0x0c5b07b1a08fb07141dbfa9cceee7f76b8890c03","storageKeys":[]},{"address":"0x6c9042eec422831dfddc5b7da36c0054f7a6ae6c","storageKeys":[]},{"address":"0xa29e963992597b21bcdcaa969d571984869c4ff5","storageKeys":[]},{"address":"0x8761e0370f94f68db8eaa731f4fc581f6ad0bd68","storageKeys":[]},{"address":"0x230a1ac45690b9ae1176389434610b9526d2f21b","storageKeys":[]},{"address":"0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43","storageKeys":[]},{"address":"0x886d906b084cdfee032712fd5b3d577302508f29","storageKeys":[]},{"address":"0xdef171fe48cf0115b1d80b88dc8eab59176fee57","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x6a7f830031540cb6ba9385cdf8981e3597f9470d0bcd60d2f0fe84bda3553da8","0x20bd48b28952f36f79354a8551697624fd2c128c08477dab084b947b53876b6b","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x7994c25b68e887ab62561c8c27eeff3c34c718c5","storageKeys":[]},{"address":"0x1ef89ed0edd93d1ec09e4c07373f69c49f4dccae","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x80c67432656d59144ceff962e8faf8926599bcf8","storageKeys":[]},{"address":"0xfba175fe8169f08eb02239ca1b235a8e13415204","storageKeys":["0xbfb796f01d2de056efd33347c678f9e6c2784c80103e21291ca1cad60a89f056","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000010","0xf2c535f78bbf70e8c137acb4e29e2f986545c919fc7214c8b5be774e28c99ce8","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000011","0x94cc64728ca8193670842cea4e76da9d0c16e319d971d885bcd6bbd134e488d4","0x0000000000000000000000000000000000000000000000000000000000000014","0xee722d724c89bf250dae10049726c7ead1476357b09d9efbec404caf9ea81e72","0x99af55df2b18f5d0f4ac319044baeecfbf31d3f916b070300641f7bbcb7d83d3","0x000000000000000000000000000000000000000000000000000000000000000f","0xe727b34f0abcd68809da29c4cba6af39d0dfbe5e0bd67fe496b4ada39893f3c6","0xa2a1a8f6d540056517f7685ebb03caa2cab5a92426668c4bd156bec1b5a94b57","0xbad0f5a9e726b25bcc17ba5fa850848792b174072bc03c1184566dcc0b989890","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000006","0xe8b0f9bfa0381d444a64fff0621b71b2155fd0fa473717d1e0ffd9bdffa89d59","0x000000000000000000000000000000000000000000000000000000000000000a","0x28a46f94fc609971d854ff967180199382447deb52c31ad45b4940bb8811dcf5","0x0000000000000000000000000000000000000000000000000000000000000013","0x3bdbca05285fc70b92d87d8c7b9e489bf0787dc47751ba4fb70ff7a65e9bb3a2","0x000000000000000000000000000000000000000000000000000000000000000e","0x36583e411db01c939cfb7263d0a44aebf8fa266d69525548c09d521fafe4ed8f"]},{"address":"0xc918f7f14109e74f0dd46800caafe1e23b13ad6b","storageKeys":[]},{"address":"0x6ecea19e9a66806e1e94a785fd6d40288f9444e4","storageKeys":[]},{"address":"0x4d224452801aced8b2f0aebe155379bb5d594381","storageKeys":["0x63da7c95b223bd8df6f855e0c330b0ba1f4391894c7b1034cfdd2c8498687f6a","0x61e381a8f2f04e8883dfafad4dc844e5b02695b963ff2a805fc101cb6baba4e1","0xc0ec8fbf02d70b2873f5a76f503e97bd1b0ca8048ab517fad231214a74ebe459","0xbc16056ccf68c5587752aeebecc9128296fa0597db3b1f8619d7e0fe34e8ef09"]},{"address":"0x52cdb891e90a12d9e13666746ed3bd5779b0b98a","storageKeys":[]},{"address":"0x0000000000000000000000000000000000000004","storageKeys":[]},{"address":"0x007872741ebc63c23826268e486ff4052fca0000","storageKeys":[]},{"address":"0xaafb85ad4a412dd8adc49611496a7695a22f4aeb","storageKeys":["0xd56bd72c62596aa451ec180a1b66c0c7fc901642dcad717eaed55b96526444a2","0xe7b8b9060b669548aac5c6f3f9f3506a8850a20ea630a4605051a9e68e2ed130","0xa8e1248eddf82e10c0adc6c737b6d8da17674abf51801ea5a4549f41c2dfdf21"]},{"address":"0xfa96ad0a9e64261db86950e2da362f5572c5c6fd","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xa28bfc87d659bfe0cec6e6db448fb06f4eced06c","storageKeys":[]},{"address":"0xb8ffc3cd6e7cf5a098a1c92f48009765b24088dc","storageKeys":["0x54b2b2de1ae6731a04bdbca30cee71852851cfcd3298aaf29f4ebff9452b27ad","0x8e2ed18767e9c33b25344c240cdf92034fae56be99e2c07f3d9946d949ffede4"]},{"address":"0xca978a0528116dda3cba9acd3e68bc6191ca53d0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000019","0x000000000000000000000000000000000000000000000000000000000000001a"]},{"address":"0x823be81bbf96bec0e25ca13170f5aacb5b79ba83","storageKeys":["0xf833cfb7cc7738ab3573637baa89524afe718752fa28b314e93881138dc9c177"]},{"address":"0x6b765d07cf966c745b340adca67749fe75b5c345","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5","storageKeys":[]},{"address":"0x613876f3de2ec633f8054fe7a561324c1a01d9cb","storageKeys":[]},{"address":"0x38956b8ae9603c4ac13f553ddf6cb065538d80a7","storageKeys":[]},{"address":"0xd0da9cbea9c3852c5d63a95f9abcc4f6ea0f9032","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000003","0xf3b5e7b2afaa87733d8bedb8430937194b0018dc023c813428f433d751622932","0x0000000000000000000000000000000000000000000000000000000000000008","0x00c50324f2cbbee41befa4c7fdd00b343ec22bfee15cf5653e85155e78b68e49"]},{"address":"0x8dc658dae0604de95a6e60a7abb337d355a6e2c8","storageKeys":[]},{"address":"0x89144ab37bcb72a58b2017981b3e4384180ec39d","storageKeys":[]},{"address":"0x8146cbbe327364b13d0699f2ced39c637f92501a","storageKeys":[]},{"address":"0x7290367aa694703220516a35e68e3d339ee7d193","storageKeys":[]},{"address":"0x1216fdb1868af0adf4f78e862dadb960d391e513","storageKeys":[]},{"address":"0x7fed005ea539435ffedd7085c228c3c17e0d8e3b","storageKeys":[]},{"address":"0x7df70b612040c682d1cb2e32017446e230fcd747","storageKeys":[]},{"address":"0xb5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f511","storageKeys":[]},{"address":"0xb6de3d96a6fee2a03ddad31286ba21128bc6f4c2","storageKeys":[]},{"address":"0x6b75d8af000000e20b7a7ddf000ba900b4009a80","storageKeys":[]},{"address":"0xd7f3fbe8c72a961a5515203eada59750437fa762","storageKeys":[]},{"address":"0x2d722c96f79d149dd21e9ef36f93fc12906ce9f8","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x06b1f84baa77d0b76aa553699d610f2ace263e81","storageKeys":[]},{"address":"0x3527439923a63f8c13cf72b8fe80a77f6e572092","storageKeys":[]},{"address":"0x8164cc65827dcfe994ab23944cbc90e0aa80bfcb","storageKeys":["0x176062dac4e737f036c34baf4b07185f9c9fd3c1337ca36eb7c1f7a74aedb8ea","0xa9067f880bd923501d182ab273aeb10d5e7b2922a1e90246a9a4b163cbb708b4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x7ed066718dfb1b2b04d94780eca92b67ecf3330b","storageKeys":[]},{"address":"0x95d63e0db94e6f0485fd3a3f4ce5e60bcf53a046","storageKeys":[]},{"address":"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000002","0x63bea916cef7359acf395d0c25e3526c585459c799da40751b0e2ed3ce04facd","0xf8ccc5baff311405947d38199a9ed11051000f058320c1718262902c7afb492e","0x30ae1eb9080cc0c26cbc5a6d3351a8dfd071566f51b830db5193fa02f085c768","0xd47b44da93a490eb8655dcfdfc921b4e0850ad0ced545e96f3a9a2ea83230d58","0x296ca052671869577b182843ddb14060e46e608806f48069589f2222fd579d8c"]},{"address":"0xc36442b4a4522e871399cd717abdd847ab11fe88","storageKeys":["0x6cc98dcd8f70dad0a044304f67f466f589857f19effd5c9d849e8dc97b4f857f","0x65c73d9bc53e36987b892850502d6fc2c0a4c8270a583ebf05c314fdf33675e2","0xbb9382d1453a6f935ba3d5111178a2dfa3829cc00143a58d36d76fdb0aec8a4e","0x453bc7eac0c46adaa20c62b7d44b063d432c77620c847f9ca7ba5f4326171433","0x6cc98dcd8f70dad0a044304f67f466f589857f19effd5c9d849e8dc97b4f8580","0xd52199c8c2cd5078d2955d688b4b1ca41e780711ef3910e58bd14e10364814f6","0xd859e4422a232f7d8f73ef924f2bbe4e9168f14615de24c867b2b00be9817e4d","0x6cc98dcd8f70dad0a044304f67f466f589857f19effd5c9d849e8dc97b4f857e","0xe940efb98da2522daacfed0a6f5aecf25c2bb059bcd0b555f09537ebfc335a1f","0x000000000000000000000000000000000000000000000000000000000000000d","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3cb6fa0","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3caf30b","0x0000000000000000000000000000000000000000000000000000000000000002","0x6cc98dcd8f70dad0a044304f67f466f589857f19effd5c9d849e8dc97b4f857d","0x6cc98dcd8f70dad0a044304f67f466f589857f19effd5c9d849e8dc97b4f857c","0xe940efb98da2522daacfed0a6f5aecf25c2bb059bcd0b555f09537ebfc335a22","0xe940efb98da2522daacfed0a6f5aecf25c2bb059bcd0b555f09537ebfc335a21","0x65c73d9bc53e36987b892850502d6fc2c0a4c8270a583ebf05c314fdf33675e1","0xaa6e501c6e0e37b85bfadb3d25a7e5c21ca637b7a14a88dbbed64a6e9dfe3b87","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3cb6fa1","0xe940efb98da2522daacfed0a6f5aecf25c2bb059bcd0b555f09537ebfc335a20","0xed3166830ec2f08a2a3ec0f332dd330e970f35770235ae1ec9a1b5d294041c8b"]},{"address":"0xbd7b550d2e7571383d84acf597a00d341e5c406e","storageKeys":[]},{"address":"0x0000000000000000000000000000000000000001","storageKeys":[]},{"address":"0xf6a884fbb206a4514f2b5c7878c8084efb75f291","storageKeys":[]},{"address":"0x733ca30d19f193c1b60340697d066d11341acf2b","storageKeys":[]},{"address":"0x6704ba24b8640bccee6bf2fd276a6a1b8edf4ade","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x5f4ec3df9cbd43714fe2740f5e3616155c5b8419","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x4a5048449df075f07a3ca4ef5ed2de7f6f240472","storageKeys":[]},{"address":"0xa978187dd88788a773d7e3cbe0f729388a26e3eb","storageKeys":[]},{"address":"0xd4e791def1d554de05ec87379f240889601ce6ef","storageKeys":[]},{"address":"0x19ed335da544931ebe74afff0d93937fbf49878b","storageKeys":[]},{"address":"0xf1cd4193bbc1ad4a23e833170f49d60f3d35a621","storageKeys":[]},{"address":"0x053d80cdb4768203d0276751b6cc9611580af03b","storageKeys":[]},{"address":"0xeecf809ac3efb44d1c8f00c1914157e0dccb0752","storageKeys":[]},{"address":"0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2","storageKeys":["0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec5","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e48","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e4a","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ebf","0x0cd9d02c5a1e191dee341e3db951358a0ad74a185a7fb14c993ed77b1730d35d","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e50","0x000000000000000000000000000000000000000000000000000000000000003a","0x3db89e40056e1e415b186b37b7cb88f6ba0da57c1d383403faf92bb06996b6b9","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e4f","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec0","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec7","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec2","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e4c","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec3","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e4d","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e4e","0x4c0bd942d17410ca1f6d3278a62feef7078602605466e37de958808f1454efbd","0x4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e49","0x000000000000000000000000000000000000000000000000000000000000003b","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e51","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec4","0xf81d8d79f42adb4c73cc3aa0c78e25d3343882d0313c0b80ece3d3a103ef1ec6","0x5e14560e314427eb9d0c466a6058089f672317c8e26719a770a709c3f2481e4b"]},{"address":"0x2446dcff9140456393ce86ee588635fac96f68d9","storageKeys":[]},{"address":"0x18672b1b0c623a30089a280ed9256379fb0e4e62","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000003e","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000028","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000005","0x000000000000000000000000000000000000000000000000000000000000002a","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000002b","0x000000000000000000000000000000000000000000000000000000000000002c","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000029","0x0000000000000000000000000000000000000000000000000000000000000001","0x000000000000000000000000000000000000000000000000000000000000002d"]},{"address":"0x32e6ba5594acf78726aa482235d24fea8f9bb875","storageKeys":[]},{"address":"0x4ed5ad7c8847a16d25c4887c8287c26c57772c07","storageKeys":[]},{"address":"0xe1e7ba7f42a262069b8f296be7cbf9bff96f4ad8","storageKeys":[]},{"address":"0xe0e52675e3a21b45d33e11cdbbe9628bf7b698ff","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0xb8d683c9d414f481826f3e7fe14b3ac6ae8c73450778287390c4bb8cb9f2e80b","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x6dd0f99d1eb6797cabb4375fd443c4f68a3d6079","storageKeys":[]},{"address":"0x267be1c1d684f78cb4f6a176c4911b741e4ffdc0","storageKeys":[]},{"address":"0x1092e00d4db9748fabcee5cb4406fafb5a7a3d92","storageKeys":[]},{"address":"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf","storageKeys":[]},{"address":"0xcfeb09c3c5f0f78ad72166d55f9e6e9a60e96eec","storageKeys":["0x75bfc36bfa90cdd40f14b94ce404dabb9f11d6876f7e15d94f0eb3e432185442","0x45ffcf33238dfe23b8d421f254601dae0da7fd1741241d2bcba35144e38e0352","0xed7b01dde59e2ded3065c1163525ceace05ee3bec52d6790c360a2d50215076e","0xb39e9ba92c3c47c76d4f70e3bc9c3270ab78d2592718d377c8f5433a34d3470a"]},{"address":"0x56b217cc582e19b3ca933fd411e85ca7def68445","storageKeys":[]},{"address":"0xa964d693cd45fcbe4303524e0efe0988cff5ed08","storageKeys":[]},{"address":"0xb23360ccdd9ed1b15d45e5d3824bb409c8d7c460","storageKeys":[]},{"address":"0x2fd08c1f9fc8406c1d7e3a799a13883a7e7949f0","storageKeys":[]},{"address":"0xa5caff3cf28322d277445538f7bebe63a319a3e6","storageKeys":[]},{"address":"0x683fd5839bf6711be73e6cd5aa4c805d032b96f7","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x6ab80082688cfc4ddc36599e9d9561334913871f","storageKeys":[]},{"address":"0x8521dfdf3b31ca8930e291434077f664addbf6be","storageKeys":[]},{"address":"0x2f39d218133afab8f2b819b1066c7e434ad94e9e","storageKeys":["0x9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b","0x740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd63","0x0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab8"]},{"address":"0x5050f69a9786f081509234f1a7f4684b5e5b76c9","storageKeys":[]},{"address":"0x44a6999ec971cfca458aff25a808f272f6d492a2","storageKeys":[]},{"address":"0xb75690f6916933261796a06f93dd6a3e8706b020","storageKeys":[]},{"address":"0x71660c4005ba85c37ccec55d0c4493e66fe775d3","storageKeys":[]},{"address":"0x767c8bb1574bee5d4fe35e27e0003c89d43c5121","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x17144556fd3424edc8fc8a4c940b2d04936d17eb","storageKeys":[]},{"address":"0x667210a731447f8b385e068205759be2311b86d4","storageKeys":["0x0bb90043630fe4329389f5cf55e84f0b14f5fdd840b9ae35239670ba29bc9ac0"]},{"address":"0x9cb396f671328680fc4623f799ccab38d6c0568f","storageKeys":[]},{"address":"0xef13101c5bbd737cfb2bf00bbd38c626ad6952f7","storageKeys":["0x13b8ac5cbe54560dfecebf60f06748d7068ef09f2824e7ae7bcde23a3f5043f2","0x49e349d4f386739afdf8e55db7675b584d46c3b2a603eef62554e21dc437b5db","0x7cb85a05b83cf4b542b59b325b6f90658e06528fc81d9c964ec447b5f4e0519d"]},{"address":"0x3d1ec87ead59939331bd4d16d04c61844ed1ac90","storageKeys":[]},{"address":"0x98f3c9e6e3face36baad05fe09d375ef1464288b","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c4","0x0000000000000000000000000000000000000000000000000000000000000003","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c86","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c3","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8a","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c83","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8c","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c88","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c84","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c89","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8f","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8d","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c82","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c93","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c94","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c90","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8e","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8b","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c91","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c92","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c85","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c87"]},{"address":"0x0e76943a45f3dd02edbd78067930c1bfa8da96e1","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x548f27e2c1eb0c90c9c0ef3a4a61a6ae60038f02","storageKeys":[]},{"address":"0xdac17f958d2ee523a2206206994597c13d831ec7","storageKeys":["0x4240d64b6b79541752a19edd6eacd180f5a4336d602d15bf124a25858ca32d4d","0x93da1efae97ce6b353d34b3a8079f98e66a886c2b38db280b5fce5f05945855a","0x42ae8370c488a4ad8b0ddf619d110a0ccf166f7aaaf05db7daee57a4c6a9bb94","0x3a2e877cbe1c20f2c497461e7baf1f9c8615bcccd1ea9cf526d06d6e5a6e8dc5","0x879f8ad2b7b3f6ba5078643c6aeac384271fcad7a82ba4d6d2e8f77f99c7982c","0x71559d9e735206536601317f0ba837e3bb6673d661af8d968d05abdbc3b5eca0","0x61806a02d55d0d0c7620a27274300f3809bdab323ae2059c88e73898fec468f4","0x29fa5b1a4ac0263f18489504f341410d447d524990124199b732749eb5306e8b","0x0000000000000000000000000000000000000000000000000000000000000003","0x75f7f8a447801bb3acf20ed694b60cd14d95954391a921e8e0e05339d096a919","0x8b1cce3cbf810b099a349c39987204bdcbdd788f14c68316c12a6421474499d1","0x58a92a8c3bc36c87dac56b908a53927dd09879570deab38dd690d012eba2a5e1","0x5256e0c5d4a1d074108af5c7fb4f907ba5a00b53f19be06c043a036a3996391e","0xc486db2b76e88ca08a4c81505df9be07d859a13b15293f6a16203c8897e4fe0d","0x059fc571d3e136b6b26c498756ded0b08e59457fc43d12db4ad5dae7c010cbda","0xab81ded25dc5eaddc842b73a81746b055d5f04ddaf4c4f3975f1b084144fe569","0xb374c3016b5575858b42ffb30504a6fb0c34d194a911f2773aadfc829a3ab9e6","0xe1f7e6ab56bc25ae12f7fa7cc7f7d82e8e875736bcb69d9f0877f30a8e9d1c47","0xbc960135db2182d6782004719bc76ad45669a6ac9f17c1fa8e1c68d9c7d95427","0x95aed48a3e299b1bd009cb96e9df36494b58e68acb959025a85a3468dc48bea0","0x0e305967b4be5201d5620d44700e753ffafb4e91aba30635434dad8c9e820852","0x359d07de0d68b3b035e506db0f1a7f5f120138d64a2cd2dae8e127243acc29af","0x76c3196c40c1047b842470c952d43291e241a446825b4c8ce4a16add3def3f38","0x4d6ca782079f08b3712a84a3b64861b50fbe4ecabca77eb0fd0206f07ef0aeb9","0x77b30b6ed39dfe4f8e8cbf6d6fb90817d4374e3058ac2fccc9ed0d4f0e4f8445","0xa65ef9e260481b54d24a6843f71cd0fab54346b6a11159023bbb0675f14f7961","0x3131bda0f2f70358ce16bf15a5b77d984f69c5604f0dd514ce30851741eebb61","0xc9c023cd0ea716c08fd5de6c4e659fce0097e7fab08ce7c15de1e0d139d3ea3f","0xfce564b4f7543ff065143b1bcc861c733a2550a3c8e7fce625dfe05a443d86af","0x1a8154a13d70170b8d4ff5669674c136d50518e33cf378fb375f2ac54d92b501","0x4383669f6a2aff71ef5baed0ea76ee7ca95a9cd31b4812de6b2a47f459748147","0x0000000000000000000000000000000000000000000000000000000000000004","0x4e3941e4abc999c48372c1a2a82babcc4e0147738d25a0402a334b0f8b57bf95","0xf067fc956dd5870590f41a0f7b0cc62390ee80b15fc084fe93d4a75a02d8638e","0x70a7c8a859a8aca5e6ce83900a52a575cd9080e8b89cb9803394d09b8f89860d","0x13e4494059a3247194d80cb16337efacb2b216aaba151204d4fe0ec553f1dca2","0x1e9dcafca826b14cda5a347b9cfc79a16d81aebbdd7106bdcae100b8e6a42386","0xae9706944d54c2ff1fdad2f25db7e71f2acd7385ad63835af1f81bc99a398c4f","0x0000000000000000000000000000000000000000000000000000000000000000","0x1d79316b2aa25897f10d08f77e2f7dec84f5e4e86add982f28d5f85d95073ba4","0x741fa6c690096848542c422cf4b3eedc06a4a3dcd82a79dac3b2bee797c83796","0xfec1b1259f1b4c5b13b2e3b744ed4c90ed15fecc17f3a59cf9e3b807ab5883b9","0x996df496848afabe17f40cd8e1ed939406582aa33ff73923431e56b8763aa402","0x357bc390c5e5a67c86f3167e033dff9f2222213e9640ed3168a0319126747f7a","0xb77688c84f8fcff6bd5521050d42c556c0c670f15f5cea4ed3f4d92887971d87","0x03310ed29127619d38ec6d09b845ea5d195e6a480be222c8d8e8acfded82a1aa","0x000000000000000000000000000000000000000000000000000000000000000a","0x78b35599871be95768b2fdfaf9293a4491ecdc8ef25b872ee404fa1e441436e0","0xbef8e7df292f22f6faf0f58200c3d33e4901b13ac3dcd9a8d45df4cfa056b35c","0xdd7580ef7fe724d0429b0b3cf19d286a5f764565b4def7f56a178b99c9fc804b","0xc4a4899a685e0865d97d33ea1e8b9ef4a9f46e0133a6520706e3805d3d6ec400","0xa8190def9abe2db51350b8b1ef4c7ca5bca78372f79e55aa3610066fedb8ee67","0x8e46fe25a8051c5ae8b974c8d9d7c293a27638450887166d2175070103a71e82","0x755dec2d9f33a7cb76fdcd09f566b2fae3d09587ea324ae81586f8316dbaca31","0x56ee5c039aedeaedf1032028e6c6acb8882795c2c1cf967aecbff3b2c39ab4c0","0x70eb558e519e4ce1994e0089c96ca1d380e3d745832b467906a56e662d8684e3","0x7f58089a8da39d29ef25e1a01bcb5bc50aaf62e3dde2aec2435eaf0815567801","0xe8c174d850a7c4fd0f7b6cee26e8cf66a0c3145fc3da8228c577cc3be472069a","0xb36be5688aa5f1fe502bee16eea4495205ccef19d4d43434f78908a09f95006c","0xd003f015b6188804fe55c49f8c6da00b84def4529aa152558ba4457feeabfdb3","0x11e86d675a888d93cc8895f359e92408bab8d54b1ea2c627f6ee4e1dd016b27f","0x40010861c1447f4a139d1670c77fa3eb45332c3e75a7218a3913ca88aecb6006","0x43507c47a78c9003d1751fb0c0e92cbfe39e9f7e6ce0e20a72cd629dc07e96b2","0x0128a010ceddf639c1621d45e6f7300841aef6db5f4008c2d5fb7e63d101187c","0xa5f916d290f620b74395fcd82c33814808951aeb45e2e491c8a995419629c648","0xcfc1ecad728a8ab977217ad4a81453593d16cd5a59e2659db89836b815214903","0xee0e718267821a9cf41e52d96fc7e2b2b4f3852019a110e999d20c2b0813f53e","0xeb449bc003e7395128833de1fb3384246962a9d4d29c66083486accd9139c704","0xa2b0e51ea636cf32d482d9a0496f31beba85fb2afdb73e037be14082c3532308","0xf7dfe80a7bad0acb2dc0b4d87e03d83f102fb5f6cb9a48fde1e3dc344d4f17a0","0x8083591b79b201dff8d6016c03ccd7f410aa0b9d7a1a4f487028cfe821f8ef44","0xc3339c24cbccf7fc017d054edee1c1c7531cd8117e8a669abff31b5dd2006ad5","0x125617aba6520df91ba2f6482cb0f4289d91d40d63d800e4260764bc629f6b28","0xf9e3db02386564af4434566e28a373129f262915dc76cd58da2ffcc5f1fa24a6","0x256e284bf7df8f84cb9ab6f3f555ceb16fd472c1b8b3fad3fc3a8568e7e3ebf5","0x41454207968c72ca1f3954c5598e356985453971691489da81cf528e5ddc46ce","0x32386aa1ea2888e40243b524a67e7408609a4257cebaa46f72ca08964fad63c9","0x6e9e84ae7b8edc848e54262afc59a03baa298e039f2917f989989f0639ac12e4","0x7fbab8c305be8dd5ee9a8d9234d1b05f98fc7b07a354c943bf23048d0094a539","0xd7099bc8ff35d5f21577d120f62521b6a6cf68de6422d0d419c14e0688f914b0","0x0d02d1e277a0b66500169364924c919081e8b2118b0b5527bc7870dac1d972e0","0x169228ca33ea854d54aa1e506e59ec687f618a41074f5f5de937a0e9c6343e5a","0xc5769fb40be1cb6499c16d184625c4fa9f79b98414db53e5a41a97ea261a5312","0x2e831b46322340981c11411233de221cc9da9d5d518b843e81d1d6a997e89ea2","0xd70136eb34f79a8857fe2c6c5025d02bd9d96c5f0a448387a5bd24afd06fd6cd","0xcd1435e98db29c7f2ab0e6e13e22df360f3db4ca2bbcdd175b072bd3c2a83f1b","0xf0611ca658f6987c553f7ab19a73658d708b7f52fd4744827f6307f1ca463dc1","0x96972769ff59c6058955634be581f74619faedff2a51eed3243171bfe3eca97e","0x21cec826884609e4e521695b19972226e65ef6ada141838b7a09e7c2fea20c8a","0x1cb49a25ac2ec6f53250ae87307353d19a4b127e22da62c0fe816fe8b50482e4","0xe3b2e6597695cd9803b32ba2e4f93478b04bd1f35e2cda3ba4dc0d361c3e9fb5","0x0af9788064d4c31144684b6e9d2866c87e01efcc998f746dd8a0d743eb92d836","0xa63184d49be69ef8533eb1989a6d79f0f4b9ee3ab098cbdb19690420d21da5e9","0x93d5d383028bcde2f321df5434dfa08e927cea26e5f66f013a30c45fa9d2dc47","0x7c5de55ec44bfa02660fe5d071e6fcab76fff0256a9779a901f5900994da7fb8","0x9ca8924da97f10814c47735c7fdf043b03e330b5fcfe32bb82e0d66539484ccd","0x9c794d5186765ec259e7a49d8b01ebf991a8313af2a7ad9eb2d574167dffba85","0x1f89353eff09c4d20eefa8f2d54d25919512fe52ee494372fc94aa8c1ebb5238","0x06e2f7175ee7b8929081ee615743a2c327b3407ff87349b02ec03852d5bbed58","0x35d7fb7665514f774d2c2df607e197eb8674b6e63d2638472758647a2e67406a","0x9f416b2ff3848f29c1136ffa80b71e90653aba84b394c153763d1c891c2240c8","0xd4926819075f67206d950bc3bf5d48622894782637972462b87f1c0cb98b6216","0x4966c331fd21bb95e5096f54ff5bc865ffddab6a0f3c4edcb615c80b8d472ba5","0x2ffe96b501e60292eb0316c8fc38442c42e408e4f13dbcfa5251330006d737ed","0x1a18eeb796297fa09e602d0b890a157c79593f3aea15d5d3c5c60fa6d0a9adac","0x8893972524949e80191e7cdc95673ea996330793ba19e136d403bf0f366f2f1d","0x524bfcec436c05b97c4fa0a4b01bdd00880f509c00db106f1fdba5574a8c1526","0xb6fa6a63add63f3a78d524218dd993e0b29a3522e4fd390473fe0a5e79e61e2b","0x802b5f0caf37e8b2429fc024d3248e71315a224acc9556da583eeb787adb04cd","0xfce891f4941d737b64b6319c352f82f9b54720db9375552b4dd4840c8403d43c","0x6aacad51e818fe1e62873dd3be752ab690963303332c12c8177fc179d13f3619","0xa0c2b4c77b2374feb7da9b3d5393b8e3e13705173aad7ac7196477e40f35ea2e","0xcfb14b389a5147b66b9189aea81931a2df5b0d452f0222f7963148a932fd85aa","0x6dde3431c419530847e880062e10d39cd2f275fae4f5ca8be7d7b594bcc6ddaa","0x4b1242f4b1a387c9b14f8449eed7e7f0cf8ad2ec8398954c7a57f12ce04b6327","0x3fdd8881554d03b60f70fbc8f25a0b8cebbb7818e43bb7100c9c9c0c4c0a4544","0xa792d138d23c6b0c2e5d1820e3c2192604b496c12944b1c3a08c3b8f15333f1e"]},{"address":"0x3c3d457f1522d3540ab3325aa5f1864e34cba9d0","storageKeys":[]},{"address":"0xc99c679c50033bbc5321eb88752e89a93e9e83c5","storageKeys":["0x6af98e99429e430269837d06009ed6c7892706b39538591cd9da290ef6dc9382","0x41d7bf14ca20af2a98763db0252185f02410caf6caaa30db996170af5c223d99","0x7056050200b237383ccc55b5500523fd942d7288ea1ac6754b5946bbd4092c1b","0x7417a935f030c60f8de4437e13a345605cb5c44fbbcea09b790ba17741732924","0x4ac9d40773d21b54ffc892e174810018566b23d88f798dbf5aac890a86b8f961","0x15f7a9f50c88c2c7b8cb2916b8c1a0b0e246e439d80dfe76805a80a1af780ce1","0xd2845658a957c8b94673691b92cd84f7003c95402373eb148e0ebca45c121872","0x927bcaa6049f82b597da9464794fd3a6320f3eb39956dc17ace7f562a8cb9c1e"]},{"address":"0x5aff159b810f2244b6d009e7630b3fbc4f057986","storageKeys":[]},{"address":"0x54f251b53b70cd3c0d43dc2fb22704e6c0b4677e","storageKeys":[]},{"address":"0x26bce6ecb5b10138e4bf14ac0ffcc8727fef3b2e","storageKeys":[]},{"address":"0x74de5d4fcbf63e00296fd95d33236b9794016631","storageKeys":[]},{"address":"0x2a3dd3eb832af982ec71669e178424b10dca2ede","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000039","0x000000000000000000000000000000000000000000000000000000000000003d","0x0000000000000000000000000000000000000000000000000000000000000033","0x0000000000000000000000000000000000000000000000000000000000000034","0x0000000000000000000000000000000000000000000000000000000000000068","0x0000000000000000000000000000000000000000000000000000000000000053","0x0000000000000000000000000000000000000000000000000000000000000044","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000036","0x0000000000000000000000000000000000000000000000000000000000000037","0x0000000000000000000000000000000000000000000000000000000000000040","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xb26d1b052b4754c49f650d133f7f59a02e8ea21c","storageKeys":[]},{"address":"0x21202591a02ee22ecc9a4e3a11ab2cf8956f5b07","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x098d468efb4f874d617491296c759dc9ae46efb517fe36bcf30699ad3f714c0f","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x47312450b3ac8b5b8e247a6bb6d523e7605bdb60","storageKeys":["0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x7184681641399eb4ad2fdb92114857ee6ff239f94ad635a1779978947b8843be"]},{"address":"0x891fa77ccead988965b2a68ac9ba1db9c5549437","storageKeys":[]},{"address":"0x7cdf68ce9a05413cbb76cb7f80eaf415a826e313","storageKeys":[]},{"address":"0x388efc4d073d87e18a2d2364aee11a61b3dbd39a","storageKeys":[]},{"address":"0x5ac4182a1dd41aeef465e40b82fd326bf66ab82c","storageKeys":[]},{"address":"0x1e072c85b84deda7db0d24d8bb60a21e7ee7ddcd","storageKeys":[]},{"address":"0x9a158802cd924747ef336ca3f9de3bdb60cf43d3","storageKeys":[]},{"address":"0x736ec40644ebd118d170d65079ba2bb1eb4a1178","storageKeys":[]},{"address":"0x100daa78fc509db39ef7d04de0c1abd299f4c6ce","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000007c","0x0000000000000000000000000000000000000000000000010000000000000008","0x0000000000000000000000000000000000000000000000010000000000000006","0x21129256a4eafc08958a0b807887fcca646f82bc20b60c3451704bc77e608f0d","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004","0x781fe1d320cbbd5f46653f6403c1ba5b5e8effa981c76c26ce9aeb2134ae2c59","0xec845b066ea74d1577009bd025ce13e11d1b63a356c23b2f3ff7a61d1930e0d9","0x0000000000000000000000000000000000000000000000000000000000000186","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000010000000000000009","0x781fe1d320cbbd5f46653f6403c1ba5b5e8effa981c76c26ce9aeb2134ae2c58"]},{"address":"0x1c91da0223c763d2e0173243eadaa0a2ea47e704","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x421ad2fcb64c039f08129d5c120f8c6bfc48802a","storageKeys":[]},{"address":"0xa4e5961b58dbe487639929643dcb1dc3848daf5e","storageKeys":[]},{"address":"0xa8b09be3b9ff88c5c421a916272762e21a9419e8","storageKeys":[]},{"address":"0x4976a4a02f38326660d17bf34b431dc6e2eb2327","storageKeys":[]},{"address":"0xa0c68c638235ee32657e8f720a23cec1bfc77c77","storageKeys":["0xa1829a9003092132f585b6ccdd167c19fe9774dbdea4260287e8a8e8ca8185d7","0xbaab7dbf64751104133af04abc7d9979f0fda3b059a322a8333f533d3f32bf7f","0x0a7e0e74b40a947daf7b6df34c66be699f819f509940d1bd48c4d99bc5e3353c","0x62dd54cb621690df60c9b7073f32e34a6d856df3f9aed423651b66401f67d022","0x69bc9a80c51a557b6c5a4b7c71ffdcd97cc91b2bda5dc1b0da50dd9e6ab21239","0x7a3550d478a915b0b10785bfd629e4167994cf6d3bb52ded51cacf0759560a49","0x693a712f7ba943ce5af03c38013e94f869c5db0fe736c5236791209c4bc7f2d7","0x9dea75ad6703158f30a41e6f868e38130029363ec929f7f5669a536f581e3b14","0xf011c352cd55c51361d27e2685f86add2b92350cb05f654a3bdece1fdaf75acd","0x755bf09941a05945f5c1a5bf48ded1144e6eae0c055aeb34ae1632130db7a65f","0x0000000000000000000000000000000000000000000000000000000000000008","0x3d6c902089d5053230afb20d03add215c708a8333f93f9395a50fea0c3493a61","0xa8e1248eddf82e10c0adc6c737b6d8da17674abf51801ea5a4549f41c2dfdf21","0xb19cf2e52982b41c5e63c8d2b213089d6b958993eb55c34ad5b9543558dda2fa","0xf24581de3108c634cedd33e0cc3465c30dc80855ea1c5e95374b1a690d73d7d9"]},{"address":"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x8d4caed79b68cca8d11e3c46b473177a2f63fa0b","storageKeys":[]},{"address":"0x4a67aed1aee7c26b7063987e7dd226f5f5207ed2","storageKeys":[]},{"address":"0x4b0c925f3b2325c448990824e91132cd5f395f2a","storageKeys":[]},{"address":"0xb02381b1d27aa9845e5012083ca288c1818884f0","storageKeys":[]},{"address":"0xe714863d919fef75c2e5fe60983439634124ab18","storageKeys":[]},{"address":"0x1e0049783f008a0085193e00003d00cd54003c71","storageKeys":["0x73f81e05fe78bb9c03fd7e2026f0245c29102ff947eddf738e68a7faea7f48aa"]},{"address":"0xfb19ffd1ff9316b7f5bba076ef4b78e4bbedf4e1","storageKeys":[]},{"address":"0x4e9c22f5bc7dc655b9e2bcb5b5f2830047f7571e","storageKeys":[]},{"address":"0xbf2d58698a8a215f868cf24baba360c77266b466","storageKeys":[]},{"address":"0x92a5158caaa83ba2a1ed8e8fc28da823d227e04b","storageKeys":[]},{"address":"0x6edf968da408a9640b8865826429a977a11c5048","storageKeys":[]},{"address":"0x95a9bd206ae52c4ba8eecfc93d18eacdd41c88cc","storageKeys":[]},{"address":"0x1a904179b7508d22507460224ed65e17a4db613a","storageKeys":[]},{"address":"0x1111111254eeb25477b68fb85ed929f73a960582","storageKeys":[]},{"address":"0x8a7b7b9b2f7d0c63f66171721339705a6188a7d5","storageKeys":["0x5e4af95e0cc4f08c30d46a381963b76be0078cd380730098584840f07e62195e","0x659a4ceed2b806fb3f1651a1f9d9eda8a3a803528691ca29ad0cb6903d9faaa4","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x7e4079fed15a7bfa6a9f8a68dd289222870da45f","storageKeys":[]},{"address":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","storageKeys":["0xfb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8","0xd212dcd01ed41455be0b36533ba78a0fdeccda0068b5f90fa610f816600cbd08","0x75245230289a9f0bf73a6c59aef6651b98b3833a62a3c0bd9ab6b0dec8ed4d8f","0xee61682ec263cf9ac626d5a9b0cd5e26edbfa98b5b368b540e65bd739c37e3b7","0xc0df4b32907cf80f95f8d7e2661f7a67725c8ee2f51baffe46905ce46886350d","0x3da19cbbddb7791ab46d3933c60df3c8be398aa24c48fdc578537dc4fbd5bccb","0x61bd8b7d7ea1350e36cb998c4b61b337d0b7e6c625816251eef440c23f9b21a3","0xc937356fbb1d41a475e0aeb9c72b3680e850136654e0c6ab468bc8188a0b9606","0x63e09293a900203a27de1446b93aafc007134bf082e4f30c40a88ca9cacb9d60","0x0cfde81cdef18be5b61e36abce423320f5851fb3d2f5f460a99b2537bc6c1c3c","0x0000000000000000000000000000000000000000000000000000000000000002","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0xfa8d90c31aa9d60d8a5563d6b06b294f8851151f431a19253e3852de6275e289","0x058626be24917c1ae4ed5eab3b04ff1e21a4399f4fa3e36a0942903d4465e60b","0x01dea62a263fc222b26b5753e32b57cd299be8747551e6bdc46da9730656c016","0x6a4eff247b7329536ddf871ed3dd8d4d7d9d28d29ceac00d4f1f45bc6a92ef2c","0x12231cd4c753cb5530a43a74c45106c24765e6f81dc8927d4f4be7e53315d5a8","0xc565b8467ed0be432a896df92668a8397c5e16b4f50e6c53d4929ca811966139","0x65d843a32fa82c8baa8838ae701902516891fa62ff9bb968f1c878392be09941","0x12b8ba28555eac908c7ceeaffdb0aaf4c1c68d4c264f05b89b617d175125e4f7","0xd83c2a59e8a43f164ad9045304e28228b56b85bd11eeb9334557d48d1146da94","0x24b82e46710ed83fc73420a216c5d1b628e0e01dd1ba1218e862b2da11ef675b","0xe2227cf0b5be4d7ba7a42923d3c43d60d4214f9c2f94c2cf3db4cab9b6a0bdbb","0x888a8fc6fd639586fafb899e482503a0fe52a2a235b014ed5888d17107810e4e","0x47acaec6cce4f8679df357c0511627b345d6e8f569cbcd40f3cc0dc80233794f","0x615a1543cc130b48348933084d59877755e9b16372410ea81a66cd5afea1c849","0xec162348c00cbe903f0a5ba2d4aaca243f0d966690a745c44eac095ca65e24d1","0x8d629cb47d08e89353adb6c7692b952b309de6af172d6a1081aad5fa72045c48","0x39a528031c821151a0357442b7ae7ecce02aeec01c8255f8ccdd708707e959c9","0x0dc76d08d3e6e228ea22bcbe629bd5d58422f8750b11e01a7667909f11f84ac2","0x7c96a3a66922d7aabbac025d246237eaa35b006d001e3b132ec84fe3b8b21d0a","0x73a521ebb9c22d2aade7f1dd6340ba405c7330c2adeada9860737164168d5264","0x15f7a9f50c88c2c7b8cb2916b8c1a0b0e246e439d80dfe76805a80a1af780ce1","0x551680380acd9af1cd1dd5986c7e8475abf0765270bacdff5e1f2048eb5ff97d","0xb1151b5f51c370d607b59e0034392dd388ea4cc8dded24ec75baf3df36983150","0x0abc69951c5b665c2269133980e9ba8b6e10b45605200a94aa15cde106535401","0x6b1109c7e1669b7a23f286ed1bc8b52e9f75b714f0aecf873ed7076aaa6a7e6e","0x2b83b3e1fb436772e592319bd36c360dddb62d80a39727784d546decedbafe26","0x2fdcc99b01e8393a8bf0eaa262e26ba1981b8052fb1ec7ba1213ffeb9028ea16","0x4fb413805902e1d9a6681d54d7946be4d2c3433fadac4304eb49ef1b5a52a8f4","0xe03178286da22a27dd0b1f68fb538cd07bc9080172ee9a5a2238416fe86db02a","0xb064600732a82908427d092d333e607598a6238a59aeb45e1288cb0bac7161cf","0x1fa043cbbc5290844a69b6214e6365131fc875bd31c9ae646b4108b3e3dca21e","0x8c448646209c28d2528156548dfe3506caf9eea136a893f724fc598d054ad877","0x5cfa01b9a733d8746bc28fdd3f8992b7dd3bb6d323fe96a760fbd1b87ca3a2bd","0xdb5ad80047612bad580468d7c2521a02bc637474d1c0e25fb17578bb79939703","0xc906b0b0df36e2042f059120e95e6dd99f11c9ac2ef306a59ba0efa77fd8622d","0xa1d5ab10c4887c0f223dba37bfa478cb34657eb9926355f56e96c010dd66fa37","0x7056050200b237383ccc55b5500523fd942d7288ea1ac6754b5946bbd4092c1b","0x9ede93be0d8fc6a5eb9cf1c7345a85b7519d8487a727aef0c2f00ab966aa7716","0x0cb865ff1951c90111975d77bc75fa8312f25b08bb19b908f6b9c43691ac0caf","0x9cdeaf576de53b7e14d7327d4df162936ab9821eeaac60800d4d689339656449","0x95878b50d7e5b6d414aae538bc3070350ef0e3818d9d58df0ada4b2f94c44efc","0x29637e4e7746790fee278e174f4585f655f8f9eb93ccdfba31b482e7a484285a","0x9b354f30d74ca151470e4c01c97d425c838beac0ab30a0bd396660e4405f8bee","0xab0a8e62f294f05384a4fffa04078cc01f1025192e03b71a5680da71c9be2230","0x65a13d085eb4e4c9aa098b11d4131c68ad6da46dcbe14e9e9516e38e1ccf1239","0x3fbe6099f169b217d3e3f44e5b72b54ed4319f5e6c163e6e3739eb3434dbd572"]},{"address":"0x866673b96a61de00f4d4c2add5d5b009cadb1ca2","storageKeys":[]},{"address":"0x9ffac0b9faf56ee4429955a324f2c2c42562c6df","storageKeys":[]},{"address":"0x0e36660efcbc24deef1cc177125dbcb64bb92eed","storageKeys":[]},{"address":"0x2c169dfe5fbba12957bdd0ba47d9cedbfe260ca7","storageKeys":[]},{"address":"0x50130437a81535dd8f4b0b921756ebddff537523","storageKeys":[]},{"address":"0xd47434828eac1d10d8e2990d804d33719bb9c0ad","storageKeys":[]},{"address":"0xc6bce0ce5c54399a63a052de97726fdd155383ab","storageKeys":[]},{"address":"0xad01c20d5886137e056775af56915de824c8fce5","storageKeys":[]},{"address":"0x5fa60726e62c50af45ff2f6280c468da438a7837","storageKeys":[]},{"address":"0x4d596fd0a6ec54a5b6bd925eb4ec4300804a7f2b","storageKeys":[]},{"address":"0xb258ca5559b11cd702f363796522b04d7722ea56","storageKeys":[]},{"address":"0x91a1131d088c417dafc8daf86e5a6d94b5046095","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000013","0x2c1c59975ea7d6db1a21b876d34111c45ceb513b686f457fd7b296a1bfe98969","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000010","0x1e8ab2bc39629f91bec75f58438e03428fdfa2c77ccea84178d2702e759dee96","0x7eec9b89fdd871efe6b18c48aed7e88905119b980235d25971494319fd661296","0x000000000000000000000000000000000000000000000000000000000000000b","0x17b3522a83128b0b19f3ec5e77a99d0a680d1b9cb90e6a967cdd790f34abbb75","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000f","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000006","0x37fe7dfb087f3441043361330836e17e6c88a95403fe48097536f1334d17d3f0"]},{"address":"0xe648f8fa8c43905ce0c99d8e86dbb899ceec6155","storageKeys":[]},{"address":"0x020c349a0541d76c16f501abc6b2e9c98adae892","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0xbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b","0x00000000000000000000000000000000000000000000000000000000000000b1","0x00000000000000000000000000000000000000000000000000000000000000b2","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xeb2629a2734e272bcc07bda959863f316f4bd4cf","storageKeys":[]},{"address":"0x2ec8b80689bb90e91d317accd16209ed030c9702","storageKeys":[]},{"address":"0x24c0f7fe1d74fcc3887b37c1b13f412980dd8bf7","storageKeys":[]},{"address":"0x1ffc226571b6b65a3f6ad92a6d35a44784148f7c","storageKeys":[]},{"address":"0x8f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d5","storageKeys":[]},{"address":"0xac725cb59d16c81061bdea61041a8a5e73da9ec6","storageKeys":[]},{"address":"0x54006763154c764da4af42a8c3cfc25ea29765d5","storageKeys":[]},{"address":"0x018008bfb33d285247a21d44e50697654f754e63","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xbd720a1d574c88822005a3deafee24862ca656cd78fc54edef6bbc608cd1e504"]},{"address":"0xf186a8d2fbac2986a4b4434b27e3a566571d9e54","storageKeys":[]},{"address":"0x6b175474e89094c44da98b954eedeac495271d0f","storageKeys":["0xadbb9c3cd0a068fc8ee300cb23a3b086d295f9b3d4f39ca85a25c652087d5caa","0x0c851915448d0d1d564ff8d739c8d78544db77078755e108c40f2957369677fa","0x5afcb2d7f74c40ab932919598ddadbf6952afdca5012fb86a647f1216ce93cee","0x87c358b8e65d7446f52ffce25e44c9673d2bf461b3d3e4748afcf1238e9224a3","0xe2e7ca288dc863c29298c3aef4d219378bb19d0d15e5d82b152c94d879bad225","0xeba6babfd085bd10d9852a86bcc16a8a550783bdfef66079382372430eb3fb97"]},{"address":"0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d","storageKeys":["0xdedf458a805de16c5b2e540b0a66d485b3b661367394e6a391c4705743dd2a27","0x39223a37ba6f79f54aa37a26efc12e526af93a444ecbdb4358d8b83204838857"]},{"address":"0x64bc2ca1be492be7185faa2c8835d9b824c8a194","storageKeys":["0xe72fee77a4425f19da01aa1ed94d1bc0416719ec24f317a1b9cbc75ba67617ed","0xadef203cf0dfd46270cba7c75e699624e27ec84903360f8d9b25c41f1bc5cb9b","0xb875d3ef6e04a5e33e79df96674749371267284283f41dbfc1199de69343bffa","0x7f812de78fc087abc17a00df75a2063b417bc316e96755c8f3a46b0861ad8ca6"]},{"address":"0x73ce7912501be775a693fb3a641eca8216b18b13","storageKeys":["0x907470f79d9f202a686aa64ed6d247218b488f43a829a93c7c6253a8bcb829a3","0xa149260fb4390bada5184add5fb0ad06577011d0f9c978986b3a3fbce79e9f15","0x0000000000000000000000000000000000000000000000000000000000000013","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000008","0x20de30300db9b2d46f45ef3798c883c649ebfb03953fa78198d91713f3132be2","0x2abce13ae5905ec45e1c24f0aaf5df458e0c761d1ea0cc077f481c3ede35c93d","0xfa26016169cecf816474dd2676369770603498b9739ae595e9de77e1edffb30b","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000d","0x5c83d9320a9a25da893c14228f60de0a08c6b7bb94e4088eeee36c1b9a31c4a4","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000b"]},{"address":"0xa7fb5ca286fc3fd67525629048a4de3ba24cba2e","storageKeys":[]},{"address":"0x7618c038113503d15029a41857e352f43b4dcc6e","storageKeys":["0xac5b9ff47002b61b2bfa9759eb6316508af74c3c15962d0c65b151a3271fd5f2","0xac5b9ff47002b61b2bfa9759eb6316508af74c3c15962d0c65b151a3271fd5ef","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000004","0x9c04773acff4c5c42718bd0120c72761f458e43068a3961eb935577d1ed4effb","0x0000000000000000000000000000000000000000000000000000000000000008","0xac5b9ff47002b61b2bfa9759eb6316508af74c3c15962d0c65b151a3271fd5f1","0x0000000000000000000000000000000000000000000000000000000000000002","0xac5b9ff47002b61b2bfa9759eb6316508af74c3c15962d0c65b151a3271fd5f0","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xc2aacf6553d20d1e9d78e365aaba8032af9c85b0","storageKeys":["0x9ca7f9d5d99b3f78622a5fcbc389f35675664a34bddb795c2d956d671944a3d2"]},{"address":"0xea51d7853eefb32b6ee06b1c12e6dcca88be0ffe","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000003a","0x3db89e40056e1e415b186b37b7cb88f6ba0da57c1d383403faf92bb06996b6b9","0x09956717b9b4ad98dd3e6fcca072d98d7852a8ebc797aa1939ecb654ac1aeead","0x0000000000000000000000000000000000000000000000000000000000000037","0x000000000000000000000000000000000000000000000000000000000000003d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0xd2c811d48b4cbccf8afe1428fbade11beffb269e","storageKeys":[]},{"address":"0xc73776c7c02e93c45158e2e6f1d4175fba0a9ca1","storageKeys":[]},{"address":"0x89fcb32f29e509cc42d0c8b6f058c993013a843f","storageKeys":["0x6e9e84ae7b8edc848e54262afc59a03baa298e039f2917f989989f0639ac12e4"]},{"address":"0xcc128d5859ca194aa4bd1c86e1d246d97a862bb8","storageKeys":[]},{"address":"0x4ffedb5291b2c51b821602d33fcb26a031a40167","storageKeys":[]},{"address":"0x11950d141ecb863f01007add7d1a342041227b58","storageKeys":["0x16742558cace7b1d6c79bb360b64251a86b813126bd6760df512f01dd4b09913","0xfa103d3a29328a3a71bd12300d54923866ca45d9e0f369507213fe011c69bb3e","0x16742558cace7b1d6c79bb360b64251a86b813126bd6760df512f01dd4b09912","0xfa103d3a29328a3a71bd12300d54923866ca45d9e0f369507213fe011c69bb40","0xf013cfe3da7528933eeea6a7bde8d71d9bbacf1ef58072d4ba8bf335e66b16e3","0x0000000000000000000000000000000000000000000000000000000000000002","0xfa103d3a29328a3a71bd12300d54923866ca45d9e0f369507213fe011c69bb3f","0xf013cfe3da7528933eeea6a7bde8d71d9bbacf1ef58072d4ba8bf335e66b16e4","0xfa103d3a29328a3a71bd12300d54923866ca45d9e0f369507213fe011c69bb41","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x23445c63feef8d85956dc0f19ade87606d0e19a9","storageKeys":["0x4416394b5241247e3fcd23ee214789333b91c7b4dd2cc700085b7280681c580b","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae","0x4e89c89162674e5c406041e4411f253ad16504e57fdfb3d64fea2ef85edd52d1","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6b2","0x0000000000000000000000000000000000000000000000000000000000000066","0x4416394b5241247e3fcd23ee214789333b91c7b4dd2cc700085b7280681c580c","0x0000000000000000000000000000000000000000000000000000000000000067","0xccae37334cfdf21ebdde223db203176e19543f7bdd940a2a2f74aa135491b1c5","0x4e89c89162674e5c406041e4411f253ad16504e57fdfb3d64fea2ef85edd52d0","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6b0","0x000000000000000000000000000000000000000000000000000000000000006a","0xccae37334cfdf21ebdde223db203176e19543f7bdd940a2a2f74aa135491b1c4","0x000000000000000000000000000000000000000000000000000000000000006b","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6af","0xa06110a1557b0fd4823f5530f77fa7087a3aed892e0f4d72b2760f7927015404","0x000000000000000000000000000000000000000000000000000000000000006c","0x9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6b1","0xccae37334cfdf21ebdde223db203176e19543f7bdd940a2a2f74aa135491b1c3"]},{"address":"0x28c6c06298d514db089934071355e5743bf21d60","storageKeys":[]},{"address":"0xea500d073652336a58846ada15c25f2c6d2d241f","storageKeys":[]},{"address":"0x09e050f40b3ccfaa568680bf0e459cf8dfc4157e","storageKeys":[]},{"address":"0xb243f668713f16e5b947ccc1e27e3bb41f827aea","storageKeys":[]},{"address":"0x478238a1c8b862498c74d0647329aef9ea6819ed","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000002b","0xf037ccfdbd298ad20fec53c6d95663e92fa7afae5314df67da8ca5b6c3c92a79","0x9ef04667c5a1bd8192837ceac2ad5f2c41549d4db3406185e8c6aa95ea557bc5"]},{"address":"0x61509721f116767d283db6e6ec91b6d355603acc","storageKeys":[]},{"address":"0xe8cfad4c75a5e1caf939fd80afcf837dde340a69","storageKeys":["0x90ec54b732774e56970e30ca7364dec5c8adfb0dc5fa62f9eedbc3be1ca33dc5","0xe4ad990961dfc6ba5cd00630edd66e178d1358de70d54b4751abea0616cd67dd","0x3af36e30cf872d1e599d667da86551af815cf75143e187d326ed9f414a69ab9c"]},{"address":"0x5f20f761e3295c4000eda5e193d5e8d615a3173b","storageKeys":[]},{"address":"0x2bcb6bc69991802124f04a1114ee487ff3fad197","storageKeys":[]},{"address":"0x4087456720119e9153bff24291f0605cc6449a48","storageKeys":[]},{"address":"0xe38432f7950538a3ba519cdd2537a59beec3ec1c","storageKeys":[]},{"address":"0xc9f56285e0f3f82d1c72980e965178e4acc5a110","storageKeys":[]},{"address":"0xc3649f727bc90d870aff0400c378301104244cc6","storageKeys":["0x0366b3141919ec9f847cfc8c3b10153a8959c006afe327ab0f99d0272003ef13","0x0366b3141919ec9f847cfc8c3b10153a8959c006afe327ab0f99d0272003ef16","0x0366b3141919ec9f847cfc8c3b10153a8959c006afe327ab0f99d0272003ef14"]},{"address":"0x94876a7f83aafde195d795d3a7f7ac198bb32e62","storageKeys":[]},{"address":"0x5a8575695f477f67a79486e86302036d6da93971","storageKeys":[]},{"address":"0x5777d92f208679db4b9778590fa3cab3ac9e2168","storageKeys":["0xa25a49481d75e69e4962ae09926f4d34f733fd60e6d3abe86eec7bb377335f11","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x14da17c968b3d923a1f2e76b04530e1ac26cfbfb","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x6c022040c07534cb01197b8d99b19348fd43bbe7186223003a95f7580b2b36e8","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x3b3d7802cea25e6ed4df6adca42eb76a371f4f77","storageKeys":[]},{"address":"0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d","storageKeys":[]},{"address":"0x43579754589644805ef2bb4696bfe6a5cf7aa809","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x1e7d3bf98d3f8d8ce193236c3e0ec4b00e32daae","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x485a1d296b86e3222a1b1edcf65a2e0cfbcf8798","storageKeys":[]},{"address":"0x44c837a2d8e34c5c91e80329e15d1b897343fddd","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000006","0x199bda88a466ffafbbf12c89681aefbd94bd41f4fa8cb955a2264a0f6b0a8074","0x7d891ef275ba71d621d4389bfe041d651952f136efdb8fc296ad525e76f2d2ac","0x0000000000000000000000000000000000000000000000000000000000000013","0x71d1026c73e06d5eb2e06b6f7f4c177d842876c958e93921d4f8eef3211e0046","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000b","0xef05e748a00c45676ab9b2ca99a2eaba5e83581651a44afd4fdfa16676f064a9"]},{"address":"0x4e59541306910ad6dc1dac0ac9dfb29bd9f15c67","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x9271fa2ac3695970ecc12e42326d417fcd3ad44e","storageKeys":[]},{"address":"0xd4c4044aca68ebbcb81b13cc2699e1bca2d3f458","storageKeys":[]},{"address":"0x5174aef97ef9fc42136e422f2a3ed4f540d958e1","storageKeys":[]},{"address":"0x42476f744292107e34519f9c357927074ea3f75d","storageKeys":["0xb61abca4da329a2f09cd5b8b0bd3534d753ea5ddf61db1d948e9d99db3713ade","0xd5a6446075231c623b8a17512c6b6882aabd18e41769cb78351565c0276e34ce"]},{"address":"0xe62b71cf983019bff55bc83b48601ce8419650cc","storageKeys":["0x9a09f352b299559621084d9b8d2625e8d5a97f382735872dd3bb1bdbdccc3fee","0x000000000000000000000000000000000000000000000000000000000000002b","0xb417ca425cdf18ef466b6484524239695d62ab7948ade92f2a8f02e9827fb186"]},{"address":"0x675bb023e268dcc43f543620577bcacb73047f08","storageKeys":[]},{"address":"0x55db2e620ae1e2037386f05b155a5ddebfc44685","storageKeys":[]},{"address":"0xb1990609d56ea47e169ee15f7ac388b047aba5ce","storageKeys":[]},{"address":"0xa865617d547bb0350728972d170d2d0aaf76f266","storageKeys":[]},{"address":"0x06f7e3cecd6e66ab2fcc527e8a2e908c96e1a31c","storageKeys":["0x010cdf6c883cee6e386711e9f8b6df3e8d1473e8b38135ede508771ff1ca2bfc","0x0fa97f22b5afab5efdd3339d2f95d76289515e8709f47fe8725a2a0151b81996","0x3b73a3201dab0aa19b4496259a12034c5442d2c23e12e6741beacb3f7bc6ef36","0x0074611b853f5980602fc302f856646f8e50e01366960d67ecabd16602e2b4c7"]},{"address":"0x388abf256ab77283427715ab0ac38848045a2f4a","storageKeys":[]},{"address":"0xcd6926193308d3b371fdd6a6219067e550000000","storageKeys":["0x9c87686a668c5f51d082f0bae504a5966d7f2b3907814d39e59d2fba39d1c51d","0x623348d3e9f0d9c8141e9f58b5e6fb84556de2286c85d278e5e26ce61c1f77ed"]},{"address":"0x0330e9b4d0325ccff515e81dfbc7754f2a02ac57","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xec2876abe8e819efced11ca1d9a1cd0e68e45e7d","storageKeys":[]},{"address":"0x1a7be22c581f6eaade9b6485ab410d046340f06a","storageKeys":[]},{"address":"0xdef1c0ded9bec7f1a1670819833240f027b25eff","storageKeys":["0x1454083160665801f09e29ab8f69468d8b8efd1ebbd910c5a96df81a9aa0224b","0x0000000000000000000000000000000500000000000000000000000000000000","0x0000000000000000000000000000000500000000000000000000000000000001","0x6eb3ac9d43904a0e4acb5bcd025c19635371b33c22b4909c404a8a1199c400f7","0x208e47d79385cc4d8e489ce7785fff836a18db7544419d7c48e31937a7a1a764"]},{"address":"0x608669d4914eec1e20408bc4c9efff27bb8cbde5","storageKeys":[]},{"address":"0x9dbe6c723ebb04c0c281d9a180914b0e0ae50a53","storageKeys":[]},{"address":"0xaa5d314a300205077e0f6c0acb06c97f5e92b0ba","storageKeys":[]},{"address":"0x0072d180797ff4ce05b1d12310d44ecf26c8576d","storageKeys":[]},{"address":"0x42262e64754471c2c187ed2f3121779135471060","storageKeys":[]},{"address":"0x000000000022d473030f116ddee9f6b43ac78ba3","storageKeys":["0x21b8750ff7ba5e35e009f0a6189c8abb42b96c3f251eaec54f29cb7e1e13a902","0x683d2dd59b56d0dcd6bb0c0d40a573f1d88752f137df6fc38e8b509e02d2842d","0x30e773a804f78e09b6e4d23fe878f370d1d504a3b5d3d1ad17fde1e1f8626ff8","0xcea01b63144489fb063739dcc5efc143757b96dcb3e24807fa7c817b6d947df1","0x73f2d1dde50d6c22179f0dc65a703c2ab7ced45d4a12639a1cd042cb0bfb09f9","0x005880a09c8062c51ba8647c33b328579ffb8c322475d3a293f6fae45e0b6e83","0x2c91be1c0bc155a16a0a7b5e13b7f85f216de1e44be9e8b5322550bc011921b1"]},{"address":"0xa57ed6e54be8125bbe45d6ca330e45ebb71ef11e","storageKeys":["0xc04a3948974e3730e404b7f715a6d31aff10e926bc4638ffeee602ed18b6b263","0x6752128797385aafbe66e63ebeffa5094edd171f5cb7b8918726e8ec310249a6","0x125b7ae58aa0bf4dc21733b335aaf75da9bd35d2f771d995516a4243b4066d37","0x000000000000000000000000000000000000000000000000000000000000000b","0x0d5cc3aff4d0a83b588733fd9be2ddd3429e53221dc5a98f45ae71cbe8e385d7","0x0000000000000000000000000000000000000000000000000000000000000011","0x000000000000000000000000000000000000000000000000000000000000000c","0x6649ac883963210e0facefe2e6d16028e2bbfa635a27126e36e2b0a102dfd834","0x09d191b225001833d11f105578f83497315735a544362c7c4a515b52378e2df0","0xf49f3538ba91e890adec3883c84ff2f51d8a52ab4bd1fd6615fc3eebb8180242","0x3419c66aa2130bb555124b3db1f82bb83f0f36baf4813af32e00e31d45a8ff3b","0x000000000000000000000000000000000000000000000000000000000000000d","0x2c0a33ea1f416505bfd0b0a93da839edf88c332758623bd7849235c778629cb7","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x99a704ee425c2602cc1d421a20bb4662c69bf247","storageKeys":[]},{"address":"0xc42b14e49744538e3c239f8ae48a1eaaf35e68a0","storageKeys":["0x3c427a4a63a49986e20e76949218b899074fc42c03b48c8cd5adf39c735b4240","0xfe155a864090e2117df37367eed95f7fd34d60b0dc2c41fcadfca8f72c419b78","0xcf8ad21fc3128768e335509e4698e53f5bc5447c3ee3324662ba18b05c1b6228","0x9671a9c5acfdcb756146b4e9a24bf92788c839042bdf4ef1bec2b51989ed21f9","0xcdf0eceeb0f33a1e97a3ca4ae7c0e220a7b876702c8034e978bcc5f01be78dbc","0xaa6ecc73df4aa0d0157af61fa21e157467d27c80988aaa33b0c5e9b31ddfa0d9","0xd7eadc1d8700e75a22b647097f65ceccff638041e36bf557511dfb5a619a6c21","0xc3b53e42a298e9806b991885c3dacbd67d7dce5ae62ca1267249e3f9461893ef","0x0000000000000000000000000000000000000000000000000000000000000003","0xf427fe12801d5d4271089517ff27d6f7cfde654843b2c3fbd900ddab2f8513c6","0x6be8df344dc91266a7291f091eb8876d86ab32b5b6f852d8148ede89e05b82e9","0x18aa7c12be72d83d9fe040d8fab9d2754b873db2d49cf12b9b02a7fe5205991d","0x385a57cdd748a252225035f3dd1f3627c9cf5575b6943b0afe31ead98163eb3c","0x9a517c135ff08a94ce5c94b8e060bc093a1ce8061a6916390d4b0a6a818ea081","0xf07abe5f09279da8b07df7b6609eb30919809611f20966e8dd1efc2253b308a2"]},{"address":"0x9b16c4bbd2d504786f90f487f0ec721ca3c02956","storageKeys":[]},{"address":"0x56eddb7aa87536c09ccc2793473599fd21a8b17f","storageKeys":[]},{"address":"0x77696bb39917c91a0c3908d577d5e322095425ca","storageKeys":[]},{"address":"0xc3b0a38d5667388b04c32edb1e855bd00403edcf","storageKeys":[]},{"address":"0x8484ef722627bf18ca5ae6bcf031c23e6e922b30","storageKeys":["0xe93bb5d2d36fbcc9c72a80aac571548ddf92ea26bb641c7959f215ff2f697b8c","0xbaab7dbf64751104133af04abc7d9979f0fda3b059a322a8333f533d3f32bf7f"]},{"address":"0x3e2e4a4d94c47163c5887308213bad6c1abf5d17","storageKeys":[]},{"address":"0x946de0c2fa8228d4e89f8f6e563039b8936b1528","storageKeys":[]},{"address":"0x0ed882f8bde5a8d1f3702fa239ac145db117492e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x808b4da0be6c9512e948521452227efc619bea52","storageKeys":[]},{"address":"0xd74a355a52fd198abde16745c93f33dd3889e05d","storageKeys":[]},{"address":"0x682831244b0e97946abc52cb1893cce398de3a35","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xd533a949740bb3306d119cc777fa900ba034cd52","storageKeys":["0x7f2bde1cdb65a8e033ce966e094953cb700fa5ca5db1de078fd13672baf01198","0x5f7e60196d1183c3afa6526b495cd8b0b9391531951e59d8b2d173412ca8feb5"]},{"address":"0x8472a9a7632b173c8cf3a86d3afec50c35548e76","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x6c6ee5e31d828de241282b9606c8e98ea48526e2","storageKeys":["0xc2222bc987df70edff05113eb5b48b1ed151e42456cca3de5854028e97d554e2","0x0000000000000000000000000000000000000000000000000000000000000004","0xc72bbb4da6bb5f43c1674abfda8f8c6258b19f262fa4d259ea35d527f521296b"]},{"address":"0x1066cecc8880948fe55e427e94f1ff221d626591","storageKeys":[]},{"address":"0x32400084c286cf3e17e7b677ea9583e60a000324","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000022","0x0000000000000000000000000000000000000000000000000000000000000018","0x0000000000000000000000000000000000000000000000000000000000000019","0xc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e","0x176118e676368a26c80288857d4dcc2c62f55fc0181fcbb27b91ccede4f47451","0x6fb3d3a4b7a080386d76960b33031183abb6bff4bcc494380515ed3041fa1edf","0x0000000000000000000000000000000000000000000000000000000000000017","0xe164dcb2652941f0fe4453bc5418a8e925fc89516c388105ece008a50a881f48","0x8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4","0x000000000000000000000000000000000000000000000000000000000000000d","0x1503bbb25b147dfa24009fc2786c8493bc31c19ed3d336917da9afc817c5cdd5"]},{"address":"0x51ba880f37ea1fcdcc63c5b479c72f8b8f3b4e91","storageKeys":[]},{"address":"0x01a656024de4b89e2d0198bf4d468e8fd2358b17","storageKeys":[]},{"address":"0x4dece678ceceb27446b35c672dc7d61f30bad69e","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000001a","0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000019"]},{"address":"0x7e94197bd57f57497f26521f899c1b7e6d4eb706","storageKeys":[]},{"address":"0x1a1fdf27c5e6784d1cebf256a8a5cc0877e73af0","storageKeys":[]},{"address":"0x4585fe77225b41b697c938b018e2ac67ac5a20c0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000105","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000104","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x9f85c60ad79ea4337e6857f5e71ef0310bd7ffbdceba9ca937894a812d6dc2ae","0x9f85c60ad79ea4337e6857f5e71ef0310bd7ffbdceba9ca937894a812d6dc2ac","0x0000000000000000000000000000000000000000000000000000000000000004","0x9f85c60ad79ea4337e6857f5e71ef0310bd7ffbdceba9ca937894a812d6dc2ad","0xa00e9f45e9f0c328446d13a90db1b8ff531c4946ba6a4294a1ec03159cc44b19","0x9f85c60ad79ea4337e6857f5e71ef0310bd7ffbdceba9ca937894a812d6dc2af"]},{"address":"0x423f4e6138e475d85cf7ea071ac92097ed631eea","storageKeys":["0x0fd4f3d08cdce41693a053d24208ca680e29348fd4d58da076e4800b188bde1e"]},{"address":"0xc9332fdcb1c491dcc683bae86fe3cb70360738bc","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0xb230807886ce02c13dff86b1a9232aff10fee960b2f5f74e72f20f48146b97a9","0x00000000000000000000000000000000000000000000000000000000000186a5","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x9eb45d631f0f7d038d2e121aa3c6bf8679a5b730","storageKeys":[]},{"address":"0x8b6a6f5b828f086a2a9d8a3150b958e79e91a82f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000002","0x8a9a513b9791a18d5272680de0b8170980d584db74d5cc608d89e97f4ae4c892","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x5c55cd67a6bd0d4c315b50cb6cd589bfb080017e","storageKeys":[]},{"address":"0x0802dd2edd3f9fad39a9173b4595be819f201d61","storageKeys":[]},{"address":"0x0a62276bfbf1ad8443f37da8630d407408085c8b","storageKeys":[]},{"address":"0x2e02cf930374dfe0fca6ab2e0ae9af498f0eeb5f","storageKeys":[]},{"address":"0xe34b4c8ccf742f12978783ce7d96ab8537de5f2d","storageKeys":[]},{"address":"0x4734b1d4b2df58329da586b2841f47e6a29cadc3","storageKeys":[]},{"address":"0x923594510fabd628d6c4a98c0321aad054a16266","storageKeys":[]},{"address":"0x6db0fb5a6f92f601aea9b7590ba559db9ab1402c","storageKeys":[]},{"address":"0x37d26dc2890b35924b40574bac10552794771997","storageKeys":[]},{"address":"0xa5c1658e253dc961b1534f92146d20293aba258b","storageKeys":[]},{"address":"0xae2fc483527b8ef99eb5d9b44875f005ba1fae13","storageKeys":[]},{"address":"0xb2ecfe4e4d61f8790bbb9de2d1259b9e2410cea5","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x000000000000000000000000000000000000000000000000000000000000012f","0x3dc40693fb3bf64b979c0e0b720cba651945e1a1c67007f82f8a170b92d7faf8","0x000000000000000000000000000000000000000000000000000000000000015f","0xd51a84850e3476406216f99da9a384d1d5ff57a85fd08323bac31bce860037fe","0xe969193d067dc13826550fda46e8f1bb43dd5c923af5eab55b6c7c2080f0a212"]},{"address":"0xc4ad29ba4b3c580e6d59105fff484999997675ff","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x4e3b31eb0e5cb73641ee1e65e7dcefe520ba3ef2","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x998b3b82bc9dba173990be7afb772788b5acb8bd","storageKeys":["0x623348d3e9f0d9c8141e9f58b5e6fb84556de2286c85d278e5e26ce61c1f77ed","0x9c87686a668c5f51d082f0bae504a5966d7f2b3907814d39e59d2fba39d1c51d"]},{"address":"0xaebdb173ecf4776968701f6b5b5781afe7baebc1","storageKeys":[]},{"address":"0x78f1038e973139a7c0d59a87a4dda0f560178f04","storageKeys":[]},{"address":"0x54586be62e3c3580375ae3723c145253060ca0c2","storageKeys":["0x2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a4","0x5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e541"]},{"address":"0xae7ab96520de3a18e5e111b5eaab095312d7fe84","storageKeys":["0xd47b44da93a490eb8655dcfdfc921b4e0850ad0ced545e96f3a9a2ea83230d58","0xae68078d7ee25b2b7bcb7d4b9fe9acf61f251fe08ff637df07889375d8385158","0xd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b","0xa66d35f054e68143c18f32c990ed5cb972bb68a68f500cd2dd3a16bbf3686483","0x9f70001d82b6ef54e9d3725b46581c3eb9ee3aa02b941b6aa54d678a9ca35b10","0xf37caed32e4e49c83636e0f1684f3f4a9a23c463a49eb17cd63abd50680b378b","0x30021dae10ba10b52bdb78afc498c2708b8205e3839e5c24c996e740e3a7bf15","0xed310af23f61f96daefbcd140b306c0bdbf8c178398299741687b90e794772b0","0x644132c4ddd5bb6f0655d5fe2870dcec7870e6be4758890f366b83441f9fdece","0x4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b","0xe3b4b636e601189b5f4c6742edf2538ac12bb61ed03e6da26949d69838fa447e","0xe6e35175eb53fc006520a2a9c3e9711a7c00de6ff2c32dd31df8c5a24cac1b5c"]},{"address":"0x11b2bfd17b942692f3c7f62908ae54f11555f39f","storageKeys":[]},{"address":"0x9af3049dd15616fd627a35563b5282bea5c32e20","storageKeys":[]},{"address":"0xc4472dcd0e42ffccc1dbb0b9b3855688c22f3a0f","storageKeys":["0x3bc477b501297444a13de6be90e5efdc4311e0fe3992dfebfca497de46917594","0x26cc79b59eb916f0c0e1379ab76ff28890cc061e499fcb0ff6be9a47765c07ac","0x26cc79b59eb916f0c0e1379ab76ff28890cc061e499fcb0ff6be9a47765c07ae","0x0000000000000000000000000000000000000000000000000000000000000000","0xb37cf3fec266c41396dbc03b8e81e4fd635f44273e51228d035c88ae62ff8081","0x0000000000000000000000000000000000000000000000000000000000000004","0xb37cf3fec266c41396dbc03b8e81e4fd635f44273e51228d035c88ae62ff807f","0xb37cf3fec266c41396dbc03b8e81e4fd635f44273e51228d035c88ae62ff8082","0x0000000000000000000000000000000000000000000000000000000000000008","0x26cc79b59eb916f0c0e1379ab76ff28890cc061e499fcb0ff6be9a47765c07ad","0x3bc477b501297444a13de6be90e5efdc4311e0fe3992dfebfca497de46917592","0x3bc477b501297444a13de6be90e5efdc4311e0fe3992dfebfca497de46917593","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0xb37cf3fec266c41396dbc03b8e81e4fd635f44273e51228d035c88ae62ff8080"]},{"address":"0x274166dc60b0e986762d0c875aa932800cc0d6d4","storageKeys":[]},{"address":"0x0e0c77d078746f4b21bcc439905468d782bbaa00","storageKeys":[]},{"address":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x041fb92791af656a5970d946eab0726fa7cc29ad5366ae52491c17c2fe5efcb1","0xdc276a4f120117ad5ae6415d1c724b4f3a0e81f0ee6466e1392ca121b63123f2","0x81d16f8ff08124c3470152778cead9041e7af2087107c2534feae46c33f982db","0x99713ceb4322a7b2d063a2b1e90a212070b8c507ea9c7afebed78f66997ae15e"]},{"address":"0xd48e9da6184dc7962831af5ec45652a52fdd6238","storageKeys":[]},{"address":"0xaa346781ddd7009caa644a4980f044c50cd2ae22","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x61131513c4ff67bcd3318eb309834d26a3509cdb","storageKeys":[]},{"address":"0x600e571106c31c4ca1bf4177ba808e37146a4a0c","storageKeys":["0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3320","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3310","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec331c","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3312","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3315","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887933","0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887935","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3319","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887931","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3321","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887938","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3322","0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60c","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887936","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3313","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec331f","0x0000000000000000000000000000000000000000000000000000000000000000","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3327","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887932","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3325","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3314","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887939","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887930","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec331b","0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60d","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3317","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3316","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3311","0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60e","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3323","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887934","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3318","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3324","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec331d","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3326","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec331a","0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60f","0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887937","0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec331e"]},{"address":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","storageKeys":["0xcaaba83cc62bd9ff81815c7a16cab84590626e7a47e34ac274b560466ea44630","0xb68026b3771e024912c1e4acca593a53674101f7caf8fafd1bab5a15a52dc232","0xdf536271c8facb2f3c054c527419d2a5c603c9688aae4498c41aaf961424f570","0x4486c7f79c0aad6c1f058b6134bcad78c20c7c5a8151a221d9cfaafb51bd2fe2","0x12dd898f4a480c545f9838e2a0c101409e865c40558462403a8273c3ca3e2337","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0xc937356fbb1d41a475e0aeb9c72b3680e850136654e0c6ab468bc8188a0b9606","0x0000000000000000000000000000000000000000000000000000000000000001","0x847c183da4f844a0bfdc97f2aff2bf6dfbc2af5fc522c2b18f95beea12dd536f","0x04d59ee12128a927af41a0d3e5152640548876e14c53a263d4754be4d7210471","0xfa8d90c31aa9d60d8a5563d6b06b294f8851151f431a19253e3852de6275e289","0x81070766827ee1a801eddcaa410aee18dab165db9ab9a203311a68f37acf073c","0x058626be24917c1ae4ed5eab3b04ff1e21a4399f4fa3e36a0942903d4465e60b","0xe7b8b9060b669548aac5c6f3f9f3506a8850a20ea630a4605051a9e68e2ed130","0x15d7a43c3a595454a812f5c7659d47d83de319cbb3b9462a445aea0204d7875b","0xce1bb5cc7ecd7fe34c2af84799e4fdf88c73ead956372fcb4aecae7766edecd5","0x688c3e002289fcdae99fec728919f8c58bf4a63597b51cc1c50519b02f2fbcb4","0x75245230289a9f0bf73a6c59aef6651b98b3833a62a3c0bd9ab6b0dec8ed4d8f","0x4dd1725f464fafcddf286deb01aabcbb4bf8a538bad59c775b5dcdb2fbc3c71a","0x1f21a62c4538bacf2aabeca410f0fe63151869f172e03c0e00357ba26a341eff","0xe2227cf0b5be4d7ba7a42923d3c43d60d4214f9c2f94c2cf3db4cab9b6a0bdbb","0xc6a9e6d75b82e15a84b7d06f92df3ad6028a819a927a8d1e3078f5a42ee8d524","0x78e84b04d971cb85a2ef0e6b2d9d480a6f1273ff7166df2a654d16e0bb74cc58","0x39a528031c821151a0357442b7ae7ecce02aeec01c8255f8ccdd708707e959c9","0xf56408d23e6790fec5453738cf042a4a3ef7ec36e9ceae8978e4ffce8e903bc3","0x466bb9565f5eeaf15aec7c92d238ad2dc4c1b89ca928b5443573880d7ebbd9b0","0x3ef898e1ffb441054c38414096beda26581a06c779a402e6040022b096f4fc6c","0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0x2272303eba5d14e16687cdf8936028c295e364a52d2f6814680f3354d926150e","0xbd6efac75ea691a8847324c8512167f1fbfe3a2458d602bd686eea1f0819de1b","0x4b50a38a45993764c519945acea2535b1ba5f00812efc53cb43fe562c1dc7107"]},{"address":"0xef9080ae61c13c8d389b1811b5708fb363f39be1","storageKeys":[]},{"address":"0x472bea8fd83129bd9b2e32f8201512f88f1f21bf","storageKeys":[]},{"address":"0xa68bea62dc4034a689aa0f58a76681433caca663","storageKeys":["0xadbb9c3cd0a068fc8ee300cb23a3b086d295f9b3d4f39ca85a25c652087d5caa","0x8d629cb47d08e89353adb6c7692b952b309de6af172d6a1081aad5fa72045c48"]},{"address":"0x6982508145454ce325ddbe47a25d4ec3d2311933","storageKeys":["0xd330d89cdd04aee2394d3770fdb76e861e5bf5af7f5638ebd8b9cb9dfa87520f","0x0b18a50b508350f7c2dd395b6e624b1eb63ca8b44ac906ea700bf0743c2aad59","0xe1c0912e91a5242b53d3ec84a50cea475aa4838e554926f0d80e131b2d4e66d8","0xe06c150dfd387bcf51281bce2e9176020f88348eadd61d52424b62c7c2e15359","0x0000000000000000000000000000000000000000000000000000000000000006","0xfd57e0da32991ba05427d33d4f637692387021e6a2ffa013302b53cb2e15044f","0x3f57e8e1e500a3ae77354023fe56204709951df36588147aee0845b3dbdf3c09","0xba43b84b17deebeec7f36d05cea2b2641fd23600f9e29f5940ca5a63978b912d","0xae88df6b5fa728af2ae3c86d087e9bdb6ab6fca866f63fe440852c59cf374fcc","0x95d0da21c4501374e2f53d5090272b7a894a261253fa77c4c59f468c72a33ec7","0xd02b0262d1979ce21f4bea6afb4e0771cbd81fb75d927ca17ffe87ca51822f17","0x0000000000000000000000000000000000000000000000000000000000000009","0x66cd5a530f6760ec4ab86e37df2e081462224955ed23f314f2ea54d9197d3238","0x26a610a1f44e9b5b336a8ee2ee23a5ff2ebe7014485c90bfd610f4f8be8d5952","0x55c7a092dcbb23ec5ee8345bfbc0f3d2a6e0b77bcc033d7e7fbcb812247c7eb8","0x351ef4c4037a1efa8274951f7413e5d1b195997bc5442d3302ec3ecbc682571a"]},{"address":"0x8591b92e15509b76f648e2e02e8fb90adeb33426","storageKeys":[]},{"address":"0xf939e0a03fb07f59a73314e73794be0e57ac1b4e","storageKeys":["0xdec782ec88c59a2245772c53d224473f33d69bc070424c0b14b7f8d7fd32f0c1","0xb8d6bf99893469d3544b0c0028aa3d1e6ba3b32bd46bdb8e1e52d9e2180a9cd4","0x781fe1d320cbbd5f46653f6403c1ba5b5e8effa981c76c26ce9aeb2134ae2c58","0xff181e1584a8591cb971beeb8c8a540b2075ef4cd5acc0c776d34cfd1cab60c7","0x00f7402e36c78dd81fd7bf5d0580d623b82a16ea76725677fbf90b48d8344c40","0x6d925efa75b69ac59beafda134d71b007ef78673369e7bc1241107d491d6b5aa","0xded44791a5c1c00441a7d239df442ed1560abb2cc07bee1f0d0b059a8efe12a3","0x00ecec87d9fd8df8102d8313ee75963fa58ef81f01334cb9ee425c38d0779892"]},{"address":"0x4150b9603bd87ae5c1aecdf4aa348699af1754da","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x8315177ab297ba92a06054ce80a67ed4dbd7ed3a","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xb432a7c60026701625d6c1d74bc2ab936dff834a53d1b48899b5f6943831142f","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x15c5620dffac7c7366eed66c20ad222ddbb1ed57","storageKeys":[]},{"address":"0x1c09a10047fcc944efde9226e259eddfde2c1cf0","storageKeys":[]},{"address":"0x07415a26a0126a125ab5b0281687a69ffb209f65","storageKeys":[]},{"address":"0x7a63d17f5a59bca04b6702f461b1f1a1c59b100b","storageKeys":["0x15e86e12d2596e308755eab3ada247f38048851b6387ce103d08698145fcd3e5","0xa233f043162753cfa530f6666695a7becfc911a6e3f39c2a47f206ed0626f48d","0x8c730d17c644e53b5b561bb5a08693151304e80d91119d6854eca6bf2ba988f2","0x360035e73dcd2a32d51c3cf58cc3b68399fb3157fbb4392c2097c25720e09978","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xdef2b454ad921914073d8b7891ac1601e16c3b7818c18e25c9ba3a298d5df03c"]},{"address":"0x1fc40cedcb47f341b37968a635314756d4c04f36","storageKeys":[]},{"address":"0xf02f75e9f83fc3b9b341cb015c1eb97e2504ce0c","storageKeys":[]},{"address":"0x0c1914085cc5bb4491a88e1e38e939b42613eee2","storageKeys":[]},{"address":"0xec0820efafc41d8943ee8de495fc9ba8495b15cf","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0xe9f77af0133225c9908ca5aef2424c49682d89c4","storageKeys":[]},{"address":"0xcf8d0c70c850859266f5c338b38f9d663181c314","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x3db89e40056e1e415b186b37b7cb88f6ba0da57c1d383403faf92bb06996b6b9","0x0000000000000000000000000000000000000000000000000000000000000037","0x000000000000000000000000000000000000000000000000000000000000003a","0x000000000000000000000000000000000000000000000000000000000000003d"]},{"address":"0xa69babef1ca67a37ffaf7a485dfff3382056e78c","storageKeys":[]},{"address":"0x66d64cbdead11caae8db4a1ce9077831539f54fb","storageKeys":[]},{"address":"0x413adac9e2ef8683adf5ddaece8f19613d60d1bb","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000003a","0x3db89e40056e1e415b186b37b7cb88f6ba0da57c1d383403faf92bb06996b6b9","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x000000000000000000000000000000000000000000000000000000000000003f"]},{"address":"0xf9bd9da2427a50908c4c6d1599d8e62837c2bcb0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x056fd409e1d7a124bd7017459dfea2f387b6d5cd","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x320975846a116b11411a5cfde94c56d7713040529fd53bc4095fb1022e45da01","0x0000000000000000000000000000000000000000000000000000000000000197","0x0000000000000000000000000000000000000000000000000000000000000198","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x2d6e2772859658c991e973e7c02078baa981006f","storageKeys":[]},{"address":"0x3db52ce065f728011ac6732222270b3f2360d919","storageKeys":["0x174e21b9719efe2a95a8591c9cd088a846e65aaf20e9332cfc04e0debe4a9d32","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x0d8f79ee7e5463d5423f5d70b4921faf17a23da2","storageKeys":[]},{"address":"0x1f6e1928dc0204bc3e60776b1918ce71c17f8bb3","storageKeys":[]},{"address":"0x76e40d0a69fd81826b5eb7d18145626d46eafdef","storageKeys":[]},{"address":"0xfa3e941d1f6b7b10ed84a0c211bfa8aee907965e","storageKeys":["0x16d1086c95473ebfc9232806c39a89701297a6443f9c19234e86fe346ab0c7b9","0xd1a0e794e776c50e996d25cabdc52a871c9031fedd73f3ddcd480c3b851245d4","0x7cba5942e9a7224c33185a6c4392efb74cf00521cbc9f2eff332116abf3a8733"]},{"address":"0x2b33cf282f867a7ff693a66e11b0fcc5552e4425","storageKeys":[]},{"address":"0xfa103c21ea2df71dfb92b0652f8b1d795e51cdef","storageKeys":[]},{"address":"0x39807fc9a64a376b99b1cebde2e79e3826d39aa1","storageKeys":[]},{"address":"0xaa222c7683c331b56d10b143739ebf017f46d45b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0xa60efe89e07cfcf83eb30f3b063834f0f8b30466","storageKeys":[]},{"address":"0xfe44c3ffc6bb69276573f568db0f499c97766cf2","storageKeys":[]},{"address":"0xf42a7c44a05b22e40d2a825c54560a14541d29cc","storageKeys":[]},{"address":"0x26352d20e6a05e04a1ecc75d4a43ae9989272621","storageKeys":[]},{"address":"0x737e8a8b5f36a388638285d558f80af7fbcecb8a","storageKeys":["0x59512ef7bf6383aaf77afa296322c739f398411e51b5a6aa00f39cb95420945d","0x329c3b59d0d3f4686e6bcf912c0417a56fb228dfef22ecf2d26400589da43bb3","0x1657cc45726892ac28247fa3d0a2698d0c94db01234ce4938755778fb52add2d","0x48dd75081681b92f9a19c433ca1b9f0d3d78280b9a4c275b2c37559f8fca1cb2","0x5ac6d4be4e02314ce9abcf7ab6a6d1e10a52c7b923194d53cb1e5c6c8a1a3826","0x0000000000000000000000000000000000000000000000000000000000000007","0x33545559ffe181d39376856b0f63408a48ae6c9c60919c262ba4a077b6f8bfe8","0xd674e972d47db11c3f413961e04bb3fa16bb2bdef6208a5b88e04e8f03c918bc","0x9377119c31d8f70e1ddc3e7047a14937a33a14f78ba70a64645b706e0aa57ec0","0x8962cc3b6af7d5d5edcd7e5e1b9c92d160f40012ed1fda69477c3187f09b09ee"]},{"address":"0x46340b20830761efd32832a74d7169b29feb9758","storageKeys":[]},{"address":"0x0e747eb2ff0f26fb77c3a1ea67ee07fac2dbb783","storageKeys":[]},{"address":"0xb2bc06a4efb20fc6553a69dbfa49b7be938034a7","storageKeys":[]},{"address":"0xbd5192295573b671ac57b2664eca20ccc0378a7e","storageKeys":[]},{"address":"0x80d186b4c786ea66592b2c52e2004ab10cfe4cf3","storageKeys":["0x9573fdc8c4a2cb4d4345ff61efaebf12d577f3a318fd20eacb349531a445a554","0x74a88c9c5ffaa82feba8db664e528c59e1e4ad0b4397eb2d89c8e7a212a0bb9b","0x0000000000000000000000000000000000000000000000000000000000000012","0x42dce39ec04f57ed60f02843779129643ab682b0204ffc3a6471867799e63c5f","0x0000000000000000000000000000000000000000000000000000000000000013","0x000000000000000000000000000000000000000000000000000000000000000f","0xfd5d9b18a682da87cccfced5527b1ca04cf30dc6c79083f8934180d7d8defecb","0x270b001ad820d62e46b79b15dffee6c2d905fd159fb410487015de63c0a8feb4","0x61eb5e420b83e80f7d464335f782bfa549b5c45609cb61e444421828c245c38c","0x0694dfb4b922264bf12cd96418586faabb545f435aa293afa1923c343964e9f2","0xafd025e5e01313368dd335e098d54e7960bbcc3ab9fba75b374b7799263021ab","0x280daa694da4d7b24134f87bd0d7e4214505fd41d25dbed0337137b3369d0044","0x1f8b8f849553c8c8ee2caa11860d4bcce792cd4899bce7e1309b2ccdb58e9473","0xe823ad0e0d8dda09b2a5836e15f2a2d9ddbf54cbd64696ca905bc42253ba5ab5","0xc40ba3a21f44e6e3f3d4189984b86510daa57e52aacf2a9f99eb45d87f4f27a9","0x0000000000000000000000000000000000000000000000000000000000000016","0x0000000000000000000000000000000000000000000000000000000000000017","0x5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c8","0xa49372c33738f1b53d645b1b12b4cdcbd791e5c6fdf2cc73fa0b12509c392780","0x4c4c614cbfa6187f701b723ac4483394eec40ff34179590c7aa9b879fe1c1ae9","0xe8efe49256c119acf13d5b7c3f126a0433eb19af846af045d9296bba48334731","0x9c07f3e67a824e6969fbab25447584870853c12cbd49016ae7c0b6a79547d3d6","0xed1cb6f015cff44bb715748f1b8e2deb20268e55db2d16915b0c6e1110534e08","0x9e743285127cb4a4e308e073036d1ccad624c8f2653ea77772e8e0db051c073d","0x8363f836c1d9bd3d7c6643b363ac7b0b29fa3b71e942d23c9aceb947a97e9a77","0x007f987b985acdd76ed5b1532843ee8487912d16fd32705a1e5a701bd5ca812f","0x3a41ad6953a5fa251a88b98716b66fc76dcf0da7ce4633c827e5abee790bd68d","0x970ba10efc2a446c87ed7eb23f936e990bfe1d384658504f675d1f800814955b","0x3a7cc0c577bce006a540658c44827493ca5d34ee1efd0aebcfe7b1c08bf4f967"]},{"address":"0x63bde7cb131b020e817d4e11e046ce3916fa53d8","storageKeys":[]},{"address":"0x2568e74ac4fbb5937193f64a8e747b8372b8d1e6","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x00000000000000adc04c56bf30ac9d3c0aaf14dc","storageKeys":["0x74671cc1ee4b35fc41a033cacbf339e2c7562ec1b6abffa96373accf9fb8471e","0x0000000000000000000000000000000000000000000000000000000000000000","0xf8d166207ce77d642e0739b10f854f68f56b3ab4359ab18829f1fe7dcf6641f9","0xfd519a35e08432670ff6a6ea95665b501a6834b98f5cb3f040ce380d22738e70","0x8a541198eeb70efa626cd99c41fc2f943429c59e86a10533b7c1b711821b51a7"]},{"address":"0x102633152313c81cd80419b6ecf66d14ad68949a","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000003f","0x000000000000000000000000000000000000000000000000000000000000003a","0x3db89e40056e1e415b186b37b7cb88f6ba0da57c1d383403faf92bb06996b6b9","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x44affdf87abfb1dba08e444141bd21b4380fa35f","storageKeys":[]},{"address":"0xca68a3d663483515a9d434e854ab59a41b3a523c","storageKeys":["0xd027d05cd8d91cd8ee694a5d839324f059c2a6452b85bb3ef588f068c493c615"]},{"address":"0x6ca298d2983ab03aa1da7679389d955a4efee15c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000010008","0x0000000000000000000000000000000000000000000000000000000000000003","0x970e8a6741a29f8dde5ff466d2df4abffe69b4b85ea62fd79efb6c9076103ff2","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x0420de7b94c386c5cee391a89f559abed77253bb","storageKeys":[]},{"address":"0xe0438eb3703bf871e31ce639bd351109c88666ea","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x5a03e9355cdb5f74897fc6f91b0de01868791964","storageKeys":[]},{"address":"0x3b6ca6e7cc07605c0496b46111b08418e8bd1204","storageKeys":[]},{"address":"0x000000e7ec00e7b300774b00001314b8610022b8","storageKeys":["0x8a544f7a90e767d9bea3a08f370e08d816168745881d640911c6f3d377888215"]},{"address":"0xa920de414ea4ab66b97da1bfe9e6eca7d4219635","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x39c498c0e9c30bdc071c17ba4772ebf5e565faac","storageKeys":[]},{"address":"0x0000000000a39bb272e79075ade125fd351887ac","storageKeys":["0xeac93c10be001eee2832d264e358c531c2268ce19a40c2aa709797d6715b526c","0xdf8644dba8dbd7a9b693e2d16f0483dc5920dd49c1c9b2775bc20dc85ced5138","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x407d2b4bccc660083b3d31fc565cc3a536d43a3e70a4b0243158cf620fcfda25","0x859245a13018ac5a93a01e110bf65ca1abaee6f8ad471faac9be4824c9577049"]},{"address":"0x264bd8291fae1d75db2c5f573b07faa6715997b5","storageKeys":[]},{"address":"0x8362b4bf25054423c31874307d8e65e63012e40f","storageKeys":[]},{"address":"0xd9db270c1b5e3bd161e8c8503c55ceabee709552","storageKeys":[]},{"address":"0x216b4b4ba9f3e719726886d34a177484278bfcae","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xbc1ea504fc54d078514efcca1f6860b5219b6bc3","storageKeys":[]},{"address":"0xc77ad0a71008d7094a62cfbd250a2eb2afdf2776","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xaed0c38402a5d19df6e4c03f4e2dced6e29c1ee9","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xe8c364c964573ab16724cd63dc4da72544734b86","storageKeys":[]},{"address":"0xcbd6832ebc203e49e2b771897067fce3c58575ac","storageKeys":[]},{"address":"0x6e7cead898af7704d247d777e477085d0107b63e","storageKeys":[]},{"address":"0x8544617a530a106e4be8f0ddbc4123958f428d16","storageKeys":[]},{"address":"0xe939f011a3d8fc0aa874c97e8156053a903d7176","storageKeys":["0x7d1bae3d2e5612442425c86fe76ee4b13630b94bbcc797393f0f02e69425de78","0x941c390bac53a18c0a538d7d9d002decd706476d3fdc8f108b3e944cab1dccd7","0x09ba1a2d1ed6880c8429cae6aefa6c95b3664309f08da3ba80db2afc046ce17b"]},{"address":"0x7e75debaa645805b1aaa4c5a41aa11dbcb198215","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xdc24316b9ae028f1497c275eb9192a3ea0f67022","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000f","0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6","0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000ffffff","0x0000000000000000000000000000000000000000000000000000000000000003","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x3db3b3d04324af7a30e709b29876c167c06351f6","storageKeys":[]},{"address":"0x2f18f339620a63e43f0839eeb18d7de1e1be4dfb","storageKeys":[]},{"address":"0x86e4dc95c7fbdbf52e33d563bbdb00823894c287","storageKeys":["0xd56714ae1bc8a5cac332b6ae35b2bb0aa51b91cf92f80a052dc033beb4b4d5ed","0x0b246d9d31a73b945e5923912c50537070d73cbba56ca96ea3d544f4ab552fad","0x0b246d9d31a73b945e5923912c50537070d73cbba56ca96ea3d544f4ab552fb1","0xa605ce07bba2225103348e4b36020c42b3d747c151e6baede45600efab7c61ab","0xd56714ae1bc8a5cac332b6ae35b2bb0aa51b91cf92f80a052dc033beb4b4d5ea","0xa605ce07bba2225103348e4b36020c42b3d747c151e6baede45600efab7c61ad","0x0b246d9d31a73b945e5923912c50537070d73cbba56ca96ea3d544f4ab552faf","0xa605ce07bba2225103348e4b36020c42b3d747c151e6baede45600efab7c61af","0xd56714ae1bc8a5cac332b6ae35b2bb0aa51b91cf92f80a052dc033beb4b4d5ee","0xa605ce07bba2225103348e4b36020c42b3d747c151e6baede45600efab7c61ae","0xa605ce07bba2225103348e4b36020c42b3d747c151e6baede45600efab7c61ac","0x0b246d9d31a73b945e5923912c50537070d73cbba56ca96ea3d544f4ab552fb0","0xd56714ae1bc8a5cac332b6ae35b2bb0aa51b91cf92f80a052dc033beb4b4d5ec","0xd56714ae1bc8a5cac332b6ae35b2bb0aa51b91cf92f80a052dc033beb4b4d5eb","0x0b246d9d31a73b945e5923912c50537070d73cbba56ca96ea3d544f4ab552fae"]},{"address":"0xba0cff83faaddeb0dd42e663ef22c0f04bfa01ae","storageKeys":[]},{"address":"0x40ec5b33f54e0e8a33a975908c5ba1c14e5bbbdf","storageKeys":["0xbaab7dbf64751104133af04abc7d9979f0fda3b059a322a8333f533d3f32bf7f","0xe93bb5d2d36fbcc9c72a80aac571548ddf92ea26bb641c7959f215ff2f697b8c"]},{"address":"0x3b30a3ed9145f90da68c5910e6a9690361c2a010","storageKeys":["0x67c710f0a20788208d61dcc40bc5d70dafe2e5192f6b86ee75d5be98c5e6ecc1","0xb13e0edbcb3eab110bf5daf63b6e75919c57ea9b327200a5c18786546bfb21b9"]},{"address":"0xddb3cc4dc30ce0fcd9bbfc2a5f389b8c40aa023a","storageKeys":[]},{"address":"0xdfd5293d8e347dfe59e90efd55b2956a1343963d","storageKeys":[]},{"address":"0x37417b2238aa52d0dd2d6252d989e728e8f706e4","storageKeys":["0x8b7b9f9813a325ff1d1742084c33636aa028a7979ae4249304ff23e03619a4a6","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000009","0x5a394589617b1ba9cbcbd2b27e27cc153e90656797aacfc6ab1dbf1cd6c30271","0x270e7751614d4e91a095cd3ace3f4d517c1b37aa711dfeaf72be0b76abd04839","0x3757bb026b72bf4f9cbbbf8f2bafe0ea3d356ae6d8f07ef005aafb99b4cbde40","0xef75f3597c10141d1dc0cbd4612baf062d7e47257f426e9490860d50701a4c8e","0xc1688c1d2d0c611e93da89fe10ddd0a3f27cb50d9f94ef15a2f31a07f06220d7","0x63ad5e8597ed00826582ffe8302b2704b28344c60ae5645ec296a6326e0ed345","0x70245aa8eee00889cc059fdc11a53867c856b61f1cf8bc3ee4f4442d6b5c3c37","0xe397cf9706f522dafff518f3ae63b4cdcabf8a93293fcc829843d749f8151bb0","0x6b485436b9b234417e59960d9ab1366322cfad1c365f281a05863557ce7f5ce4","0x0000000000000000000000000000000000000000000000000000000000000000","0x9f06b6a21011ceaf77e412292865f39f3e7ad40a4f4dee40defc38983937e0b7","0xc0fe3ac15929d25201e62b8c796afb6745bcdd80b8be9470092f43535ba0b48d","0x8252d0af7d8ed7c10ea80b7c6f14fb078bd62e077f890e6c18f704b57caaa5fe","0x47cca4e5cf2ef3d1cf48e381e7c50f235175233c59e08319e054e746d4722a98","0x5a394589617b1ba9cbcbd2b27e27cc153e90656797aacfc6ab1dbf1cd6c30273","0xf67afc5d8a9483ebb5641ce5845b29143b497c64e8e700f016cf676758071285","0x07fc9f99a348f1ce3967b1918510f209dc4ad0ea6c703ec65ccdd193fba04e30","0x0000000000000000000000000000000000000000000000000000000000000005","0x09a170f3d0086dae06bb29777773ac9b2ea063027c223214f7fd334306f76582","0x6fbf3b49b523bc27464b7dbfa6311951351b1d3efd07aa2ee4d1ce319801a0ce","0x0000000000000000000000000000000000000000000000000000000000000006","0x4f6f17d4c19a0fb4496592de6c1ed38b2e6bf8a401cfc93de804cb1abd2317d9","0x0000000000000000000000000000000000000000000000000000000000000004","0x01a49be1e7ea084651fd665847100d28826db0b17160863a99534933cbbd2dce","0x0a206051e911305809ddd48cf2baa7ead2c7fb038e505e1d02f9e6c2ce72930c","0x74de6ee29ec064d7422ac246d66454f61b9e14a93dbafed176857c31132fc242","0x5a394589617b1ba9cbcbd2b27e27cc153e90656797aacfc6ab1dbf1cd6c3026f","0x5a394589617b1ba9cbcbd2b27e27cc153e90656797aacfc6ab1dbf1cd6c30270","0x7601ffefa6ba1727312968a657488b1c15c3fb08db74e7fb86ab372180914279","0x4850c7fcd76ef9a9b6af49426db50eab97252f2b3eda6fb3fba71ff8796ec45c","0x33820a7b4c4724aafa212ecdbe06d3782aeae3dbe20fcf670d9acc29d388ea90","0xfba2bf5b1dd468baf16221045792a70d5cdd656b9f3da14b127c3e81dc5d6de2","0x765724b689e31218aaf382b54d4ef85ae8209f9da80544d7ed82a51797a64b6d","0x5a394589617b1ba9cbcbd2b27e27cc153e90656797aacfc6ab1dbf1cd6c30272","0x19a91e2e18c07202ee013c560f8ebffb9b71a05a6a09fdb1d62a413e2117a159","0xc20c5761668d86779ef4c3a3fb4ef0bf03180db801ab101907600e7db2f2bec1","0xb9aa073911e1c5f8bd8c04c7214fb2acd89aeb4180f5a23dea34f2fa40cb91d2","0x5a394589617b1ba9cbcbd2b27e27cc153e90656797aacfc6ab1dbf1cd6c3026e","0x0000000000000000000000000000000000000000000000000000000000000014","0x28f973f655c78d879d00767376b860c7f1ff781d69e5cd4aa2f5a99e2232013c","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x0aa5fcefbac1bab8f6cdfd907c7a3861cfdd3776","storageKeys":[]},{"address":"0x7effd7b47bfd17e52fb7559d3f924201b9dbff3d","storageKeys":[]},{"address":"0xfd1b0b0dfa524e1fd42e7d51155a663c581bbd50","storageKeys":["0x3862c7f68d582c60933f320e56f4cb669d1fa95218843b1795d2f364b0d2ff6b","0xef0b564e34f5055353ccb90fa782db38fbb87afa0547192279fe7e16077a2a04","0x745ed5b1948fbd0ea21808905aedc22c517a97cb13cccae4dcfa3fe8e13ec123","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xf5a408b6ca36065a125b9765382973484b00a40a9a6704ede38ab2d568119416","0xa8e02bf7d13aed0bf585e4a518ddba437348f897a5311f8e1d4aa0009e508065","0x8afb6147b9f5c5bcc4b5a10449bee47fe7762bb2eecb8bf4420dd8f6ca003f9f","0x37d5ba3c65ba98e1a79cd0731ae71d87341c6a2abbdd7d40e28a50e36a570b26"]},{"address":"0xc70ae19b5feaa5c19f576e621d2bad9771864fe2","storageKeys":[]},{"address":"0x0b9857ae2d4a3dbe74ffe1d7df045bb7f96e4840","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xe257bfc9a6b59e7f8ab9505e438b48b546dfe05fb907398da3e2d314de374119","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000001","0x271ebad1ef1c4cc3c6a7c2377a94bdf43830569b7dce0b46bebe56ceda76c0d4"]},{"address":"0x1681195c176239ac5e72d9aebacf5b2492e0c4ee","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005"]}] diff --git a/bin/mpt-test/access-lists/18363444.json b/bin/mpt-test/access-lists/18363444.json new file mode 100644 index 0000000000..98dc9ff53d --- /dev/null +++ b/bin/mpt-test/access-lists/18363444.json @@ -0,0 +1 @@ +[{"address":"0xceb492c5e67385e2a08265352d646a0c32a5d085","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31"]},{"address":"0x69f97efe5beeec0803a9a10403998f8d11d3f256","storageKeys":[]},{"address":"0xc6265979793435b496e28e61af1500c22c3ba277","storageKeys":[]},{"address":"0x2548e9a58e45511064fdc892fcb4645075028c87","storageKeys":[]},{"address":"0xc662c410c0ecf747543f5ba90660f6abebd9c8c4","storageKeys":["0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fee","0x67963652696f3a8e8976c8d0956f2afb2fdf053b99be7bf625d956fc88a52815","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec","0x50ec9a2ff4d918f206930eb059dc9484bab42d8b4f52d4f6e9a264e33ed0b637","0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0xb4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56","0x8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4","0x04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fed"]},{"address":"0xbf94f0ac752c739f623c463b5210a7fb2cbb420b","storageKeys":[]},{"address":"0xd2a52f45c74b358abe1428bc43f0ce9ddf130780","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x72e4f9f808c49a2a61de9c5896298920dc4eeea9","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000011","0xef1be01d872993a75b8228159a434541a9ca5354d1a5f73fe2a44d2d0f25be7f","0x2700f34971dc3c86a46eaca36bb8ef3b4442063c7d70e7e47ac1be11135fd814","0x6af51dad79bea0b2b46f7d57d925a1a4ae8ba8c9ec9a074932ac72531ccc29be","0x76cdbb4da10a556d26f29ad18920e5a22062483c170687c9c7a6e305069b2692","0x0000000000000000000000000000000000000000000000000000000000000009","0x5838759efee640af14325896999d89a13e3e6fe10f44f7f900c98dcf42995df3","0x0000000000000000000000000000000000000000000000000000000000000000","0x4ce51de202c6a46155189c1b5ca3777d364d2bbf58eff95e855ca40b812b3449","0x0bf65866927b788efaba1adb5a600465855ddd468aaec9d99c91c9352f70d2e4","0x0000000000000000000000000000000000000000000000000000000000000006","0xd2573f0dbb1b618c8497ffdc6b18073228cd828eb6d602b370f26cad6ea425de","0x000000000000000000000000000000000000000000000000000000000000000b","0x000000000000000000000000000000000000000000000000000000000000000c","0xc5753b1e233968a84b4dddceaa66223c3e65097199f2b7f2cc0808c98803b5ac","0x0904bb255c32e9fc00712cd2a9224cbd3dbc1350ca6d0347b88c7ac7b6639320","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000e"]},{"address":"0x15c5620dffac7c7366eed66c20ad222ddbb1ed57","storageKeys":[]},{"address":"0xea500d073652336a58846ada15c25f2c6d2d241f","storageKeys":[]},{"address":"0x4130094af2c2c12fafa9ff662b390c8c168d2afc","storageKeys":[]},{"address":"0x69af81e73a73b40adf4f3d4223cd9b1ece623074","storageKeys":["0x5b55c21b899d40d6c00cc95facd1d867524bcacab0555e9145e418f6ce188620","0xad06b61865fc0ef3fe8a979452a7d0a4cad989d464708c0a98894338f78c14b6"]},{"address":"0x000000000022d473030f116ddee9f6b43ac78ba3","storageKeys":["0x23d598f6228547f9506c8a1d9889f5d4959aabec86cb4e0421dc197880c12c61"]},{"address":"0x9ecf0d8dcc0076dd153749bece0762acae1c9049","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xf641db6860fd5f6643d05bd75405a2586a63a141","storageKeys":[]},{"address":"0x22f9dcf4647084d6c31b2765f6910cd85c178c18","storageKeys":[]},{"address":"0xd9db270c1b5e3bd161e8c8503c55ceabee709552","storageKeys":[]},{"address":"0xb1e6e158adb290efd12c69f64512dbd44dc93343","storageKeys":[]},{"address":"0xf5074a863cad4ae21b830227a9f67ac86388e0f2","storageKeys":[]},{"address":"0x3005b16a12187cc4c3d5c3053e3521ee963af6b6","storageKeys":[]},{"address":"0xf51a529a4f892806e8ac581d53cb316aaa4e049e","storageKeys":[]},{"address":"0x8a440376e74c9e99c34a67102627ad04f03b2cfe","storageKeys":[]},{"address":"0x7e75debaa645805b1aaa4c5a41aa11dbcb198215","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x16938e4b59297060484fa56a12594d8d6f4177e8","storageKeys":[]},{"address":"0x513c606becd697aef54050f677c71fbf25855050","storageKeys":["0xd735dafc9e8abe8b448c57c74f6d941d9df3c07329f2702db39b1e0315aea9b7","0x0000000000000000000000000000000000000000000000000000000000000000","0x36d9207203b990c315ab6a0000555f0551db82fb224e349b40d8e507025e9c43","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x1111111254eeb25477b68fb85ed929f73a960582","storageKeys":[]},{"address":"0xa24787320ede4cc19d800bf87b41ab9539c4da9d","storageKeys":["0x091b538cc337c56d98f134820e53fdf990ed5ae12070bd3ed2dccd6576932d50","0xfe33526235a78a51be700fc56792503851298483965ca9ea3c174e0722a14e76","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x8ad6c66122cc39bb6d89825da8c2c0fd9a0dc1ce","storageKeys":[]},{"address":"0xf2722b4a57915a155dcd6980c484de708c771ed4","storageKeys":[]},{"address":"0x2197a1d9af24b4d6a64bff95b4c29fcd3ff28c30","storageKeys":[]},{"address":"0xa7631836db2e3ec13cb2e7cfbc687c168dbed336","storageKeys":[]},{"address":"0x6edf968da408a9640b8865826429a977a11c5048","storageKeys":[]},{"address":"0xf9a2fd5faa8d06e9f4695dac80aa326fbacc9f29","storageKeys":[]},{"address":"0xb830a5afcbebb936c30c607a18bbba9f5b0a592f","storageKeys":[]},{"address":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","storageKeys":[]},{"address":"0x47312450b3ac8b5b8e247a6bb6d523e7605bdb60","storageKeys":["0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x7184681641399eb4ad2fdb92114857ee6ff239f94ad635a1779978947b8843be"]},{"address":"0x2d1e5c2a10af28d238c91fddcb22893e65c47baa","storageKeys":[]},{"address":"0xb52770137d1a1ee957d450b1036afb430f77e72a","storageKeys":[]},{"address":"0x2fc617e933a52713247ce25730f6695920b3befe","storageKeys":[]},{"address":"0x83b76b11257c4ece35370b6152f1946d49479e89","storageKeys":[]},{"address":"0xbfa899c1ad97229d9c604e9ea927c7acb988c05c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x37f6e41b248623c992c2f0e7fb844960539b15fceff154facba92c7a9f4a0a22","0x37e84deda24a2f5acb9add1df4430f9941ee1a7c98655146e75654b6e2c23f0d"]},{"address":"0xe5bbbdb2bb953371841318e1edfbf727447cef2e","storageKeys":["0xd74772f2d3f7816dea5b83ed6aeeab044779ebba1326573f1e3e7525b0066171","0x000000000000000000000000000000000000000000000000000000000000002a","0x475d52e1600ce8a3be70dff6a6538611279b22a82bca4e83048753c8f48b22aa"]},{"address":"0x8f183ee74c790cb558232a141099b316d6c8ba6e","storageKeys":[]},{"address":"0x7cdf68ce9a05413cbb76cb7f80eaf415a826e313","storageKeys":[]},{"address":"0x72e95b8931767c79ba4eee721354d6e99a61d004","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x000000000000000000000000000000000000000000000000000000000000003a"]},{"address":"0x01a656024de4b89e2d0198bf4d468e8fd2358b17","storageKeys":[]},{"address":"0xef9ef6e07602e1e0419a5788f1d85e0698eab077","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0xe3808fb4c3aed5abd1cf59f576e1c9c941db867b","storageKeys":[]},{"address":"0x98f3c9e6e3face36baad05fe09d375ef1464288b","storageKeys":["0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c93","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c92","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c83","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8a","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8e","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8d","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c84","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c85","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c86","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c94","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8c","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c89","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8f","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c4","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c90","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c88","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c87","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8b","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c91","0x0000000000000000000000000000000000000000000000000000000000000003","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c3","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c82"]},{"address":"0x0fcdff7f1b9aebce034d3953fa54a7f16930311a","storageKeys":[]},{"address":"0xf0a0f8b23df046135d426cf8f905c8e2d917889a","storageKeys":[]},{"address":"0x669fab7c773b2bfe8a86e09249f0a56a69695899","storageKeys":[]},{"address":"0x74de5d4fcbf63e00296fd95d33236b9794016631","storageKeys":[]},{"address":"0x3c3d457f1522d3540ab3325aa5f1864e34cba9d0","storageKeys":[]},{"address":"0xfb3cd0b8a5371fe93ef92e3988d30df7931e2820","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0xc585ad419c5650041b74b105075248f80ac9135d","storageKeys":[]},{"address":"0xe592427a0aece92de3edee1f18e0157c05861564","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xc03f31fd86a9077785b7bcf6598ce3598fa91113","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xe7f4dbde1f055fb5dfeb1ee1b0fdc52ab1e40610b4cbced628be90449bcaa996","0x0000000000000000000000000000000000000000000000000000000000000065","0x0000000000000000000000000000000000000000000000000000000000000069"]},{"address":"0xb8901acb165ed027e32754e0ffe830802919727f","storageKeys":["0xa0d1224dfac40e9c90ad58c1cf011dbe362397ab2b0fa32c54cca8801b302fdd","0x8104522f08084ff3c7769672ea3b23868d65963f4b4e53dd7ed6fc4a8f2655aa","0xab166fbe919e459855231b333e9824b787e83b032e53a3455b5340add3afab97"]},{"address":"0xbcc44a6a4b0b01fdd788a8542a8427cc6a066e55","storageKeys":[]},{"address":"0xe3944ab788a60ca266f1eec3c26925b95f6370ad","storageKeys":["0xece1cce679cdc49b18b2bf234a8ffcef69622e29ed4541e8f061169dd9bb19c3","0x816e7c8224537e9a46022ec2591d0f825dd5636618d4dec1def4c55625f2026b"]},{"address":"0xe290c42db4dd54717b6d26ae5ea3ae7da359f034","storageKeys":[]},{"address":"0xc790b0d7291f864244b559b59b30f850a8cfb40d","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xffe15ff598e719d29dfe5e1d60be1a5521a779ae","storageKeys":[]},{"address":"0xa9c7f76b8027526c9b1db2c24f6d9242516d671f","storageKeys":[]},{"address":"0x50130437a81535dd8f4b0b921756ebddff537523","storageKeys":[]},{"address":"0x76e222b07c53d28b89b0bac18602810fc22b49a8","storageKeys":["0xb5e32bf50149885d3d646d8982464d72de4ae399d83828a675f837354bf33510","0x02b8d8834ad9af8d7307f3bbdbd773ede52b32eeb265e110116185bce8222791","0x774cca85025c2ce10e9e3034977533ce6004a51f85ea56ea17ae38e7d83e11c7","0x4a8360dcbf2fb9aa7ab86da1ac9b80c2b3519c759a2bef3e5f16c0fa8d6a9b52","0x000000000000000000000000000000000000000000000000000000000000000b","0x8019e036999aa69d9af14701dd2e5f06d2c1be260f44867ead530198efd8aa54","0x52b309b0c3f704fda008a718f9043bebf89efce14e6afecb69b37f30be855918","0x1a67dd2ba4c77367ea4e2254ec1881eb45c3091278092d4d213c592398e4c02d","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000008","0x5849072c4f1de0b752aeb0bca85eccb859c8c2979bc1c5a111540c3bfa608174","0x0000000000000000000000000000000000000000000000000000000000000005","0x0588d0c3a76602a35b103254e95b5b0d99294eb2f4ddee93696edcaa2e07f1ad","0xbd04aa5d8f347727f39776d0bf0dd4fb7a53c843c1ea93e170b48f808180b98d"]},{"address":"0x1d97f8ba688b00a3333e2bfc46f62aceb5d3c19f","storageKeys":["0x58554c8d4d49f3245f2cf231069c2b20bc16b1cbbd0d182a45639fdca5b5b55e","0x1376f1602f62e688683fae11b2b431ab4f4ac45ac62b37918824942d25b9b536"]},{"address":"0x8d2f3ba53de0becd02a768ae47e7daea736d18d4","storageKeys":["0x88865833f46400bc06af14943dc9a00455c814058699150ac1e0b78df028cb11","0x0529b55e09b4d3ac6c5c3f2fc989afbcac77011c3e1062037cae91d59baa5855","0x919f5b91115577eba5aaa294e02ee010103febab72e0acfdf86e731cfe7d8459","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000013","0x6a2a2a495a242a48411012348a9e24b0b4eaf321d76e4de329928775af41074d","0xfee8537133cc89145932ff516bbe7d949564980c75ffaaea974c37b1b8ecda1a","0x69963df970e4dd66a99a5028555867b0e0181c9b10d2be93a1e7e427811ad29d","0x5dd8ac021dea190d797fc113d99dced426bd093f7b4398aeaf1b96df8fd17ba9","0x000000000000000000000000000000000000000000000000000000000000000e","0xe5a957b95a50128ab2d89499d80b018493099f2bb90ced5233998b2f45c15232","0x4acb8c6261840d853f24cc6b1563515d7a6ee1df5f05fe17172cc365b1cb6928","0x9fb793927b7b08fdc927222d9745736781a30935b0bf6e831ee9373d36652fe5","0x000000000000000000000000000000000000000000000000000000000000000a","0xc84d5be059429cbbd573b75d3766350741c4863699863c8ea0631569acb08c11","0x0000000000000000000000000000000000000000000000000000000000000012","0x7b3afbb4d900c1d555ef22d5365261e2b802813cff305ef1d98f5721764ac74d","0x0000000000000000000000000000000000000000000000000000000000000019","0x0000000000000000000000000000000000000000000000000000000000000017","0xc9f87165757ea85a0a25ac76c192c5adb1cc4f8abb2d26b15e373875d8d4d809","0xd8827f71efe96de401541bf20f17ca8a579950ce7f986f15890e42dab3ae19b4","0x0000000000000000000000000000000000000000000000000000000000000014","0x0000000000000000000000000000000000000000000000000000000000000009","0x27a6cae6e9962538c3d4b79c1d12dd6f2e3721ec8b78be8d2c59e2a9c726057b","0x7d0bb50997d6c42c7985f7a1fe71f3c39d29c4ad35ba2b5815f7463f4cbfb889","0x0000000000000000000000000000000000000000000000000000000000000015","0x0000000000000000000000000000000000000000000000000000000000000018","0x6f8bcf3c6626aa1586082a13495eb44c5260b2d8c9d5e43b95d384d8a8f9a395","0x0000000000000000000000000000000000000000000000000000000000000016","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000007","0x43cbfb27efa831312bc60e025cb4a5011529543a51cee05b4cd8138139c7a5c8","0x0871a5d940b7b81691b26e20b0e1d240b640a7aba2f414297b54cd756e2f8521"]},{"address":"0x548f27e2c1eb0c90c9c0ef3a4a61a6ae60038f02","storageKeys":[]},{"address":"0x414135416b86118bb9abf52241345d52e3bca641","storageKeys":[]},{"address":"0xe4edb277e41dc89ab076a1f049f4a3efa700bce8","storageKeys":[]},{"address":"0x2fd08c1f9fc8406c1d7e3a799a13883a7e7949f0","storageKeys":[]},{"address":"0xebec795c9c8bbd61ffc14a6662944748f299cacf","storageKeys":[]},{"address":"0xc1af2a2cd32d90132080439199bdccc269482bcb","storageKeys":[]},{"address":"0x504edf66b5499c680cf21a7d376a10f31229b68a","storageKeys":[]},{"address":"0x0b453140f6174788b5657876d6d25aa02f79962f","storageKeys":[]},{"address":"0xd610c5d5cad200894743455ab9bf0eb73d290e2f","storageKeys":[]},{"address":"0xe37e799d5077682fa0a244d46e5649f71457bd09","storageKeys":[]},{"address":"0xc36442b4a4522e871399cd717abdd847ab11fe88","storageKeys":["0x0143f300029cdf37fa68e68af473737b1dd6912cfefcf396b76881acadd8a65b","0x4e506517218e6fd1a30d242ea8d040f7cca9231df83c626f127c989eba48e518","0x0000000000000000000000000000000000000000000000000000000000000002","0x3922056ad7b83e0b5398060da338226d77a465bcd080ee32c419885dbc10a7bc","0x91b46369a917c12e58b375be8fb8cbc4b8a640d494672d0235789b6c77a3f615","0x3de4434b5ce3e9ff472e5aa76dd327f8cda77eeec7f85737b4fb3a12b3cbbe35","0x94b574d8873307ec24af90e8e79d92bef6e55baa4d28c398d8191b7def4c5ba3","0x000000000000000000000000000000000000000000000000000000000000000d","0x95590573b57fb100d42c6b929619f92ce6ce6c023a24346aa2ca3df230d880f4","0x0143f300029cdf37fa68e68af473737b1dd6912cfefcf396b76881acadd8a65c","0x3de4434b5ce3e9ff472e5aa76dd327f8cda77eeec7f85737b4fb3a12b3cbbe36","0x0143f300029cdf37fa68e68af473737b1dd6912cfefcf396b76881acadd8a65a","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3c9cbc3","0xb4ab022c66d1d52e0e4637d095ccf76ab2ed8acd7096b286048925531762d2c3","0x0143f300029cdf37fa68e68af473737b1dd6912cfefcf396b76881acadd8a658","0x3922056ad7b83e0b5398060da338226d77a465bcd080ee32c419885dbc10a7bd","0x3922056ad7b83e0b5398060da338226d77a465bcd080ee32c419885dbc10a7be","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3cb6fa2","0x375f56a183813ebc60e2580474fdce6259b00eebc335d4d9ebe22a95a8b2b722","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3cb6fa3","0x0143f300029cdf37fa68e68af473737b1dd6912cfefcf396b76881acadd8a659","0x3922056ad7b83e0b5398060da338226d77a465bcd080ee32c419885dbc10a7bb"]},{"address":"0x902f09715b6303d4173037652fa7377e5b98089e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000066","0x0000000000000000000000000000000000000000000000000000000000000071","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x000000000000000000000000000000000000000000000000000000000000006b","0x000000000000000000000000000000000000000000000000000000000000006c","0xbb4a7515a5e16f5dbf618622d5ae1adddfbace2bbe3ed7236b68f63164b4843b","0x740eb24e15e7b3f66b232e4101b6bfdf8bf6affb83e4df9698a0488d4d5f0008","0x6cbcefbb9b8f8e6cb91d231a006ce6c906409eb001f4d786c79a8377b2f351c6"]},{"address":"0x721fdd43bd765c6d645ce240d9a5035a148e4338","storageKeys":[]},{"address":"0x8fada3806fa641f3e2f030454d3170c10ca1d174","storageKeys":[]},{"address":"0xc59403834f631db807840d3ef58011981d4639ff","storageKeys":[]},{"address":"0xb62e45c3df611dce236a6ddc7a493d79f9dfadef","storageKeys":["0x8f3fcd8a87d8a8259bebf9cb6e7e851eb52ed472d13c686b03ef031d54fecb85","0x13061e5148594c093e4eaa49ee9225972b9b8f89d980d78e1c30ba9264578980"]},{"address":"0x1fc40cedcb47f341b37968a635314756d4c04f36","storageKeys":[]},{"address":"0xdce92f40cadde2c4e3ea78b8892c540e6bfe2f81","storageKeys":[]},{"address":"0xecfa4e7409917cc9b08a4b02a1b42c3515b85819","storageKeys":[]},{"address":"0xdd378a11475d588908001e0e99e4fd89abda5434","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x9281035df6f00557c0285d7df21d323c2e2f99ad","storageKeys":[]},{"address":"0x0902e87ff457d7d85d674e7fe0c66442791b1654","storageKeys":[]},{"address":"0xab433bd84ec776f6480a9030abc5966c72a2ef2b","storageKeys":[]},{"address":"0x5f2a744b1a9ede9f66dad8d67e45e067de06c3a6","storageKeys":[]},{"address":"0x838a5832eb19cfce692809f5b2de44b15380cda2","storageKeys":["0xa7efaf40b530577fc37fe5d99a1d0519461b6c4941df4c0290f2df4fdcb9e28a","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x932f4754efdffb297e57f870b5cc68bc33312e94","storageKeys":[]},{"address":"0x3b3ae790df4f312e745d270119c6052904fb6790","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x197e97841cb69cdcfa477778142be5e1152866569f923a294e043f97112451d8","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"]},{"address":"0xb9897a64f569f3f75bfc6c2cf26d837fbbcf5c2a","storageKeys":[]},{"address":"0x44a6999ec971cfca458aff25a808f272f6d492a2","storageKeys":[]},{"address":"0x0000000000a39bb272e79075ade125fd351887ac","storageKeys":["0xd1837627f2219c707702f5ac334321590aa4743e9e2ace8d7a575db4be4401ef","0xf423478e5c30bb7e04f5ae2b0c330fc964477768d362da03ee7e224862fab405","0x080320dd63591608c325c9e5a5aa32bb601cee2fce2dcdfdf1284c66de83cee9","0x859245a13018ac5a93a01e110bf65ca1abaee6f8ad471faac9be4824c9577049","0x18eb54239e3dca807a7220340675d5e483e457abef8aacb743940f5b0548d515","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x17056582f3c9264f8ede25cd22a619aa2e097a26a5b974958a539f96fe9de169","0xa272da291800fc905fbe129b74d4bdcd8d6bc953efd02e2f0f4bccc9c38e4798"]},{"address":"0x109830a1aaad605bbf02a9dfa7b0b92ec2fb7daa","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0xbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b"]},{"address":"0xc178167d2e6eb6fac41d669a7a3ecb2369f509e7","storageKeys":[]},{"address":"0x448dfb80eff9cfd017cd7ee014017cb6d5c40af4","storageKeys":[]},{"address":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","storageKeys":["0x833fa222585c73f322f51dec13ece277fe5904f70ff95e55fa6ca8c03b6e3a51","0x9951e5c97f68238701a07028be91c5ba29bde0c65662546c454bab615c93f76a","0xda9ed07a1f285a45914f817e8cfef9514adc2e474bc077da53731b8e539df964","0xee61682ec263cf9ac626d5a9b0cd5e26edbfa98b5b368b540e65bd739c37e3b7","0x2790889919ab683a93d4271d4fe15fc1be878f84b6b702f22794331803c5dfaa","0x909d2686f472329788f5735a50677a82eb87d180e824f6cf4487742669130efc","0xa9737ba1a10239384d8fcfc799ab040cf027ae6b94e2299cb8f5f4ec251d23f1","0xd560a2cfa0eb1646a26a69aaac51ce0a87d07e92f1c5d1555931db11acbb71c1","0xee882cb0e61efbe2f7edd0fe7a9feef75c17c350fbb5f6e38a0a447346552280","0xe64622732fd0a452370f2a3346245d459568f645299277b5769727886d73e457","0x84fea2d772978e5a33ba1e173222c037e904715cfa963e3df0dc0b0b5679268c","0x63932fadaafbb12614a1ebee5dabe846ea84deea14650da76eb985ab4022093a","0xd212dcd01ed41455be0b36533ba78a0fdeccda0068b5f90fa610f816600cbd08","0x0000000000000000000000000000000000000000000000000000000000000002","0x9ed839fefbe23092644cdedfde0b79779fb1aec3a15d164c2df5e0b28fbb85d1","0x8b585f66e183984e00bf009ba25aba7f5da458e5e8efaabb6170cd4cc1f706e9","0xeca07c014d229c4f696d4a033c63141436ca3c295aa8a2b2584a59655a0e0d94","0xe03178286da22a27dd0b1f68fb538cd07bc9080172ee9a5a2238416fe86db02a","0xb1151b5f51c370d607b59e0034392dd388ea4cc8dded24ec75baf3df36983150","0x4175c49d56cad0bc6d69ef289864fd048386a14da4ac19736c9e074139b2e912","0x61bd8b7d7ea1350e36cb998c4b61b337d0b7e6c625816251eef440c23f9b21a3","0xbe11b0e2ba48478671bfcd8fd182e025c26fbfbcf4fdf6952051d6147955a36f","0xfb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8","0x8ec633f23a8bd50ec57ba06f4f70a523959f4660efb9bf0317e10af3e4918c68","0x2152d1f752d5b88a3178a813eda1508fbde034f11b826cc92dea66732e3d19a1","0xb374801ace2c02f5db0425ab5920a2b7ed1d5a00abbcd395fda7530ba1d666c0","0x87490cfb653047f997b69e61c7a1fc30f26358b189fb850deb46079b7f96ff2f","0x106c30a0c68ea09535b7105caccd49caa649caa256e85d87cf2098d10f72d4e0","0x4c3f43368e2e7b959bf0f00a0ccde02a47285afd90a3613be3bd46a0c37843dd","0x9ede93be0d8fc6a5eb9cf1c7345a85b7519d8487a727aef0c2f00ab966aa7716","0xeeb9b2a778da79ef78144c16e5ab4cba2394b8f096e394a5262a79459bfacefc","0x2b83b3e1fb436772e592319bd36c360dddb62d80a39727784d546decedbafe26","0xd4851508b763b3596bfa183329302d2d747141dd75533df138e81ab00f1ce9fc","0x3aff6944490d4628833f7b03ee999b6e6948ffcfba03d269cdadc1875a2e121f","0x3fbe6099f169b217d3e3f44e5b72b54ed4319f5e6c163e6e3739eb3434dbd572","0x5bebc1d66255dc5622774be2d4302fc1e7eeff454c5a800f05e2040f4af24f2f","0x8c38e3450e69b2ff90cc49eeeaf7fd1bed7c9abcef02c91ba6070d4dfc4743ac","0x3514a0695d482e2591be8de983771ab1f8770ba2fa598524700d7c0d233e4d58","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0xba3974f7c497d4e64a9c1f262f27db1bbf8284c20bf7741255568616823b8ee2","0x2dcd944716773b83c0a1360f495fde13839861cf51362cf7556c51b451357715","0xcd1c7cbb83b106254f2544ce2b7ae8aa02a218dcc405730b8c0de260008a6434","0x0cb865ff1951c90111975d77bc75fa8312f25b08bb19b908f6b9c43691ac0caf","0x1370bdc1433914c9ffeda129ad3008563e2cfbf220222331adf7e4488ee1bfb8","0xb96a7d26beb69a346e760118cf70cc60033a13a4ec814c4aa72516e456aa2778","0xe273279646f2df33ee6e363c00a026c75bc9b08cffb5feed144b8cc6ea4a7c17","0x73a521ebb9c22d2aade7f1dd6340ba405c7330c2adeada9860737164168d5264","0x4fb413805902e1d9a6681d54d7946be4d2c3433fadac4304eb49ef1b5a52a8f4","0xf762dfe765e313d39f5dd6e34e29a9ef0af51578e67f7f482bb4f8efd984976b","0x47acaec6cce4f8679df357c0511627b345d6e8f569cbcd40f3cc0dc80233794f","0x674994ab631faa049823288ef8b84de2146a4c9528e1ae43eded0b8e59b3c47d","0x75245230289a9f0bf73a6c59aef6651b98b3833a62a3c0bd9ab6b0dec8ed4d8f","0x3355aa162647aa87d59169dcdc67640130e9607c9491efc2a497dc7a2abf1102","0x4407c5d47a7806a692816c7b7730fc910a266f9b6c73eea8ad04188aad140dea","0x640c500897aa4c5b6168b086801ead8d6109c7fa2bc9776b19a1046647afbcf8"]},{"address":"0xd4006530da498c6fede1ef57b962be869932fcbf","storageKeys":[]},{"address":"0x777ae9d03e2be0fd122f883f1cd684996df78785","storageKeys":[]},{"address":"0x39df4b1329d41a9ae20e17beff39aabd2f049128","storageKeys":[]},{"address":"0xa2413066951f039affe8415b6825b2a378cd16a3","storageKeys":[]},{"address":"0x94d3af948652ea2b272870ffa10da3250e0a34c4","storageKeys":[]},{"address":"0x55fe002aeff02f77364de339a1292923a15844b8","storageKeys":[]},{"address":"0x3773e1e9deb273fcdf9f80bc88bb387b1e6ce34d","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0xe31b1f0575399827551e4d611d6abcd211f4b4a4","storageKeys":[]},{"address":"0x60e4d786628fea6478f785a6d7e704777c86a7c6","storageKeys":["0x5e0f9aac96e710aeb274140bbfd2c03d303ad9ead70a70b77aecdf7db4dc683d","0x99a1f83d5a8412ce6a005dada8bcdb86271d7a9d43a7f0ede1a6f9f92f8d185b","0xd1794890cf3196f23bbffe1749783641d70a11a449179cedc7be90742c680969","0x05337f156e4de2f973b79726c5350dce046f885487876c08b2f64679151721d8","0x4f56119acaaf13802e02018899a27cf0a66e8bf7a974c1e17728f3250a78b9bf","0x4519130a0137cdb0ad6e348031753efac801089db868c6a2009265b0818fa9b9","0x621331969225d71083fd63d24f274c827d0febf3b5796386f0336a18b35cbf8e","0x472bc23beef460903d6b8add8c552fb758a143b995c58099099bea3c31db279d","0xcc0d778183592af5774d03ae3dc21576d135f70d0ad62b4e4be5e86a8dd5b71f","0x12c95e1ef2d8bc6378d8c4620a3e3f3661b6bc13a3821b6ed07aa95102771dbc","0x38b5d628759581a858fe7f971c2c0380a094950224573e553254dbca3142ddec","0x4d0b1c19582504ad7b35f6823d50a4c11ece91231277efbcdd704d1afa33dc84","0xcfe827968a5f134b26f2d8a2244c95da141d059cf3d64b9e42930ad0f3148711","0x8e77eab1aa2d4973dcff86cade1383ad357bd254e574f6df40d266340f53df26","0xc2b34ef9f1c1c3c9b7bed3078eef032cc991bdd05e132b41a0acb7fdcc67dcae","0x178de715484ada6447f6deea86b86c7552f10d41727186c773f17df7d2c45126","0x6e0a83de0848c768a8b1e058e368a393342d32d350973a00cb759d36ed2b670c","0x79a4d452c55560a09894bb1499cd87bae5eaf26e1250f7aec635dde4cfae0512","0x0da271a40588fa143365836a19f84e0fbe4e04cd2a8939e417ee2f976be1cfb6","0x7290de247b97283c5fd7a8ad0afb093cfee57db100d8f3124ea8e62f176b6bab","0xe743115e1fdc12b3488def4d471016d3b39dd89dfee7dd69948891fff5175410","0x191f44e1580242299db063ba805164df27b83ed3842bec77e30d0825697863da","0xb2fb5f88a45158ee54821ff9675c31fdfbc7437db5511ba8084a422bba98b6e7","0x8335ea94932d8b36be28d0034f980d80aacf979f224573f6e3f337d1ea2b8c50","0xe54bff27c15d90180dc4a3eeb339f7d8f2bce2b4062a8c5bbf55ca65b8dde680","0x5eb081b4b085d031c2c277752e4a3388ecc3683578c6a7b74feb09b771e40b5c","0x70c2f8df742b3a05db9fe920960efe081399f7d3c7103fcf314fde13bf9c0644","0x9f38b6383dff8661c822495bbc1f943c0f3604e57a3f356c190d62038fbca8e0","0x69b2ba739836e87aa9eb43afce38a6e8807d0d93afb7693a2fb4ece883b017f5","0xfe68ca6c9a70e86693cddd7ed649f084a2d180a39c6b03aa2bfdfc552c798efa","0x5e6ff24ced075e9ecac646fcb0ef109b2b41a72142be2976ab54ba3e546a426c","0x92fd0910c68c9172adc551702d1457e12a7213906dd3ec3f47dc0fd0855499db","0x8f055d34e9867171e01de20bbbbf599594fd01888e3914b67a2e4883bee0605b","0xeadbf07062452974829e36893662942275e1e892f44a1133bcb26d93c94ad272","0x4269c9513e075808fd31a09ea0ab39ee9ece5083b9d67231afb4626f63f905b5","0x2a5f205bfe2ecade65168e161e926a00d3001ea870207cad71b12c6b21c6a893","0xc5125415d7761e3a74e9a0ed8b35608f9673cda563eb086e67c10540de34c92c","0x4e961ce8fe6166f94d3b6bc17bd5bbaf601e9d3dd1c76be012f6db938230b3d2","0x41102d86124b1e7b6f41d5b2be2f244c7aea47732a01e512ab371d2789803a18","0x3a5396416d65fac2f238652434054caf755f1362b6ad53b2aa9e41b4a82334e8","0xe38f27c33f988b005a954468e7c1e8a776c54b3e1091353b3610a75f32f7cf74","0x917b8f8654caae7d7c0a7f58dcf5ae2fe4b13d8b6e86bdb85252dcbd09453bce","0xbd6b2278f4d1133a4b560384d4099f7b2f1ff31f656537c3f28495fb2f5af64e","0xfb4522ada2189179f8dc298bb297ed4cb70263aa7edbb557aab139c9695be5e8","0xe34740facae3a83b2b4b75a76b0d500cce98e483ea2c2abe9df75e7f549cd527","0x7fb9f0d686d517ec3395ef2ed2387f3ba95b60094af2be9f4e6eed448b270ae6","0x6b25592c43ea4c35cce61a71aff02449ce5d5e3e20a4331f0e9328b34b8cdf81","0xa251c08ee7a24fa1f04555b44e7272d114cab5a294e763f0143952dadc772059","0xdfb956a41c7a589ec797b8b880a430c1b7de8e1afb8019a7e7c2b5b46b077bde","0x48793e886bbfadb8c9dcbecc2f9ddfac9eda91468f450139ac6565833e4f14dc","0x7119f4c4835e67f202b815b65329970959af8603376ec2bbb9bb9fe785fe7ee8","0x0e6c3d987a0fe52016f93f370619eee1bf3f993cfcae2a53b02559ab88f4cca2","0xc42f62feb574c226f0492c83f3c6ce14fd4f31e004343a292d6e1884b00eba0f","0x4ec85d7f7c9a17bd6f3d088ce98c06d2bae7a3378f1ea2eb5b1c923c77b4677b","0x38791aa11f237ff1dafab27faba6bbb2cc362c247942f24fe689ab3ac3980f9c","0x76b79139b9cd33579a90170c9864e9ee8385c1cc514e926aee5bedfb44b9a9f4","0x9c6a49f39f181d89d03efd8945dbd3230cec63ad51037f1d984da84100209276","0x8e4b9e5c6763bb89d62709a4996c43114d797f458616e3f3f9ad04c59e22f40f","0x9fb7166929d82557fad2f19340d89bddb7b363f15226ae5c8a65cbd635410e8c","0xbf27dcb38b4f96aee33fc9ec4111c6cdcc946be291fec5349664d5e92faef39a","0x37267e88fa93455b6951b12b02f2b1d8ef5404f71898bff4faa46e2f6077cb45","0x59d478b2aa8f74b30e1f29700fdd88733e808e482843f228074a724951efad80","0xd9cb044ea38a2571bd6fb6eceb257b95d6ecb749e0a73a9ce2aa97c5af1d8448","0xbe86a5f58980f6af60c04831bab161527d227daa281f6f4580daac2e160387b3","0xe50a8975b2d656768e66cf4d6db1a844874120001d569cdee6cfa2b5768097df","0x9fbdd789dde3469194f6a705ec8477347176940f0e80330d3044a72a223d2820","0xaf1cbc0c4d1d5b161d67fd8e9ce97f1c4aff59a7fe34e457b638647a78b76711","0x8a55a23885e8479db394b6037d37674d9271c490cdb2732ba4d6b465f1839ba4","0x230f51296dd34abba72caf265cdc9ba0f518fa3356cef0e745f534ca0d92712f","0xa4c362802ec4004b4f06776131941d9764b5b63b02ea3a5e4ae94956e3e188a8","0xaa4e867e8c88fa02c50ef9e768d56b6c4d35e9b623e673fc0e88e18eb9ef62fb","0x03307c2a0cf8793cb3d5760a6508e393462a96b690cb843edf2a05ba2fc585d0","0x0a1add34d880882ab495d61fd5d29ca101602dedcf05443d9951011e625318dc","0xfe04ec1c2fb63fd2d29fc287c0f655850f556cb481f17ba0f90e68a8db37d7b6","0xf8617a635a84015cde3ceab05e0c4df3ba5344c0a16b940ab3ba05b8ff931478","0x14d7dacd7b706dfbce69208ea2a9441327447690e9bcb89ab565a43b14173d33","0x7fce19720ef38e08bfb53b936a9d836e8303db0b66fdbde520f3ff0868a7cf59","0x0c939833eec7eb8b03e0af0ff6c9c8a932322ce07dfd59e9719b860a67fef4ea","0xdcd10eff92d33bd728be378b28a87185dc4187983190bbb68555351c2009ae07","0x31addbd39fb586bfcff95378368464ef42b9c7643ee1f8aefb093111dbdf093c","0xf3183a7326472f4a699da79bb19d84adb3b4667ee0abcfc8e3660bb6107ec0b6","0x708e9b6a3bdee8880fbf143a89bfc4313452c39a1bdcf9668515594f4bde9dbf","0x1f8326a0e949cdfa35837f2ccc0c46bb4006e3f340543926c3562b3b63e1dbf7","0xfbbcdb0a803ed1ecf0d890277c3c8f6536ecee8023b2294f3fcde1ea59963aa6","0x9bffb5d1c015972bb6bfa529aee980fd1258e275f8c73aa553b5f25e6502f05f","0x4ca613a736700682b1203a4e6773790ee57dae6c15a1c167c2877c523ce8a7db","0xbad9c6f087f50c5936f27f4524eb98d4e33816ba48f3cd853425ba4accee08ba","0x712586084c6cf67794652d5f3e7aac7a52ae43703e72b9ac53bf301892dc5f9d","0x471069a139ef62706a68220d6333d2c2b4a4b7b4cbff6f4f922f9b2455990c10","0x0e8d28c31f452198f0f95ffb2cfe45d934c7d577b8df2350724f090f8b0a38f7","0xc4d92a52712c285ddf42f8227c19f0a948ee897afb13d93252e9e6c527f70a88","0x4fe67dbdd5c0d4a7f69723f92b440fe53df63533d2d82845815cb2c3488c4d85","0x02bfbbe102c3d119098a74e87754acadb62708bfb4a3da77e0069f56bbe995e6","0x3fc1b451d4ccd26442afa4be2b787bd0f0efb085210007fbd13861a1d545ad41","0x7d10457ad990f8f76727b30cc0a36b1a8f40ac178b63217856d621f89de0cd68","0xa9dbb2ff0e353d7eb36caf285058091bceffc224f180f1e19f3f4daf197d7fb8","0x41206d017783152518dd53ad33988c3c8c6a7b8fd6ceeb4fa028bf087ad6f654","0xedcc9b1adac30b3522d99a00177141bea956bc0348f86864e72fce0d377216a4","0x3326d0e27e6233d9f6751d4cc3c1f89b2a6ef3e60c260651b5f7b584b2a84898","0x4fbd08fbe7fc0f1401cdea71493355fa8dfb3b8be6c2eddbf33160d4afb3013c","0xa523c43fc3147c8c465209b83b27e8cd56577609dea22aadb6ecc86b048fdd35","0x59d5d01e7401183e7d3d5e0b35a1bde0fda576aca009ef4b5e1a126b91a8e46b","0xe60cff6519d4ffe916e8bc1855a18bc3df35c1286e8e218c91e9e139d745139b","0x7da21ee4e4c80b9eb51e5573e496f4d6552895d11165d189f919b3ee512b7732","0x21ebbbbcd0bd9141ef0eb5eb8287ee86f6a3f74a4ef854af35b7b58396df2935","0x5127580a5286c22c769f2c1665e066d40f9ec0213ac7d870b23ff282d8851e4a","0xe84e000052af1b12ff31020ab8abd1f694b213a1078abbeb22ddde2d02c8eca5","0x54e192cd0cdbdbfb5bc5c06174693694b16c433e1acf71871533a822338dc31a","0x68d8d23e7f893b778eb05bd7298e4fd36a17f0dbb4d9068cdafc1fe4253243b6","0xfdc692b99c885d2047c16ec306da0720dd0210f7614716e7720577eb214fc39e","0xe8548c705f915c13a4d9f547f7cae3b21c4e736dc545432f8d711f19fe9cd721","0x3a9c7db3036da51117d7244445712d858b52201df693b936cb91989442ef22cf","0xe10d49f61a9e977c6c5673278c40f6f618cbfb6718a257f83d32175e1057ccff","0xab03f994e341c7df7c057ee8640d3d55bd9c628fb92d0341de5d3a6a77486adf","0xf69cf01e515e948f61ff60d1aa86aa04482ee0d81d732e99f0036039a1ced0a1","0x8af67d5b3d07c3972c7c80c8edad9897e532dcb706272e41e6411454bb441aa2","0x7ec9340abcfaa9508b372e587cb6005b511b6a33d1f1f3aeca12794e49dc74fa","0xc34073384804ccd660cae048788ac8c75fb80db704e84dce91c448075ff6e753","0x161f9eee6dfe1a8a6465e7a96dba1628792cb1cfe9e04a32306c61bc6d87c8ff","0x90065d92b70e3d3926c944cd453596d7461b0cf99fffd289d1c0d6e2d9a8cae5","0x679fd89980ca437d5a02d79ea16cbc451278f75f423e7b4d16435f5db43b5ea4","0xe8969115ba95c7ebeb4b4cb7e7c26de513f494f0931330a541621f0146065b8f","0xe9a0e25c0a1f3eddd75c387b0b80f57713e0861366d3d8ea91e0b60edb69caff","0x580f85caadb6681d62ddf9925a380669a0030447e8aa4524a8b1d20d71b58e32","0x619465648a9e8fbf67d2944f0173b3e12703f2cf18e205d549290fa15ad0d30f","0xa882f9f84185b1847d02716cfbd577ffd693d8c21d075cf121ac60f0e4c64a95","0x827074c920f8a48f0b16fd7726dfa45e78fc99503b3c9e0b639b0f6aa1d90211","0x3642a7037a47c4951ee04044fe25c924f93b7d92fdabb63218adb72bef60d74a","0x7aa9ad72208ad5e91a5abe1bd520cbb0b4ad330a0574c1b9428e19b4d01b1a6d","0xf64125824af9f5ddb3662f773068c37467dfe9a93b490bbcf39b5c68a7333e9c","0xbb627a5d16dad6144c0ee4a31fbd8441bf6ac83de6227457441ffdabadc1c297"]},{"address":"0xb3e68c4287df2b2a5045319a9d87d8b513f2cf60","storageKeys":[]},{"address":"0xf338cad020d506e8e3d9b4854986e0ece6c23640","storageKeys":["0x04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fee","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec","0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0xc3312d608c59a50378089ddba3e807885a8eea46b12e8c273bda8b229030e943","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fed","0xb4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56","0x8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4"]},{"address":"0xe1c9eae59ed343ed94b15f7304fa9fa55fc87901","storageKeys":[]},{"address":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","storageKeys":["0x052e713d101c7dfed5314e4b3b8ecf07e42b12c3bf502e120438fddbb4b372bd","0x00a4acab033aa095db85c6c6f6d1c98cf2a1f0630c05c2e4e0fb9e1e721b8923","0x356ea57d585b4c2292ee2a39c9da213499f25d18b4fba5671c7bc01208e40e2e","0xcaec8a8f8eb95ddd46491e5028a5c5690dab389786f3ec23ea22fc46b450b8ec","0x1b14b3855f214cd4545c9c99e89917f9b978e4654b1014a77a720ed79dcd11eb","0x0000000000000000000000000000000000000000000000000000000000000005","0xdc276a4f120117ad5ae6415d1c724b4f3a0e81f0ee6466e1392ca121b63123f2"]},{"address":"0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000004","0xf2cf4f001b7751b7906e2fa0ceafcd025a53d63797880ae8c58702c57f330040","0xfcee78d815aefb30303e1ea7c2dfdb88e0545eddd31e2ab3e4f3c619cb5bf9b1","0x0bbfc09c26c227f6ffecac6e95d4e9aaffa3bdffd2a93f6c1c3e1f09f8419b89"]},{"address":"0x6d4ff7b8cda876bf6334cb7ea14ad251269f10dd","storageKeys":[]},{"address":"0x2febe3d60bb2bbdab135c740617241c2eb949635","storageKeys":[]},{"address":"0x21a8f7ff1700fb57a6376fec4d724c8d70f0c0e8","storageKeys":[]},{"address":"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0x3af7a58d54cf014675af2b7ebc222c3166bf5692","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000d"]},{"address":"0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x71ffb68713427fc0729878f15725946f87f3abc0","storageKeys":[]},{"address":"0x3681a3feed68414617d61aeed92ca5c13eb2ae4a","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x3e8203e0b1d56984abc66f183a8d0b1a09a7e607","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000012","0x22da7386e7384013b8b0e0eab6013e51bc14487cd4f71c21f8c1aca4a593c0b5","0x0000000000000000000000000000000000000000000000000000000000000019","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000021","0x22bab0d86ee9e5a32bf4b00cb61bb7975afaf6b027cd25a954c9f2adc572f83a","0x0000000000000000000000000000000000000000000000000000000000000018","0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3","0x0000000000000000000000000000000000000000000000000000000000000023","0x0000000000000000000000000000000000000000000000000000000000000010","0xf657f330be1ff39cfb8bcb4370a28f5a63d0c6bbae6ac3fdc1da2e4422549b99","0xe67de4fd790d3642fc767cec4a616dbfce123aebdb50b105e4c91b47053ddfcf","0xe43668e1da3dbefcdbac19ac441486be8dc03500c9e9b4105eb9e5e707d16638","0x000000000000000000000000000000000000000000000000000000000000001b","0x9e49368312a610e1b59de9f171d03178c159cfe73dfe9c10b5202bbe67cd9eab","0x000000000000000000000000000000000000000000000000000000000000000e","0x03e2ff5308e20dacbd485b2d059815970e9b4b3c639b0aa5be885878d677109e","0x1dcff9e2b0cbaf7fb3cbcbd96f31c186b6901f9ebfc188ceb23d20747fcf6918","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000014","0x7b577e76552893e772ee3df90920319622b8d8bb5d0f05c3a2fcaef264457fb5","0x000000000000000000000000000000000000000000000000000000000000001a","0xf6f889e00f165c05cfe0e9c32a9e24ba92657b3b48ca61cf3dba042c632ca006","0x2e941662505a0bb7707ee19bcb50ae11ef209818a240452e985e0785fd5f4de1","0x0000000000000000000000000000000000000000000000000000000000000011","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000015"]},{"address":"0x7e36a54de4a80c7eb0dfa19d49970859342b6088","storageKeys":[]},{"address":"0x6b175474e89094c44da98b954eedeac495271d0f","storageKeys":["0x04db8a9a7171fb7593380b2a759860db96c691037dd1730d6df126c8dc6b476d","0x4fb38d85aff6908084a3b22b658c7c8245ce26407000e572dd57d3f7427294aa","0x087cdfc3f958d19871f77e823f3d49c055bfcf2784ad091abd6711952805b743","0xc526f387ba5a6e8a3778c35b502ab9315ce32a0a38fd2aa5297ebd8a096dbe09","0x3f3fa626cadeb84e2412c7f44d63d161dc1bd7468fa15ee7dd343d73a77ad976","0x8d6dbee51e7ed8c69be5b5843bab1a532f2138afc261fa876ed411944ffc11c0","0x7c084f6f66f1854b5ac1915798e31bad160857bb415bd586c5b093ebc7437f78","0x681168423d09613df05fac62ebf0625d4a0cdb34dd5731f45b107a94a0a954ce","0x995f3b129dd3291868ddb9cf202c75cd985227d50e309847fbab0f8da403b19c","0x54e6dc5f26999e6ee90a8e4bd6e25ecf0c1ed7180477980112bd9b489b59ef69","0xb96c55d5df378893c8064f21edccda141cbffec5b2218d2455c9bcf754ab2fb0"]},{"address":"0x17144556fd3424edc8fc8a4c940b2d04936d17eb","storageKeys":[]},{"address":"0x390b355bd20e18157943ed4deaa365c9a14f4cec","storageKeys":[]},{"address":"0x84b33840d8b6aecec69dc5737b56d38111f4dfc2","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0xeaa2691fe9c8cef93ccbc1b4b1e4f3ce02678942","storageKeys":[]},{"address":"0xe2f5dc546468219d690491b01528c435c086c479","storageKeys":[]},{"address":"0xbf2d58698a8a215f868cf24baba360c77266b466","storageKeys":[]},{"address":"0xfba175fe8169f08eb02239ca1b235a8e13415204","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000011","0x1db31a77d83515140733d92a828edff20a22f4b08a586faf486be16e18e3144e","0xc569b77ac39a04580cfd54b731b92b0002c2cb0857b90e43466ce272b46be61e","0x8530a0d4095c64814ef3458d8dcf20cbf180a0b68ebbaa499bd7af70a4cc7acb","0xd9d4794f24ffd60edd516aca85cd25e5e064e8754738553806b1de0375ff3d91","0x293b3e8f34d466a275078c9f806ab730f2683086814edf12bfb0d4f76f57884f","0xee722d724c89bf250dae10049726c7ead1476357b09d9efbec404caf9ea81e72","0xd66a6bd151c33df771e54063f5b6f6d5270eb4da11cf017c73de72cbb54c303c","0x000000000000000000000000000000000000000000000000000000000000000b","0x000000000000000000000000000000000000000000000000000000000000000e","0x1a5ac45ce58dd08a4f8b471882e2e937695c44b1b634d24cee7aaf8f478ab34b","0xb368d2fca3322278dbe10ccc2e6a97fa6b8e57dcea66c992783d3d66b26bcd95","0x3bdbca05285fc70b92d87d8c7b9e489bf0787dc47751ba4fb70ff7a65e9bb3a2","0x000000000000000000000000000000000000000000000000000000000000000c","0xdb14bc50192e7ce116773e9c3286486770cc4da887084f2a309d4a898c510760","0x3243cf6777a245db124589859667a703d4591bc88c4202c218e4fc7b83c0201d","0xe63003dfdc2ad53f193d4c003e5ea6b8e25cf2ba83ebc2e44e14579c0e18ca31","0xf2c535f78bbf70e8c137acb4e29e2f986545c919fc7214c8b5be774e28c99ce8","0x736fbedc083efaa4e5193d759f0f4fe1e6b457d2fef84f4c9bf186a414f0fccb","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000014"]},{"address":"0x2e603c8b383cc2da79d9562c5cde43368a273c70","storageKeys":[]},{"address":"0x35dd2a56be07c524fe18e1b9bc70c3523412591f","storageKeys":[]},{"address":"0xb66caea47f6837b5a6c8903d9c4add6ee364ce88","storageKeys":["0x63410062b002d55c3fb0530eb3c8aab04c5014aa81e71894d8f348e476002d02","0x49d7d0ceb37c146d7a17fb8b8e0a7193c74c349205bd131d220bee52b16a802b","0x78a7534cff2eb171df0b13bafcb2e4d2c049f4c9c3937ce0beee553cd6c9cced","0xbc0bfe0391f5edf76cba199b3698a8564bf8cdbe6f295db6e71646f43933e251","0xefbce2a8ff2d467e309d9248a4b22cbaa3390df6f9ad4715abf30f5eeae1d193","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000016","0x071b2418c6d1ea596b22ae88f167a63abd3e6ac2445d94841cc5b382f3d895c1","0x59556234a3eb3e6887ccf5e1b8ab3b8125968105007a19b2d9468be8b6c04d23","0xd46460e0ec4be8776950adcf76016e20c1ae55682b188e96bab57b3cdf10a223","0xd9107ffbbefa9a6d40a901247f7d06507b70334ffb39810213af00e69ef9b388","0xe52520f11be5c5ce5af0e06272eac9767c9dd1aa8ce1d6080b7608a2e893a3d2","0xfbfe3afd500acc83f4067ce056512b3e90b74bb147ad84f7edfea8ae1b748f13","0xe52520f11be5c5ce5af0e06272eac9767c9dd1aa8ce1d6080b7608a2e893a3d1","0x4868b5b24a5f92abef98244231e6896c8727f0e313fdcf0b4f04fcb61de21a68"]},{"address":"0x26efae46a0a71254fa6bd591645366cb94df58a1","storageKeys":[]},{"address":"0xa2f1f3a93921299f071a002b77a5f3175492bc6a","storageKeys":[]},{"address":"0x4c6199d5b6b78b3c55fb76c99eaaf2dd2b3637b5","storageKeys":[]},{"address":"0x3772f434d796a1b974e9b2cd37055a075f3450be","storageKeys":[]},{"address":"0x60594a405d53811d3bc4766596efd80fd545a270","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000067","0x0000000000000000000000000000000000000000000000000000000000000068","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x608d093ce9933575d78c0796ab9cdc4f1c4212394db9b5269ffa8fa22c833167"]},{"address":"0xd7e7812eb4b8fd2ac5ca513462f4ba12ecb53668","storageKeys":[]},{"address":"0xb8ffc3cd6e7cf5a098a1c92f48009765b24088dc","storageKeys":["0x8e2ed18767e9c33b25344c240cdf92034fae56be99e2c07f3d9946d949ffede4","0x54b2b2de1ae6731a04bdbca30cee71852851cfcd3298aaf29f4ebff9452b27ad"]},{"address":"0xb83d1d5f27a8fecdb558ddae44f2f5c8745e144b","storageKeys":[]},{"address":"0x1e0049783f008a0085193e00003d00cd54003c71","storageKeys":["0x73f81e05fe78bb9c03fd7e2026f0245c29102ff947eddf738e68a7faea7f48aa"]},{"address":"0xde67d97b8770dc98c746a3fc0093c538666eb493","storageKeys":["0x4d6bbdd6edd059f5ed1660e5ccd93b3af967cef7cd64982664490e4cff130c72","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000015","0x297181afc54b2ba549f189851a59f18fea399e60347a4e41e094460f6a2e3e34","0x35528b0820763386b11dfb6410f172487a972e4592d19974cf10cbec94c9ab35"]},{"address":"0xb517850510997a34b4ddc8c3797b4f83fad510c4","storageKeys":["0x16c3acdf1215b5b570b5070dd2e9093e7da84bab9412de668f6703a7faf39c85","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x00000000000000000000000000000000000000000000000000000000000000fb","0x00000000000000000000000000000000000000000000000000000000000000c9"]},{"address":"0xa8eb808142ba183aa9208884cb036dfd72565358","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0xae7ab96520de3a18e5e111b5eaab095312d7fe84","storageKeys":["0xd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b","0x4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b","0xe3b4b636e601189b5f4c6742edf2538ac12bb61ed03e6da26949d69838fa447e","0xe6e35175eb53fc006520a2a9c3e9711a7c00de6ff2c32dd31df8c5a24cac1b5c","0x9f70001d82b6ef54e9d3725b46581c3eb9ee3aa02b941b6aa54d678a9ca35b10","0xa66d35f054e68143c18f32c990ed5cb972bb68a68f500cd2dd3a16bbf3686483","0xed310af23f61f96daefbcd140b306c0bdbf8c178398299741687b90e794772b0"]},{"address":"0xf40442e1cb0bdfb496e8b7405d0c1c48a81bc897","storageKeys":[]},{"address":"0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24","storageKeys":["0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0xf29cdd059219383448e8b463b31f88f5e17e69c1c7262cd3b2b0c57147c048d6","0x500ef09e5ec8999aa7b0386488d1a60d5cc53034ca9dc2c8d68511efe382ef29"]},{"address":"0x1a8f43e01b78979eb4ef7febec60f32c9a72f58e","storageKeys":["0x92adc54cfc27c30164aeaeb7c83bf6f1b6463b994636e51a9794110a2b7e52dd","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000009","0xfdae37e3434e79028be248d41b9fe7ae364004949a54682800cf6ba4f6a21972","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000000","0xfb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8"]},{"address":"0x704ad8d95c12d7fea531738faa94402725acb035","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x950b9476a4de757bb134483029ac4ec17e739e3a","storageKeys":["0x46a6e53d551b9833625df9c3a93d8af4eed716592e9724af536dd5ef5f4d9171","0x3aff6944490d4628833f7b03ee999b6e6948ffcfba03d269cdadc1875a2e121f","0x218e215545a5505f300b7929ebaec4834475afd6f0ef424ac17d535fb2f7c66d","0xa4e0f4432e44d027a7b3f953940f096bca7a9bd910297cad2ba7c703c2b799d3","0xac375bcb880242328180c23d4a918023a12a7caf7cf12b8c4074e4a3f39900a0","0x0ca380e29b2a92f4cecd71f571f5161c9e98972ab0de316c8c227b4837ef115b","0x106c30a0c68ea09535b7105caccd49caa649caa256e85d87cf2098d10f72d4e0","0x7fecc9f0b925868a8c62ee842da0498074146a036d84a1041d9b5286786bbbf3"]},{"address":"0x80c67432656d59144ceff962e8faf8926599bcf8","storageKeys":[]},{"address":"0xf326e4de8f66a0bdc0970b79e0924e33c79f1915","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xb23360ccdd9ed1b15d45e5d3824bb409c8d7c460","storageKeys":[]},{"address":"0x9e448f9eb9bad39a0db647c58d8869694183955a","storageKeys":[]},{"address":"0x264bd8291fae1d75db2c5f573b07faa6715997b5","storageKeys":[]},{"address":"0xc7c12de0a55e7ff69a4f2f1e6cfcd576de46026f","storageKeys":[]},{"address":"0xb4babdf623a35b422bfacf05c46d0d93e0d9ae15","storageKeys":[]},{"address":"0xd0c3a07c337c5f0adf508c0cc57d5e5cac743569","storageKeys":[]},{"address":"0xdea04ef31c4b4fdf31cb58923f37869739280d49","storageKeys":[]},{"address":"0x71fd862131bf9f2a5ab9516adec6d50158fae290","storageKeys":[]},{"address":"0x88b3fcdf182bd1ed3c26c7708f1506530239c1a2","storageKeys":[]},{"address":"0xae2d4617c862309a3d75a0ffb358c7a5009c673f","storageKeys":[]},{"address":"0xf1cd4193bbc1ad4a23e833170f49d60f3d35a621","storageKeys":[]},{"address":"0x2fe4516fb4765f98ca46c9df28117c778e360ee0","storageKeys":[]},{"address":"0x427e25f2b424acece4bd84373c6dc82d053e4b3f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000009","0x590aab03823cbfe5677ac1252eb631f53fed2bef0fa2c2020d3a50ca1770470b","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000000d"]},{"address":"0xdb5889e35e379ef0498aae126fc2cce1fbd23216","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x7effd7b47bfd17e52fb7559d3f924201b9dbff3d","storageKeys":[]},{"address":"0x178e339e943b0f5e335d2eeed6705e2d9f41d0c0","storageKeys":[]},{"address":"0x4585fe77225b41b697c938b018e2ac67ac5a20c0","storageKeys":["0xa696a7b979ad574bf4e83f51a549d5d6736ff47df8edbe133e71a85594b49abe","0xda68a2b0ee7b27d8019056d24355431b45445782c03a0d5406e6b848a631a249","0x3867a2045a42206490794a81e52a245b12e19358951cad31da7027b2e23c0840","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000105","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000106","0xa696a7b979ad574bf4e83f51a549d5d6736ff47df8edbe133e71a85594b49abc","0x3867a2045a42206490794a81e52a245b12e19358951cad31da7027b2e23c083e","0x3867a2045a42206490794a81e52a245b12e19358951cad31da7027b2e23c083f","0xda68a2b0ee7b27d8019056d24355431b45445782c03a0d5406e6b848a631a24a","0x0000000000000000000000000000000000000000000000000000000000000001","0xa696a7b979ad574bf4e83f51a549d5d6736ff47df8edbe133e71a85594b49abd","0xa696a7b979ad574bf4e83f51a549d5d6736ff47df8edbe133e71a85594b49abf","0x0000000000000000000000000000000000000000000000000000000000000002","0xda68a2b0ee7b27d8019056d24355431b45445782c03a0d5406e6b848a631a24b","0xa00e9f45e9f0c328446d13a90db1b8ff531c4946ba6a4294a1ec03159cc44b19"]},{"address":"0x683fd5839bf6711be73e6cd5aa4c805d032b96f7","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0xe0f63a424a4439cbe457d80e4f4b51ad25b2c56c","storageKeys":["0x4a885becab37135dd1bb6dc512c3ddeed605266f4d312ff6362f618ca16aed86"]},{"address":"0xf95b14ee10bd94ef1ab15da46ff0d69bcac5598e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0xb2bc06a4efb20fc6553a69dbfa49b7be938034a7","storageKeys":[]},{"address":"0xb048ed71007ade3b3172bc6d95781833ffa3aac5","storageKeys":["0xf92893360e87d38188b7b11fa248b88db93df7bf196c713536fab10a7c72dbc7"]},{"address":"0xa6cc3c2531fdaa6ae1a3ca84c2855806728693e8","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000056","0x0000000000000000000000000000000000000000000000000000000000000004","0x94b5af2648d8bbf7f61cf41232d677e208c2ba32ec73634db3281961f4b1b51f","0x0000000000000000000000000000000000000000000000000000000000000055","0x94b5af2648d8bbf7f61cf41232d677e208c2ba32ec73634db3281961f4b1b51d","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x615166b9cbba118384f9cf85d8ef8b07ed80d030b17f0ee6aa1bee659db2e942","0x615166b9cbba118384f9cf85d8ef8b07ed80d030b17f0ee6aa1bee659db2e944","0xb3767fe4d30c6b9e60049d3282750cb051a11ac76538d7d1a87ca17a1227c17a","0x615166b9cbba118384f9cf85d8ef8b07ed80d030b17f0ee6aa1bee659db2e943","0x94b5af2648d8bbf7f61cf41232d677e208c2ba32ec73634db3281961f4b1b51e","0xb3767fe4d30c6b9e60049d3282750cb051a11ac76538d7d1a87ca17a1227c17b","0x0000000000000000000000000000000000000000000000000000000000000002","0xb3767fe4d30c6b9e60049d3282750cb051a11ac76538d7d1a87ca17a1227c179","0x94b5af2648d8bbf7f61cf41232d677e208c2ba32ec73634db3281961f4b1b520"]},{"address":"0x00000000000000adc04c56bf30ac9d3c0aaf14dc","storageKeys":["0x022b6f42361329fd836e22b5c31caf61e5478234cb6b15081bdb43d6f1dce6f4","0x539f613f5498b05c84ed7035772e0c3bebb1ad2d602d9be516fd1c6b588b56d3","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xe0bf1e7699410dc28a6473fbe92441b933ac7b33","storageKeys":[]},{"address":"0xae93e3f7752207c9dce8b6702cd14599a333a2ae","storageKeys":[]},{"address":"0xc7c53760375530e5af29fded5e13989325299382","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000016","0xcb00161c7650001830cf85bb4e8b9beff8b0fcaddc915b258ce8987aca5dd2e6","0xbda2b1a2a3e35ca431f3c4b50639098537d215591b9ca3db95c24c01795a9981","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000d","0x0000000000000000000000000000000000000000000000000000000000000013","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000000b","0x000000000000000000000000000000000000000000000000000000000000000c","0xf365b8316b064b730f6cf89a512b8e5e020bb7f2feb79299834dcdd73a7a6dcc","0x000000000000000000000000000000000000000000000000000000000000000e","0x51d155e8243cd6886ab3b36f59778d90f3bbb4af820bc2d4536b23ca13814bfb"]},{"address":"0xa79c2ff668e705c67addeddf31bbae68649bbf14","storageKeys":[]},{"address":"0x44affdf87abfb1dba08e444141bd21b4380fa35f","storageKeys":[]},{"address":"0x5aed5f8a1e3607476f1f81c3d8fe126deb0afe94","storageKeys":[]},{"address":"0x75e89d5979e4f6fba9f97c104c2f0afb3f1dcb88","storageKeys":[]},{"address":"0x5f607daee0670a2d1845c3bd2ee785e6cf56d8f4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x613167fba619ff20f4a3bddeeab8d37ab58490ae","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x2189af69914090827b39f477d39f67203c24566e82392e5681d00d25df09c1fa","0x0000000000000000000000000000000000000000000000000000000000000097","0xdf7c8d17722358ef1227553d8f065865328352819b18fa48befdedcb4ca45a60"]},{"address":"0x77e3e957082ca648c1c5b0f3e6aec00ab1245186","storageKeys":[]},{"address":"0x1e6896cab8e257259da4ca417c8394388ac00247","storageKeys":[]},{"address":"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf","storageKeys":[]},{"address":"0xac725cb59d16c81061bdea61041a8a5e73da9ec6","storageKeys":[]},{"address":"0x1a1fdf27c5e6784d1cebf256a8a5cc0877e73af0","storageKeys":[]},{"address":"0x5f1ee29361206f1a129e808736f11598356c6031","storageKeys":[]},{"address":"0xacde14125cbfcc67748493970b8627591c3e5bb6","storageKeys":[]},{"address":"0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67","storageKeys":["0xe40d3ae7fd0bd55e59bf884b9ace5f6033b7677a86ce682f78aceee7d91b5ef6","0x29bf3886dd698f1aa9baebc2edaefbf66002dc935f7e18dc4c3dd04a82a1c337","0xc35f240c1c9bdd9967b90a65ab972af57d57fbc19a964cb938b278c5c131c297","0x9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb72"]},{"address":"0x4f91ad1a0397b763fc653b4cfe4f836915bfcd84","storageKeys":[]},{"address":"0x696cfd63f98dcd1fea2d6bd27f3cf85c2007a2fd","storageKeys":[]},{"address":"0x8b63b3de93431c0f756a493644d128134291fa1b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000004","0x0e82e3e1b9d5a0116e5669200b5680c00380f5a2dab56ade7031bbf68c4ccff3","0x7ea31f258d6f8210210222b24345878b497bc85e6020c774d6cc20a576996b4a"]},{"address":"0xc7d5b566312ec222b414b5cfc838bcc42da0069e","storageKeys":[]},{"address":"0x70e3849741f66d2805e41a5b63e16e84c1e4a307","storageKeys":[]},{"address":"0x7aa4d942664b5234fcd134c9187abb33b5e2e409","storageKeys":[]},{"address":"0xb504035a11e672e12a099f32b1672b9c4a78b22f","storageKeys":["0xc6639ab8cdce885c8f0000d455407dbabbaf3b9e9007da6f8c17d29de6bcb1c5","0xb8b42861fd634235fd711526bb36fce5cc0a33e74a143ed227110e4529d92373"]},{"address":"0x881d40237659c251811cec9c364ef91dc08d300c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x684fdb4b219d1c63474e6c8e4dc8c2611de744d4aaa2b78c4ec411ebb6ba9756","0x684fdb4b219d1c63474e6c8e4dc8c2611de744d4aaa2b78c4ec411ebb6ba9757"]},{"address":"0xea5b523263bea6a5574858528bd591a3c2bea0f6","storageKeys":[]},{"address":"0x5fa60726e62c50af45ff2f6280c468da438a7837","storageKeys":[]},{"address":"0x47a799b28ecdc47349c50e72d61366eec97d3b5e","storageKeys":[]},{"address":"0x59354356ec5d56306791873f567d61ebf11dfbd5","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x4a6f485c1c32cc07b41a962ff745e1d2a15f32520f92181d93f06ac057458486","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xcaa79bf8b1d00bf3d4f6dbec6221955871c04618","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0xf416def3a5a22eaf3e1fc3b98b393f3028381ddbd4f36fa689a624bac7fe426c","0xc964205cc068da10d7cac93a3be41fa1744560e88f6a7b0dd655fd2479154352","0x31918e36d6f6221ec8a7be287da50275918cda8b12ad4b8fa59a2836a35969cc","0xe0add72c4f545437ce3b7ad8c8b05f92acbd685f4e42b6685dd483a1ce862f1e","0x60f0e0e5c8e4388e81d20c61cf5465c82042f80a32def57804152f4c71d7e3c3","0xee1019bd099648c445a31f9961ee9089ce36583414f597d08f6deba971616f27","0x0000000000000000000000000000000000000000000000000000000000000012","0x01c1e71c97b2251e06fd465d619f598451d15e9f42d08d86cc907038cdde5662","0x0000000000000000000000000000000000000000000000000000000000000014","0x7883b676ceb098c43b0cb5d1195abfcc8a4d6043669eb6043f622849d207993c","0x811f77293405650ce95d226c5d89598584b7df80416299f52f704ae6ce31012d","0xeea18d0f317f5eeead59e52fdb0579a32b3480e2a13505417495a3dd19d38c04"]},{"address":"0x2b33cf282f867a7ff693a66e11b0fcc5552e4425","storageKeys":[]},{"address":"0x74a8acdbeb7638e0e65d58c0db49c70b2bc849c4","storageKeys":[]},{"address":"0xb0fe3d292f4bd50de902ba5bdf120ad66e9d7a39","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000003a","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x000000000000000000000000000000000000000000000000000000000000003f"]},{"address":"0xb780f8b02a7dcddefd2d53c82709c389618d9503","storageKeys":[]},{"address":"0x3a23f943181408eac424116af7b7790c94cb97a5","storageKeys":[]},{"address":"0xd74a355a52fd198abde16745c93f33dd3889e05d","storageKeys":[]},{"address":"0x73ce7912501be775a693fb3a641eca8216b18b13","storageKeys":["0x20de30300db9b2d46f45ef3798c883c649ebfb03953fa78198d91713f3132be2","0x0000000000000000000000000000000000000000000000000000000000000010","0x811ed8545df87e67ad2ee9dd5566d9aec2bfdaa46d98de545284f0229cf26b12","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000b","0x5c83d9320a9a25da893c14228f60de0a08c6b7bb94e4088eeee36c1b9a31c4a4","0x0000000000000000000000000000000000000000000000000000000000000000","0x5150b13f294230203b0c9f0dd5ffac4da0e5829a228b6c848fe1712159784722","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000d","0x0000000000000000000000000000000000000000000000000000000000000013","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xa964d693cd45fcbe4303524e0efe0988cff5ed08","storageKeys":[]},{"address":"0xf0c775c55aa67db748de84c051fcf1e7924606b3","storageKeys":[]},{"address":"0x549efb3c8365f3f222aaa44d9af7894cdafff083","storageKeys":[]},{"address":"0xe41d2489571d322189246dafa5ebde1f4699f498","storageKeys":["0xc0ec8fbf02d70b2873f5a76f503e97bd1b0ca8048ab517fad231214a74ebe459","0x393d76fe3f9d83a292390f16441925949594ab376ce97fe64775617375b6d0c1"]},{"address":"0x844bb374168e274497eb400fdfc84c78080a0273","storageKeys":[]},{"address":"0x24f79d5ea2baa92c4a0291fe6f490c02655114e8","storageKeys":[]},{"address":"0xaceb23f3d96a2e3be44306d9e57aaf9a0d1ffd74","storageKeys":[]},{"address":"0x3e9dd8088fe88472621f67ac502b784f0d852b71","storageKeys":[]},{"address":"0x2c169dfe5fbba12957bdd0ba47d9cedbfe260ca7","storageKeys":[]},{"address":"0xe7b67f44ea304dd7f6d215b13686637ff64cd2b2","storageKeys":[]},{"address":"0xecaa76cd531105d7b27af3102a00cc3d1d77d668","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000013","0xd5251b888f084a0847b74a07fcec92d4a4ce5607ea4ff372881aba9635cc62aa","0xeef1d7cfa8ee403eec37437a0a0bd7e40cf2168a6508c0c690027ff5c9288fb9","0x1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22","0x1cb2290fa01bc06b898e24a9564af4f4a9fe8d4a370d5098fa07a0c52f0c3736","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000001f","0xce75195058e0cb3f19bbfda2061c7ed94ee4c2ef2ffedc737b2e7da02abb9d66","0xcd770edfade3f638a93e2d78005112fec7cb102f9668d0111ce229d3496d639c","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000018","0x494d4f6587f560916ea5a74b67a902caebf1439c8f83249c0be790c7288aee98","0x6aa3618f05ff6ef37a258b1fd4590b93f62d76684ba0bb794553e8a831b43cc2","0x0000000000000000000000000000000000000000000000000000000000000015","0x000000000000000000000000000000000000000000000000000000000000001d","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000004","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000005","0x3cd921fc8a9ca831dd992deeae1b337631482a0c2d9b444fd8398190e368e947"]},{"address":"0x48e65404141b7e592f87cbf20684187c70b12c47","storageKeys":[]},{"address":"0x986b5e1e1755e3c2440e960477f25201b0a8bbd4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2","storageKeys":["0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf27","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf29","0x6f7b2d87bc3f6727e3e7572341b4472281e770632f9f6d23b28495d1c2d3ab33","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf21","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf26","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf28","0x000000000000000000000000000000000000000000000000000000000000003b","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf24","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf25","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf20","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf23","0xed960c71bd5fa1333658850f076b35ec5565086b606556c3dd36a916b43ddf22","0xda23f9312458e5c4b201ecaba12aec89363f9010f101f0ecfd7be536102dc415"]},{"address":"0x4d73adb72bc3dd368966edd0f0b2148401a178e2","storageKeys":["0x2429e30b0558465f9e99f43765004d8af6f11ed28641cbf30de0c5eb8e7078f0","0xd9bf61c12ebbfb2c6a6a9998b18894eea69de16c4d1e199a1212f9a3ff50b863","0xa9966cf297886811b8a32882dd324f23f672f5ccd6bf17ebe1e72a723e2f5ade","0x0000000000000000000000000000000000000000000000000000000000000003","0x75a43ba0fdc2854916b0573b104f8f3b27e441d0274a726d97f7bafe2270ecdf","0xa0a8803ec561bd7e2c9289f2be2e311554d19ddc78e9804ddaf997fd66ed0bd8","0xa0a8803ec561bd7e2c9289f2be2e311554d19ddc78e9804ddaf997fd66ed0bd9","0x75a43ba0fdc2854916b0573b104f8f3b27e441d0274a726d97f7bafe2270ecde","0x6aa4d3f39b808918ebe9bc24c6a47543ee239542e25e34b0ac94a4b83cc1cd1f"]},{"address":"0x11b815efb8f581194ae79006d24e0d814b7697f6","storageKeys":["0x00000000000000000000000000000000000000000000000000000000000000a5","0x00000000000000000000000000000000000000000000000000000000000000a6","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x32d80bb380a6153715a380340a591610b4f5a62ca0809dce09eefe0e7c37ea7f"]},{"address":"0x79599c159eac39de4488abc0bdc9ffd48ed85e99","storageKeys":[]},{"address":"0xcdf7028ceab81fa0c6971208e83fa7872994bee5","storageKeys":["0x477cb59794ee11549015f55278236ff7c9b3cf854eef71fec701613efcb8d118"]},{"address":"0xed9cd4d668203b53a9b4f99e1358301126568043","storageKeys":[]},{"address":"0x4b715298676d294fb6b8bf02bdca969e4853f1b1","storageKeys":[]},{"address":"0x737e8a8b5f36a388638285d558f80af7fbcecb8a","storageKeys":["0x5ac6d4be4e02314ce9abcf7ab6a6d1e10a52c7b923194d53cb1e5c6c8a1a3826","0x3e76333f6dd7c6d0ff194a0d81288cd3f1f017a152767ba83882f5195d06c97f","0x4f57d121fc3719d837fa55d59a719dec9882fb0e1404927a023889b47cc699cf"]},{"address":"0xd257c132a1a9dcd89b38ca489c271af1ad7a4485","storageKeys":[]},{"address":"0x05cdb1526f6e224e02919a4c018d9784ea25eb3d","storageKeys":[]},{"address":"0x2c9c6a1931475f759f74dda373243e14dcb3ecfa","storageKeys":[]},{"address":"0x12e7d70dd369b4a7f649d5dc2e655730b417ac5f","storageKeys":[]},{"address":"0xcce6fdec93e5ea55c5cffb44a0fbb711eb31798d","storageKeys":["0x5589980fb8d19fe7ffe6b21a7b452f3fd3787159f43ecf3d5aed394b7c132a93","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000b","0x40481169930ceb68601592e7fe58ca0f752959e58008d08277d97c6f321661e5","0x0000000000000000000000000000000000000000000000000000000000000000","0x7344fac072f5f99fba2247dafd1d5ff0e63b1a0089fdba04ee09a9ffdab04d7e","0x000000000000000000000000000000000000000000000000000000000000000a","0xfdae37e3434e79028be248d41b9fe7ae364004949a54682800cf6ba4f6a21972","0x0000000000000000000000000000000000000000000000000000000000000006","0x858275a96181a5cdbbc5e3eced9588d35b9894188ad73ac8c3b59657c100428a","0xf92893360e87d38188b7b11fa248b88db93df7bf196c713536fab10a7c72dbc7","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000011","0xded24ebb91cc2e4e7cd0b06373d908ba271d2e825a79f538f6d751d40ba5cba6"]},{"address":"0x8164cc65827dcfe994ab23944cbc90e0aa80bfcb","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xad55efbb0ebf9f958bfa260d560c49e9831d25890cd7f7560cbad0d761c0610b"]},{"address":"0x142a774e8b52550e88e196cedd7a5835acb646d0","storageKeys":["0x6dc3cbd94c82e5fba3d7e32fcf56f0d6df40bc1d5c6e919ff3d61e8b089a9664","0x0000000000000000000000000000000000000000000000000000000000000021","0x0000000000000000000000000000000000000000000000000000000000000022","0x5f4385108fb3dccfeefba38cb57854d144ba2f9a81faef92ec53a8ce1eb9f1a4","0x0000000000000000000000000000000000000000000000000000000000000018","0x000000000000000000000000000000000000000000000000000000000000001f","0x000000000000000000000000000000000000000000000000000000000000001a","0x6990df4a0ac485ba17edd532d189268206ac41794061f2ae2b8fc72bd569e3bc","0x000000000000000000000000000000000000000000000000000000000000000b","0xdd6a3d9a9762a5e3a12b74d748e0aa5b1dd9b11605de083a9070b278002c2345","0xc784b38476a5110bb22151e095bede8ee50b4f72043b8b69a0a3f40dd7eaf995","0x24f1c4334087a2f469f06d62ba9c539abb268638212ae68c1d4d233460b7034c","0x0000000000000000000000000000000000000000000000000000000000000016","0x2b67638fd11c7a0062f0ea005a92b6a5652f987e7733223ece4e95598b833982","0x000000000000000000000000000000000000000000000000000000000000000c","0xea012beffad725ef8d1414e6930e3a37b9bac1a1fa2e07c7e3ffc268e883278e","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000020","0x175092dc81c37f277e4a216d01f8fced7869c858591d7535eff46e16fbdf2d32","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000023","0x0000000000000000000000000000000000000000000000000000000000000017","0x3ebcf115573435053f9a659d8bda6bc1bd828f25806851fc1741ebcb3ba3c9a3","0x000000000000000000000000000000000000000000000000000000000000000a","0x9f4e0624e944c7635133b875955ed15d1f9523f1abdecb0e9d6114a5984fbf70","0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3","0x0000000000000000000000000000000000000000000000000000000000000019","0xc81b96ca77ab138faafd2117088b0ccdfadcf8fad69b1c71a4ae113743367c7c","0xd6bdaeeaf7955cc6c862e620a7b9562cf54c3f47b208932e5eb43d3d5bbf3ba4","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000e","0xd2cf9c6e271112635ad6a2e14fba42fe9bfdc4e455d0c255dfa1eb160fea8f79"]},{"address":"0x09e050f40b3ccfaa568680bf0e459cf8dfc4157e","storageKeys":[]},{"address":"0x66a71dcef29a0ffbdbe3c6a460a3b5bc225cd675","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000008","0xc0c88364226e82fccafef42147d0cefbec72c096845af935f0a15898ffeb1aab","0xd80800ac9ff94760afd686e4dc2d6e3dcabc83f50634fca540bcc56a17eb644f"]},{"address":"0x6eccae385b8e17721721f8a1446ca73b94e14aeb","storageKeys":[]},{"address":"0x9476f8fccefcee23481f9fa5bb5d8bdf1f145f5c","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xe28b3b32b6c345a34ff64674606124dd5aceca30","storageKeys":["0x4fb110a88670106c39ba0fa6af41a3b0011447ffccfd709a88378934f577b5b9","0x75bfc36bfa90cdd40f14b94ce404dabb9f11d6876f7e15d94f0eb3e432185442","0xc7414059b081b5da51ec951d55a9324e37609fcd31865abc1b287dece56645dc"]},{"address":"0xef9080ae61c13c8d389b1811b5708fb363f39be1","storageKeys":[]},{"address":"0xef08a4d86a274584f744cd96a0b544898366f42a","storageKeys":[]},{"address":"0x27c334b79a894d76ca09f7cd1a117c7788dfc9ff","storageKeys":[]},{"address":"0xe219a14e355c1cb3f43594655a63488da154e8eb","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c","storageKeys":["0xfac9df15455c372aa04c1e56d8d94645d6b43d1e518ab88852e3033e8316251a","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xb9c5c39b5422df6e396faf10074fa9ea79b4af99fc4ab2bd674877e2fe84cfea","0x0000000000000000000000000000000000000000000000000000000000000036","0x0000000000000000000000000000000000000000000000000000000000000039","0x000000000000000000000000000000000000000000000000000000000000003d"]},{"address":"0x3466bb1787fd839e98453b707247ec2182f21c3a","storageKeys":[]},{"address":"0x92c2ea2fafe891758da0ed2ec2978acf1d4162fb","storageKeys":[]},{"address":"0x752ebeb79963cf0732e9c0fec72a49fd1defaeac","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000004","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x4dbd4fc535ac27206064b68ffcf827b0a60bab3f","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000033","0x0000000000000000000000000000000000000000000000000000000000000066","0x0000000000000000000000000000000000000000000000000000000000000065"]},{"address":"0x360fcfdb65b27ee8bf419249f3c81a98dacc8990","storageKeys":[]},{"address":"0xa0639194f3ec8ca873b29cda35bd40e5d58c0903","storageKeys":[]},{"address":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","storageKeys":["0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0x41730cfa8d2ce1ba1b00d3075cbe281ba1d82bd319f5a46c23b6ce267ca09fff","0x57d18af793d7300c4ba46d192ec7aa095070dde6c52c687c6d0d92fb8532b305","0x6375c028b85f0932b14a7d731820ad424bf97ef041478b336c5aa6ae1cc9536a","0x31485941e2ae2c65d6b3801f4ef00fd021a4398c1e864b8e06b6d12474a00046","0x678727a8e2288e3482b05b0bdadc40d88915d9389c43d9b51a4ca331325d28a1","0x644da698052ca806f7482115383dc7568e2e83062c1acee4505e8ba9e0bc586d","0x7ae84188dad39ac65698da6b247c2d7e504146b8fbe71a97d078fbb717de2d6b","0xef9aa6e78baadd9fa11efc775ebe24781e6dd67d28095a72c3297161bfcd60c2","0x432807238216b4cba128073b3b484e3fcf57d00db8de027187c1c042eadf055e","0x82fc8338773fc4426092c36a88f1631578741710523a800748804783a20f57a2","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0x1ec4e3ff034654436090676552de103d2fc56a417d50a173971346df4c722f54","0xb374801ace2c02f5db0425ab5920a2b7ed1d5a00abbcd395fda7530ba1d666c0","0x56db3469fc9a9cb04bceb0c476dff5b6bceb0c8bbae1f5afacf1aa2ea3f54e32","0x4ac01ad812d5eac4698019823b7f6a507bc749124a4d82b1dd4c65e681cf7c39","0xa04dbf6d2c5c97758a4349e946774cd85f777c71336e93b1b6a55e23540779b4","0x0000000000000000000000000000000000000000000000000000000000000001","0xb6e478fd261351692c2fde70d34c4524b765362599337b83dc901944267e7327","0xaeaa20353bfe582a5362289abaea917959d6164741d3e508fbffe425c86f4aad","0xb1151b5f51c370d607b59e0034392dd388ea4cc8dded24ec75baf3df36983150","0x32aabe5d87581ea20da386c0272f0cfeb4ffd3e1520b843e63d95f6885c85fe5","0x4cd7297d874a4cc207b49596cea196ad5e86355c0be2885a3e38f238ac58b147","0xee61682ec263cf9ac626d5a9b0cd5e26edbfa98b5b368b540e65bd739c37e3b7","0xc8fac31b3a0f624c3c8b9d3731f19a160fe956fc08ce73a8eb71d93b044dac6d","0x3a3aec5717af62dfc0f5ede964a3e44cef7c5ba4453963ee6e3545ea9708690f","0xc18d4ff08a432753dc4c17af5cbdd67e25a3b29d92bbe5351b5fb0f6dd13b69e","0x6bd91fc796def7d7c1749500f210931bf5b3e9320a43a6f93ee41ee44001dfff","0x21bcf31c69d86fa40169c2eae710bca97372bf4d4c3eacb760f77048e805348e","0x73d637d229721ca538a0a2e9712eeef46a1889496c0a60f402b430eba28d4a2e","0xdf2d55c1c730751bd8d6ae9dd7f9119f5a3e768a8d42095280f33a24c681840a","0x5a39ffd580bbdbfa776c361f2c1049e2cd90a624d1d684c0d1cb0b254026c852","0xb32d74793294ba17c8da1fcbb8b1acea9f991830f9199dae7c9aaf973c38ea07","0x1f1a80db9a82d9fd4ea3322b7d2dcad52fb678229d487c4bb44e821a2544709f","0xf1c242ce12c9184b4b4566c6b26b3369df5c4937cd0b029fbc5f1b42ad7f2f53","0x1c04d27bf8d4776938551a82f41efc5bbc1f4ef2e02b660cddccd98e3d7126dc","0xfea107046c7bc4c4541e8a89f285b5920d226d60ade521e2341aa0d495e995c1","0xa62e24a23631140f20aac639aeed8206b56fabcd18a19242fda530cdb855c96f","0x9a434ef6696a19b05883323b0d4afad39d1fa7f6129229d28bc40fc2f196b5f9","0x4a243c1a59f9ff2138b2d322161d23c88708a10d04c0b64886c4f17d6676d2fa","0x531bc7e659321924488dbb9bdb03809af2eeaac7e550348dca6250fb67b82a6d","0xe1c5276fa12293fc2cabf8e1405950ad1e07898fd9f125e12298ee580270338a","0x368c3f5f03e5634b3e4381c9c3caac98f4d254c7027fd14b53436c90d060fef4","0x5cfa01b9a733d8746bc28fdd3f8992b7dd3bb6d323fe96a760fbd1b87ca3a2bd","0x9951e5c97f68238701a07028be91c5ba29bde0c65662546c454bab615c93f76a","0x11f4be56645defe59d18f308fb5a4acb077f963b56a2e58e6ab5f36c37abcd8a","0xf38289b9ebe269b557c627248e74eff04e2a6c6d0a0a0c99efbf27206076508f","0xccea43faabafcf2d6c9d45c7bfff0f39080f4d9997ad68aefabb9cbad3ef7ad3","0xcf4b1d382638e2c0bce0af1f6f9a3e11066694d52cdd94e5b8d8b000eb890f6b","0x645109e5be61e3aa7dc1268083df11ec36b1d104a7eb2ad98b0227c2c53c89b6","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0xf2d53313cb644399924bc7ac73566f895c847f1ba79f63bc95efa3f39ec7c40d","0xebeae371187d174622df7f8a288ff80e4bb6664e82ce8cc1314e472dc24297a8","0x24b194ebe2dc12ed2d76a865393421499cb672ee4a0f3852e43f352aeddf227a","0x15d7a43c3a595454a812f5c7659d47d83de319cbb3b9462a445aea0204d7875b","0xc2e5dd65d36511a675f00d2c1cfee442e90176076028f30f85ced5fcbc35afed","0x2272303eba5d14e16687cdf8936028c295e364a52d2f6814680f3354d926150e","0x2790889919ab683a93d4271d4fe15fc1be878f84b6b702f22794331803c5dfaa","0x4b50a38a45993764c519945acea2535b1ba5f00812efc53cb43fe562c1dc7107","0x0000000000000000000000000000000000000000000000000000000000000006","0xe1e8e837f640f8c0cc533d0677093f2e8654a263155f1424c1004aeb0ecc2f2e","0x3f21e98b4315f6a41937a55122e729f4fe6505f0d4547474cc1726d7797565fa","0x313c730f2ec3e43def05de20522ad14243cf73dcedf21ff92a305a91d8fbcd24","0xfdc89995cbbe74245a80717b755801d54bac6c4d8fabe11c20b8077b26245ac0","0xd62e6b349005d4c8dbe90fed5428be37aa7780692e2d7aa5c41c7d9d443f8411","0x6eb029972b9991ddfe975cd44c3c4b50801662d5fd1e86e48c5c695eaa780d41","0x1f21a62c4538bacf2aabeca410f0fe63151869f172e03c0e00357ba26a341eff","0x28c0947f463362aab09a2d7896ccc847fb7e52633a16b978fb2caf3db1a9b8f8","0xee684e707a1cc7536e15baaa0ec9d3b2f3545171d927deee96b65c00ab35a9cd"]},{"address":"0x8b95a9f4a6959cc8a12cbcdba98f02e04a2a7737","storageKeys":[]},{"address":"0x0000000000000000000000000000000000000001","storageKeys":[]},{"address":"0xd3c7d0f62cac0e02669ee9c78496620ab143034b","storageKeys":[]},{"address":"0xfa3e941d1f6b7b10ed84a0c211bfa8aee907965e","storageKeys":["0xa59ab7d88c42bca28ce2ab1c7d20d0a720ce487402893b0804e07d5bec8b56b7","0x16d1086c95473ebfc9232806c39a89701297a6443f9c19234e86fe346ab0c7b9"]},{"address":"0x4150b9603bd87ae5c1aecdf4aa348699af1754da","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c"]},{"address":"0x6426a195cc7199240d7b57989c2bcfeb677726b8","storageKeys":[]},{"address":"0x797a05dd6a8bfc1e1eaaa62e744d3aff197c46b1","storageKeys":["0x534b98ee165a1f5262bd1a73460a488085e7298387b6f32ab42fd67303f01c4e","0xcadc17d6df60323062c6ddad440f897f800f401d222dcd5f85be63bc3d9c8b16"]},{"address":"0xe85294725c941e875910728c141d1f4dc040ef39","storageKeys":[]},{"address":"0x53b1dbe96c04260214629e36540fb6f7db852483","storageKeys":[]},{"address":"0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce","storageKeys":["0xeeea55bf32804ce36029867ad77ef16d33e74d0d1361b89a2534a5c497f47caa","0x75bfc36bfa90cdd40f14b94ce404dabb9f11d6876f7e15d94f0eb3e432185442","0x63c8a87606e6b84a6868dcf6ddf505d107b8b7290e147cda8a4a40daa475dbdb"]},{"address":"0x3e0914fc2b3b67a476142020b7d6990d01ad234e","storageKeys":[]},{"address":"0xb430bbf4627b903cec745895aff1369898da7ae5","storageKeys":[]},{"address":"0x8315177ab297ba92a06054ce80a67ed4dbd7ed3a","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x584291d70ad4dde9dd8406c3f9db0464c54b9f80d25403cf7e0305c918871ae9","0x0000000000000000000000000000000000000000000000000000000000000006","0xf652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f378d470d","0xf652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f378d470e"]},{"address":"0x31bbea1796fdc8d1420aca89e80af923b6acbe55","storageKeys":[]},{"address":"0x94be6962be41377d5beda8dfe1b100f3bf0eacf3","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x000000000000000000000000000000000000000000000000000000000000000a","0x3c16d8355fa8e1c76dd6b21eddc4ba74efee70730f0e7aa8256409bb8c418e85","0x0000000000000000000000000000000000000000000000000000000000000007","0xf5a883109666f1bb6ac25a47fc22babd3c4bcc028a8a18486552f3190a6fcd96","0x3d4ab2e28b43f64ed00749d641c32eee9551eb374a42af249698a7a4b9996026","0x6b33ad2e7360b99ade43ec8cf27562e07d23bd5d5dd64f27fac179d9dd9b5f8f","0x8027e9943ec7dc0718d714a96ca222b82b54223b6fe14b9f3fe2da99b220cbb3","0xd4930a6d99a97127e356d3a226d94167e02c76c2ac894bc2854f0a9bd0fb0b6a","0x1b3085b822253d84d80b4e718218aefcbae7a1ff6d3e6a8d1b5779909945154c","0x0000000000000000000000000000000000000000000000000000000000000012","0xf90098839ff07b76b0d13e96a4eb2f9d11da5c27760cd3105897d343373678e6","0x2cba82cfd783d584da6efc59b78e0ff050fd6c5b00c100adf35cdcc1e7e5ec20","0x000000000000000000000000000000000000000000000000000000000000000b","0x2ae37e63af8f921481a06c3372d783b5f80bcb06783592e68e367a3a02bb7fd0","0x4d8311b1039c6515d900cb54596b2601a137e97e5982774e617644842152cafb","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000016"]},{"address":"0xfa2e85de5ee13cc2d0a3fe659d23f544146eaabb","storageKeys":[]},{"address":"0xd4c4044aca68ebbcb81b13cc2699e1bca2d3f458","storageKeys":[]},{"address":"0x3f8c0f3033b143af46f8f5c98c1759fd3dd92418","storageKeys":[]},{"address":"0x0c30062368eefb96bf3ade1218e685306b8e89fa","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000001a","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace29","0x0000000000000000000000000000000000000000000000000000000000000019"]},{"address":"0x2f39d218133afab8f2b819b1066c7e434ad94e9e","storageKeys":["0x740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd63"]},{"address":"0x7df70b612040c682d1cb2e32017446e230fcd747","storageKeys":[]},{"address":"0xad0c361ef902a7d9851ca7dcc85535da2d3c6fc7","storageKeys":[]},{"address":"0xb18e93158ecb9a2c0ebb9769a90b6b1d2cd760fa","storageKeys":[]},{"address":"0xad01c20d5886137e056775af56915de824c8fce5","storageKeys":[]},{"address":"0x1066cecc8880948fe55e427e94f1ff221d626591","storageKeys":[]},{"address":"0xf819d9cb1c2a819fd991781a822de3ca8607c3c9","storageKeys":["0xc71c05c6a97acda2f3299990ff555bd8127495a0aa62c276aaeea97f67a437e7","0x000000000000000000000000000000000000000000000000000000000000000b","0x2a3590c6ab202f50bebb848f788d193c5f3630bb87780f8cd07ee8f0bb8142ad","0x653426b910b95fc5a98891ceca59cdafbb6f8a7db22c1f20d78cd41408da1bf8","0x0f495763b1f4aeb1fc2de2d0b5ef9eea79713cd1026e0a01f786fe5226c365ee","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000015","0x2efee98fb6e2a339767aa19f10cd4c7e1e5b97f261068a9064c5d05d571a9ec1","0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000001b","0x000000000000000000000000000000000000000000000000000000000000000d","0x0000000000000000000000000000000000000000000000000000000000000017","0x8231c390789b89e8cca572fe136cca26277e5b26967d3021577c7300ff36cc0f","0xfd6a89a4f17153e9727e4eeec71502e5e13157b01e2af0e975feb748a31c0256","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000010","0x70b4f25cac918dc2cc173f6aff1ecec34f826634edf0fdeac9d0163b795c4262","0x0000000000000000000000000000000000000000000000000000000000000009","0xbee6cfbaa8eb46a8458fa3fadf367a2d1d3d621919432be6e78ff89bd6db6b87"]},{"address":"0xb2ecfe4e4d61f8790bbb9de2d1259b9e2410cea5","storageKeys":["0xbf9675b4d1764e577312c99c116f61cf7602dd3feb80df9be2d176896186706b","0xd2c52c1f34f5beed8bd26de7305715f06acd248867f7e87dd4f719c4abdd0b44","0x000000000000000000000000000000000000000000000000000000000000012f","0xd5097a17ab8b7ef7f6959068f7831b2fddbf15bfa6064f2c045d570f39fb13fb","0x3dc40693fb3bf64b979c0e0b720cba651945e1a1c67007f82f8a170b92d7faf8","0x000000000000000000000000000000000000000000000000000000000000015f","0xd5b4c5ae9faf0731c1b280dd3ab8ba83795cd586e03805aad21a86cc854f7283","0xdbce54fb76d23f3792440c2e2abc6617b38209a9e60adcdb42095f9178274e46","0xd51a84850e3476406216f99da9a384d1d5ff57a85fd08323bac31bce860037fe","0x2c8ab33b7ac5125ea1a98c5c46cf76fff04ed1630cbbfc1878c3bd7459124ced","0x317fdf37c6bf3391f809665efb5993bebef1b952a2f45a49c3637e109e020195","0xbc89cd61935dbd15b832bc0815a2b310e1c54c2415caae642bb9f5a0988b3737","0x70657020103a210f8c9f0aaa1255228d8d70b827383558f050fa16c5aa4c768d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0x514910771af9ca656af840dff83e8264ecf986ca","storageKeys":["0x527413b65d84f6edb6c92975fdaad2e020a5712ca9b280b6a3ea611c13efd75f","0x4e506517218e6fd1a30d242ea8d040f7cca9231df83c626f127c989eba48e518","0x9422ae262bd5bbe8254768a185116d59ff7f53e5e813d9c0ea3840cf28c230a0"]},{"address":"0x6131b5fae19ea4f9d964eac0408e4408b66337b5","storageKeys":[]},{"address":"0x5200a0e9b161bc59feecb165fe2592bef3e1847a","storageKeys":["0xf105718eba48e11374f2a9eee37e30654746b528e81db102f28293c635eef935"]},{"address":"0xf883214fb213b82a4a1b25cf55a79a5354642ff1","storageKeys":[]},{"address":"0x8fe501afe987e247eecfd3001e2d0c82c06084cc","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000b","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000e"]},{"address":"0x30d7c134a9e7477dac13ded746c23c6e666f22b4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000008","0xdf24f37874951906ba6a98b0a86885e98b4595117008b53736427ae68cf50199","0xdf24f37874951906ba6a98b0a86885e98b4595117008b53736427ae68cf5019a","0xdf24f37874951906ba6a98b0a86885e98b4595117008b53736427ae68cf50198","0x8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace29","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000001","0xdf24f37874951906ba6a98b0a86885e98b4595117008b53736427ae68cf5019b"]},{"address":"0xf732f955603ecbc5ab18e101b49ad9b31cedd423","storageKeys":[]},{"address":"0x5b905fe05f81f3a8ad8b28c6e17779cfabf76068","storageKeys":["0x4fd2cc53b82f93565014a94b43d54089fee4125619754dee1b28619e6a0fb2af"]},{"address":"0x2b4162ff2c340a385159323503db6051419e1a2b","storageKeys":[]},{"address":"0x94a6c202ecd1f80d652eda2fb5704718f32bb887","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xd6cf5194c472a2e1b6f8e06118411a8a346a2ba8","storageKeys":[]},{"address":"0x74dec05e5b894b0efec69cdf6316971802a2f9a1","storageKeys":[]},{"address":"0xc70ae19b5feaa5c19f576e621d2bad9771864fe2","storageKeys":[]},{"address":"0xbbbbca6a901c926f240b89eacb641d8aec7aeafd","storageKeys":["0x623348d3e9f0d9c8141e9f58b5e6fb84556de2286c85d278e5e26ce61c1f77ed","0x9c87686a668c5f51d082f0bae504a5966d7f2b3907814d39e59d2fba39d1c51d"]},{"address":"0xdbecdd726f6ad8e24afc78fe3cc8eb7b73c2d94d","storageKeys":["0x8865a409ecc64fa791e82120d160ce1eccd1b5b4088470c74a810ad3e0ea609d","0x6d2b18cbbfdc154bd5856c03495e0747333bf02b508861cd8b61ff8508bf6f4e","0x0000000000000000000000000000000000000000000000000000000000000001","0x052d8711dd34fcd5a3235991bf2ab9987250527be62b87b16ddb27ae05ec7e66","0x42bb4ea40eb4dc7b9e5ef413d9566ee72c3f92350b9f8d08c1ea0eb1c3306cf3","0x0000000000000000000000000000000000000000000000000000000000000000","0x5dc6a4fb20a04766daaa206ffda57ee18e9198df953590af1c755bc5fedf21a6","0x2dcd944716773b83c0a1360f495fde13839861cf51362cf7556c51b451357715"]},{"address":"0x288a8a256c84f42a41d8b21148f6ead6b2697065","storageKeys":[]},{"address":"0x0fa78426f6851e15368cc43e2ab58da08861f242","storageKeys":[]},{"address":"0x2e2a58da5480c7e29250ee044dee097375d55970","storageKeys":[]},{"address":"0xa7efae728d2936e78bda97dc267687568dd593f3","storageKeys":[]},{"address":"0x818339b4e536e707f14980219037c5046b049dd4","storageKeys":["0xdc77a8efd7f2564fbd744b2e50d21cc40cf3ddc3d9a21c4fcafff639e04b120e"]},{"address":"0x002fac7f9da208c9e4c8783766a53125769eeb90","storageKeys":[]},{"address":"0x99f6de6cedb3e430d8d1f1897fb92c68758f896b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x4a6f485c1c32cc07b41a962ff745e1d2a15f32520f92181d93f06ac057458486","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x78c1bf7dba36fe3d2cc9a18fbefb140fecef3fbf","storageKeys":[]},{"address":"0x7618c038113503d15029a41857e352f43b4dcc6e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000000","0x3c090a7f2502726cbd4c4a0dc6168e41dab6b5e5e19f1bd8c9162f7352e99abd","0x3c090a7f2502726cbd4c4a0dc6168e41dab6b5e5e19f1bd8c9162f7352e99abe","0x0000000000000000000000000000000000000000000000000000000000000004","0x9c04773acff4c5c42718bd0120c72761f458e43068a3961eb935577d1ed4effb","0x3c090a7f2502726cbd4c4a0dc6168e41dab6b5e5e19f1bd8c9162f7352e99abf","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000001","0x3c090a7f2502726cbd4c4a0dc6168e41dab6b5e5e19f1bd8c9162f7352e99abc"]},{"address":"0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5","storageKeys":[]},{"address":"0x2ec705d306b51e486b1bc0d6ebee708e0661add1","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x7318776157f644b193c7af8dcc4c09a1673bcfca","storageKeys":[]},{"address":"0xf4032de8a48fc1dfac2757f956c7f12a88b57e71","storageKeys":[]},{"address":"0xdac17f958d2ee523a2206206994597c13d831ec7","storageKeys":["0xe5865273b58d40c0de7333def44743042321ad4b7a68c869d6f85e01d638be43","0x62024e8ebe5980c52cf711cdb431864514828ea0c7aefb6e1feedb6b37c8b138","0x6870923961656d057d7fc65d7b5ec5d4f2c0569bf8583c96a05c4df2a8f8d74f","0x7916510ed77022e52388e31c974dab18b65189e2d98ee8473fa698154ccbcefd","0xdadc6f5a447ea95c3b459ca0110f275fe38815667322cc321e175916be403646","0xcc7ae858ae216b3f05d566265b4effb1e3668f732c1dbcf2fc1d9d03530d8445","0xc54621a39c99d9b871a60888374e7b0a754a0f2bb305be5806beb451a6888d06","0xb32d105b666ad278a952af843589feb99c9a11f2a1a0d8463421175e7533286e","0xd9293a630e28d3a5e61462a4f5cf955d155ff86ed3ab041ecb0533dc126b3efe","0xb66babf585d8eb66a33c07a9b5c5a742a1e27d3d057459d2f7aa84b206963780","0x859befcb458c886df2de76e9b1236d15d8c3a20a5d0e539c7485e3c6c28f887b","0xd6c94f6f6a0337358f71a56c17b2b48cb058cce281d0f8786819cd6b0b5b23e9","0x2fa180f7ea52504da27316a4288fd6a940ccf7214a708ca5c4371e06aa8d560b","0xbe4f044a021691c630f39f9a515db97a74c4b8f936c8736a50f9e72702b86a4b","0x4512672ec96325c2fbfa8d9861c5abfb04de17e44178ddb4a1b60b47f835b0f4","0x0e1a3e68653f58cca4abbf215c8b02f7148ffd9efcb3abf0e0ecfbc1d041e37f","0x84057b8da6509b6f87c18b80cf6e9f9ebea313067eadac92cd9744ba85a184ca","0x87faf7d264131840fb49cf2fc5ee6ef8457f3d5e004763b7023b979888a44668","0x1311c754f16c7a184ba4b60a84437d77da9f9c1510ad28021f3624c8718da6b0","0x0000000000000000000000000000000000000000000000000000000000000004","0x482113db1169a2ee62c7bb047ba8deda7c9e44522ba01794450e387cf7046f5f","0x8ad2f69e46fa18f2e8fa3595e410effeb815c804a99ad2142ba34424776c32ec","0xd39bd77f56d5e9a554d46d8f16e3525258a625c49848c705ebbe97d5d2fae76c","0x61806a02d55d0d0c7620a27274300f3809bdab323ae2059c88e73898fec468f4","0x1c3ad8eb5634594ed5555d688023bac555ad2996a6f5641699e322abf5c0de0c","0x0000000000000000000000000000000000000000000000000000000000000000","0x6827559d9dd6cccf4cdc88f221e132b2032840871ebf472ef7c9ded999975324","0x2cbd496c626baed5aa47b7572944a67babebde722928d2da3680e338950c4636","0x42431213c2c25657b94612355a76ccb15d93dcaa1324f2367d51fd1787210ff2","0x8d4a4641cb3f2db51abfd8690ad04d010dc6fd5c8c5424851c11b933e4bbc8cb","0x5238351c432862609e197ce71a0da0267db7b47ed60229356f6418e58fa26356","0xf40013d04755f16b827a5d3fa639394b2bd2eec46662c7453fce262f8db153ea","0x6669717cdf9962bd12f5530026e24d29737ca48e6c666e41630bbbfadd97e3e7","0xdce2511087ed6ff877dd74fb4c1444f2cba2b3026021183bed94ad64bfe56726","0x78b35599871be95768b2fdfaf9293a4491ecdc8ef25b872ee404fa1e441436e0","0x3119a9b2f198f14f15cf41f4b140961d2b9e5709b7a0bafea12769d16b766206","0xa2bf89f579b108f5063bacde30bdafca60363f3f850cc964b8e1022e79ed1160","0x582dce2f57b70b949404eb374b545f9a59c60be579df0fe09564049a3a799c88","0xbd08072a5545f110957f5bb1b6f705167c44924e2f63c6c418da774f69acde37","0x7531b3ae061ccd8ec5a9a7e82809f9ce04307fc0fa3854cbcca93850b8984ea9","0x02fc11c20aa8af930bb90780d97074f7c1116f07f2fd255673635bb36ee2c031","0x2134d7f4a6136c5bf0311a69a942fa0078186e08ed76e2e6d76d53950ab6673c","0x1f346489b2c99cfaab16fd76d3d683a29713d1558ff574ecfbb89aa001fa229c","0xcc2f9843ac244b4941c39a4f8c4eb0cce1e521c7eb72ce2301f5fc7825e9f9d4","0x84bcc3a7469474e82640ae9001805e5dcde53449eb8be8c82108b89aa63a6cb2","0x4b35ecd217e7a20c6967c161cfd5ef6d7830a3cc394816491c755c2b3a2381c0","0x169228ca33ea854d54aa1e506e59ec687f618a41074f5f5de937a0e9c6343e5a","0xc3523157d3378d66d8828c88aee81bec19dfd60c9bfedf932046045e3b3931a6","0x091c2eb3d5ffaffc2f460a491d1096c523cd7605b6896bf241a4095752482b69","0x2009c4cc9c1a688d69a41b13e0cc17b9cdd72ff29ba211779088d1648ea95cdc","0xe4f21bb244fdd3fd3098ae44c81e8f4467573671056a4a57a665c8b50beddcb0","0x728e667887a5cc2d5b14fa273c88e60fabfef07301595452ac58e2cf33e7f947","0x59197132a50ff279d7bb19e3a2f2538f25e56059b99386a32005928ef5cc53be","0x0000000000000000000000000000000000000000000000000000000000000003","0x10da434633302a1c4f56d398ae5bd0f7d724b6f4ab96505e7aef40281408409a","0x3ad2db55fe5657fe773e3b7111e43f4b662a181a20e875b3b8be52dd9f0e2333","0x000000000000000000000000000000000000000000000000000000000000000a","0x204599a54282882d5be7f6bacb625dec57539bbd00c4adef711f14f8fdf4876f","0x980a5e4c61064ead21a7c01bf0fecb71f4a1fa5223261706f0dbf65a4e37f365","0xd4df6013dea9acf69aee30cd0427f0115735810622dc74d13542f217d11df9c2","0x6e1ff317b20fbeb88af25171f2837c2b661ab0c1b2a25424e357b3548a3efa77","0x0356bcf1447fbc6fa23fa93481c1507da18f9198c03b27299c994f8297d5f64c","0x53cba708dfb7b5b1b3d85a5135030d0355b22f7ebc2060b966204e8031d475b8","0x0c473f49d0fbe5ad01d630abd3ed4386fa0685145f666e359f8e3b496c699997","0xb9e5c6baa4d1f78dd28fc0800a19a0a965d18f29c06735a30dea336aadb9abe2","0x524bfcec436c05b97c4fa0a4b01bdd00880f509c00db106f1fdba5574a8c1526"]},{"address":"0x0add4bd959def87ce6dbdeccf76731a159984468","storageKeys":[]},{"address":"0x28c6c06298d514db089934071355e5743bf21d60","storageKeys":[]},{"address":"0x148dfb85a90ff55ad3dfdaa345febf494a2e23d9","storageKeys":["0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad8","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad7","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad9","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ada","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad6","0x0000000000000000000000000000000000000000000000000000000000000003","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adb","0x0000000000000000000000000000000000000000000000000000000000000002","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5adc","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1"]},{"address":"0xc832c7614108f5134e511a43215e9ae6eda78b2e","storageKeys":[]},{"address":"0x83a73b0c427dead5aa5f96e15c430fb766328510","storageKeys":[]},{"address":"0xd311a91124d0392841cdc6d53a470684704c1e33","storageKeys":[]},{"address":"0x8dbee21e8586ee356130074aaa789c33159921ca","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xbebf1c31e05a62aa8d07003af177f07891889ad7","storageKeys":[]},{"address":"0xaaef4d5ae6ea726f542033ddd8e0a1df6b189794","storageKeys":["0x31ac242ffb105ef7ba4bcd742723c7d376849df82edc76c7aefe4c7bb1a76a76"]},{"address":"0x1a13c81976e6f228fb1e18e1790ec9038ee0d620","storageKeys":[]},{"address":"0x6cb3ee90c50a38a0e4662bb7e7e6e40b91361bf6","storageKeys":["0xbde8e536bc5811827e4ae30dda68b72ac5844230341d03b87e5eb780d80f2da3","0x0411418bb4642e734649f8655ace73413729cd27950d19bd1799bb0ccf80bff6","0x8742960fd8c49bd455c7786429ede3e396067ef238b781ded291497544048961","0xcc58ebcaf88a33c18e1a16663ae28fde183c06077fdce019f8225f252cd3d811"]},{"address":"0xb578c10e6eae79a4bafb3cd69f221f28947d5e16","storageKeys":[]},{"address":"0x4b0c925f3b2325c448990824e91132cd5f395f2a","storageKeys":[]},{"address":"0xcc834b4dac87378d7033a990189bbf879a36362d","storageKeys":[]},{"address":"0xe3d0a497d70b5383e5a3c334a5aee31008e07d73","storageKeys":[]},{"address":"0x8146cbbe327364b13d0699f2ced39c637f92501a","storageKeys":[]},{"address":"0x5d886374ab0bfbb2e70597b6633292ce1a38f071","storageKeys":[]},{"address":"0x365f270ec430c30cde4d32439a4cee7bee8970d7","storageKeys":[]},{"address":"0xc53405b6eea309bfed15a5f64efea267b9160668","storageKeys":[]},{"address":"0x327cb095c802843b7b8e9a7b8d48432a6b5dc795","storageKeys":[]},{"address":"0x712e8fa890789e98a058277e69ef1806d952b79a","storageKeys":[]},{"address":"0xc73776c7c02e93c45158e2e6f1d4175fba0a9ca1","storageKeys":[]},{"address":"0xcbbcb370cfcc967ec2ed24263c90faf145d54ce8","storageKeys":[]},{"address":"0x84fb231ea2e00e9ee35e8ca19b3aca7d2975d20f","storageKeys":[]},{"address":"0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x320975846a116b11411a5cfde94c56d7713040529fd53bc4095fb1022e45da01","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000005","0x5b2a585fa5c233b374a2a5ddf9a48ef884ebe611aa51fecc04c88aee2968e275","0x0000000000000000000000000000000000000000000000000000000000000007","0x5800631acacb319b6d299c037a26700faac70a0341d45ebe57a010dcf2b48d8a"]},{"address":"0x0d0707963952f2fba59dd06f2b425ace40b492fe","storageKeys":[]},{"address":"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xbe69d05f3873f044403ddc603d07591b324cb662","storageKeys":[]},{"address":"0x415ff1afc201eec50beff210a2f456674046920b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x637034ff9a9768ec1d42ca6e42f6582a3447eb554d12d9f5461218dd45d1b84f","0x83a5ef50f025e0546bdc02478438776bb2931c0384c6eb124d85fce08565a337","0xe4988a78c82cfad4cfc79937be5b0aadbd593c8139822c62c7af51164284dcd2","0x8f52764cd52880ec2918e4983f88f06289aab8057be179fc840e56e661eb0b58","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x2602278ee1882889b946eb11dc0e810075650983","storageKeys":["0x0c1c0c914f45c000744875af89164f0c3fa7a95c88dac7dd52278df3ccdd7017","0x838881c88dd3c1e081c30902bab10bb762f93ce02a52da0b9843f95203a3261d"]},{"address":"0x49ae0f9d0bd8dbe9bcbd4d3c501a4a8a0944c2e5","storageKeys":["0xc731c162de1f37e48b52a59fba1aebb8df321acc376d0b74f52f6f68c59d388b","0xd3f567404ba310d4ca1144e5db70b5e7bfced5c9fbc7b5db4968307b8f09e25e","0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0xfa103c21ea2df71dfb92b0652f8b1d795e51cdef","storageKeys":["0x140eef113d7b5f11ae292171e759639b0e423c11dac6b687ee01d4ccfd8c964b"]},{"address":"0xfd1b0b0dfa524e1fd42e7d51155a663c581bbd50","storageKeys":["0x265f1732cfaf58ce32de42f37be12ac84566eb1ea99da1c3e2a355b0ad2f3f12","0x99e4583eab2c5d50e3624a740cbd0ea17288514cf77085b222c24d8698540d53","0xa73632f944257052d8be8529e6e41a5eaa504ddc5b00f522a0840d8efdb878a7","0xfdf993c9fa7dd8c372f151556f88d39e13148e21b3bda1050e4518f8e557187d","0xac922b1e30e6d7ff79fd166d5614edc761dbe1045eb5d7c4ee68ee64e56315d5","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xd0207f98173fd0fda8f227c64dc44ceb84f73a21791a2235883202c8b767aed8"]},{"address":"0x2f18f339620a63e43f0839eeb18d7de1e1be4dfb","storageKeys":[]},{"address":"0xdef1c0ded9bec7f1a1670819833240f027b25eff","storageKeys":["0x0000000000000000000000000000000500000000000000000000000000000000","0x0000000000000000000000000000000500000000000000000000000000000001","0x1454083160665801f09e29ab8f69468d8b8efd1ebbd910c5a96df81a9aa0224b"]},{"address":"0xf05b0e4689f62ffd7ccf34906fae7f106f9204cd","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000013","0x0000000000000000000000000000000000000000000000000000000000000012","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000d","0xf338efe185a403a5db9ced663c265c9aca6a9e8d5047fde96f6f34db4c4b32ca","0xba9f0a9d2918d1b53246d8caf54ac3df52e0b2e15494ad8e447636ee5efd27f5","0x543fae4ebb556a7e3ea46b6922bf9129e6840e7df76fbf613dfffb6b2479fc7f","0x0000000000000000000000000000000000000000000000000000000000000005","0x5737addb5a275661b564d0a8f54650c5e1e707fe606dc9d4411d3644d8682fab","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x811beed0119b4afce20d2583eb608c6f7af1954f","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x2f79d4ceb79ebd26161e51ca0c9300f970ded54d","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000065","0x0000000000000000000000000000000000000000000000000000000000000035","0x00000000000000000000000000000000000000000000000000000000000000fe","0x00000000000000000000000000000000000000000000000000000000000000ff","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x931798e4dac569856413eb6808a6be0e3f14caafd4cb15ca12b3573117c56e37"]},{"address":"0x49010f03e403a2303c6049d25862af115c650a01","storageKeys":[]},{"address":"0xb50721bcf8d664c30412cfbc6cf7a15145234ad1","storageKeys":["0xb9d9d0eb67c4258bcc1886ec3c9148c9d06e85018b090a027a97d16757775d24","0x990cfb0e673481226fdac2ddcf977b6c2e9e4609c85ff777ef4fc3595e77b7ca","0xad3dfc6da043c145b0f5f286248cc32ae826d33728479d5caf24f25f60f562b2","0xd64193ab2ae4623b7cbf67d0ac3e5ffe4844af5124da8f21a8a76f3c66992021","0x87da21c17b727dc39a8771d7d66e0427449ccc45daba88c95fe70cf188bdeb63","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"]},{"address":"0xf6a94dfd0e6ea9ddfdffe4762ad4236576136613","storageKeys":[]},{"address":"0x7563758243a262e96880f178aee7817dcf47ab0f","storageKeys":[]},{"address":"0x6af3f5ae6adf03fe737ad42dbd152b2a08db7d1c","storageKeys":["0x3cc7d0cf6ce2bcd720a4b6d2d8f3f074014bfd50f093993bf8f7b64bc486b1b6","0x0000000000000000000000000000000000000000000000000000000000000002","0xf76fee4741f2e1dbd18a4efe584e3c3a2f3a6833fa0c52b67128e7929b64565f","0xbdfee2f0cb140c88e17eb54c23cccfe3171957f049aa6d32ee3e49283f0c3283","0x5f43b3828c5a6834b11c82bc671c605a533fceaf790ec93a0f4e9fad9a615d43","0x0000000000000000000000000000000000000000000000000000000000000003","0x8a631ae253960e309e920756bf219eff061b81c8183ca3f8482ba4bb91ae1e63","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000004"]}] diff --git a/bin/mpt-test/access-lists/18363445.json b/bin/mpt-test/access-lists/18363445.json new file mode 100644 index 0000000000..61a23527c4 --- /dev/null +++ b/bin/mpt-test/access-lists/18363445.json @@ -0,0 +1 @@ +[{"address":"0x40226c5821f5c6e22043833d04a1b86985550b1d","storageKeys":[]},{"address":"0xca317ef5f8978c36c1065184fde08d9dd7c36cfe","storageKeys":[]},{"address":"0x000000000022d473030f116ddee9f6b43ac78ba3","storageKeys":["0x77722c1fb10125257e0ae84767586605659d0661a31dc05916a3b79d34ce883a","0xd8fadfe2fd722ca8fa2631df2956454391dd764d27be5cfdc2782216dc628995","0xe401de12c94a724230d28b68476b22137fcad12bbbddfb4b2fda80ab57cb781a","0x315fca8d995ad8a329581d7595965a3263847b1bc96b5c474f32f08ef65cd494"]},{"address":"0x58c746b5f23213a98c1bbb9ea6a9932b544342bd","storageKeys":[]},{"address":"0xa04077670d522e9af8d0e96a724b67b16312f646","storageKeys":[]},{"address":"0x21efd411374442cfa2dee4c5f5b9518891188dce","storageKeys":[]},{"address":"0xb05073aae7c9ed7cabab67dae0ab6124f4a7a421","storageKeys":[]},{"address":"0x99f6de6cedb3e430d8d1f1897fb92c68758f896b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x4a6f485c1c32cc07b41a962ff745e1d2a15f32520f92181d93f06ac057458486","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x1527beff62b110c09ac527b1ecb11ba8ac3a95f9","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x7e75debaa645805b1aaa4c5a41aa11dbcb198215","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xadae1798f761fa7fce29b6673d453d1a48a2931a","storageKeys":[]},{"address":"0xf61f4f2c896219a90670e19e188ebb93fcc002e8","storageKeys":[]},{"address":"0xb258ca5559b11cd702f363796522b04d7722ea56","storageKeys":[]},{"address":"0x55833e12e143d2e34ccd556850f79266bf478ee1","storageKeys":[]},{"address":"0x67fe41a94e779ccfa22cff02cc2957dc9c0e4286","storageKeys":[]},{"address":"0x11b815efb8f581194ae79006d24e0d814b7697f6","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x32d80bb380a6153715a380340a591610b4f5a62ca0809dce09eefe0e7c37ea7f","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x464f0fd1ed9523e421031ec2aae44697992366df","storageKeys":[]},{"address":"0xb23360ccdd9ed1b15d45e5d3824bb409c8d7c460","storageKeys":[]},{"address":"0xcbff3004a20dbfe2731543aa38599a526e0fd6ee","storageKeys":[]},{"address":"0x48c04ed5691981c42154c6167398f95e8f38a7ff","storageKeys":[]},{"address":"0xfaaa392734aa1b6d279d2b37ed33e57c048754d1","storageKeys":[]},{"address":"0x16ba73c3f6769122336561395ee88eb979b701d1","storageKeys":[]},{"address":"0x1111111254eeb25477b68fb85ed929f73a960582","storageKeys":["0x9c8412893622586ec36a80bb47953625f75a12c567bd60d59fe9127988db6e06"]},{"address":"0x63a395b574d5e23c3dbc6986be5994ef6743afa8","storageKeys":[]},{"address":"0x77edae6a5f332605720688c7fda7476476e8f83f","storageKeys":["0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000033"]},{"address":"0x4e5b2e1dc63f6b91cb6cd759936495434c7e972f","storageKeys":[]},{"address":"0xfb19ffd1ff9316b7f5bba076ef4b78e4bbedf4e1","storageKeys":[]},{"address":"0x73ce7912501be775a693fb3a641eca8216b18b13","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000013","0x000000000000000000000000000000000000000000000000000000000000000d","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000009","0xf57ae29aa849bc7913609bc09b5c1cbd3a2aedc5977d5ecee27a79a9afe058f3","0x20de30300db9b2d46f45ef3798c883c649ebfb03953fa78198d91713f3132be2","0x0000000000000000000000000000000000000000000000000000000000000010","0x8ba190cb48198fb85445fcfdf616e53510e2124fd02590bd23d8adad1a2cddfe","0x000000000000000000000000000000000000000000000000000000000000000a","0x5c83d9320a9a25da893c14228f60de0a08c6b7bb94e4088eeee36c1b9a31c4a4"]},{"address":"0x0000000000000000000000000000000000000001","storageKeys":[]},{"address":"0x26335b46eb7dab67c9f2f2581055a818ec259a36","storageKeys":[]},{"address":"0x65a215f3db3dea02fd926ede38be7eb0978db503","storageKeys":[]},{"address":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","storageKeys":["0xc879954464be3ad720ed8eda46e0649a78b2163f8e5cf2327373ac0a8cff56da","0xfb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8","0xc43de090e120c56163c78a79947fb033da57ecb0a8775adba22c13a3cf4abf83","0x7e37709aa64560456a2a6d490781eec3fd4960d7077c897a3978ce4a77a5ae6d","0xb0505f68d45689f03f4367abe7f1c0cf4ed6875d324edf91dd396c4d20555404","0xc269910e79664bb02e4ea6b58a6546a8f30ea3f5840ed79d34d06b85ebddd776","0x993460b7a842a34c6de2dc08dde1c527f4354825432b190bba2e4f8a7b04c6c8","0x013949704e03781bde034170a06eb3b7759c4a8b374d24553318ba458b5d6ccd","0xdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e686739208","0xdf2ae3f156ce84cb4ce184647a920bf090b8c7a867d38b86709d4d85664b7bfd","0x0cb865ff1951c90111975d77bc75fa8312f25b08bb19b908f6b9c43691ac0caf","0x2b83b3e1fb436772e592319bd36c360dddb62d80a39727784d546decedbafe26","0xcced982511cbf7fa68ee0a44ab44dc3426b309d28a08cb46e6eb3eb9c6dbb7c7","0x3a3aec5717af62dfc0f5ede964a3e44cef7c5ba4453963ee6e3545ea9708690f","0xd23bb4f2b1fa279eeae815c36c41ed1f07e636095d955d79839ac5e0cea06a11","0x3a28961c980b0da3e5a5a5d784aa45ae30de0ef7d5afc286aae1586c2396b799","0x86ea25831f51e46dc1f9fea523b7e87ef91b50a89f5ad6663d8df9d1f7d28c02","0x43aa45ec98615d91f961a8f191b780d7abc1159e09201f733c07e7449ec753da","0xe819cbe81daa538219fb3630a6b9566e17b43b07f0a056f947b17ed2a306e269","0x4fb413805902e1d9a6681d54d7946be4d2c3433fadac4304eb49ef1b5a52a8f4","0x39a528031c821151a0357442b7ae7ecce02aeec01c8255f8ccdd708707e959c9","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0x0924d2eba8978269265ab53e97538e5611910658ed716b899a8fa36e9ed69330","0xc71dfa760d584ebf474c6d1c55ce31ce02f85ea18a5dca00cd2f18491d012f6d","0x6feef5b840b44c4be4a77f82d47514fd15c11a0feee3d50635396e05ada6d27c","0xe03178286da22a27dd0b1f68fb538cd07bc9080172ee9a5a2238416fe86db02a","0x6607c484800c9315ed89c5bffefbf1b2c1050d09697cc3dc58d1b14c633748ee","0x9ede93be0d8fc6a5eb9cf1c7345a85b7519d8487a727aef0c2f00ab966aa7716","0x60a734b9931b463b5ec40c9bfef86d3ae5a93d7796ddcc3c79118d946aae6b46","0x62f11c2afd0b1f7d5cee75ef9dc40fc9d0fb343eabd5e33a2be77ef5e7150402","0x9c624a5d083d18dacebe46f8d8d787009a1c3414eac150bbec20649cf01d77e2","0x47acaec6cce4f8679df357c0511627b345d6e8f569cbcd40f3cc0dc80233794f","0x27902350b23dab8e343168a9c4efe515d63cf66808c513bd6a00ee1036192055","0x3fbe6099f169b217d3e3f44e5b72b54ed4319f5e6c163e6e3739eb3434dbd572","0xd212dcd01ed41455be0b36533ba78a0fdeccda0068b5f90fa610f816600cbd08"]},{"address":"0x08736a84c876b46cca2bc591e2475431ed64425e","storageKeys":[]},{"address":"0xdf2b4afc475d230a826f277719f874542002be06","storageKeys":[]},{"address":"0x5d550635f87e21337462b582dff589f552e609ae","storageKeys":[]},{"address":"0x046eee2cc3188071c02bfc1745a6b17c656e3f3d","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xb64ee41d4d625f23d84ba3d3c9ba8470ed1b58969783afc12206db6219edc380","0xae725a6314bba6e614463419cb800d0807cc2a4f688ab68828b74bc255fecab4","0x9e14b762eb423a5dd97d0661dbd41fcd5e5c9d997f8b651c280d53059ec58a47","0x5eb20f63001fa3b608b1addec478d14b6ab805a99354723a0488ffa70d5d4413","0x2f41f50d5ceee069bba953152b3424751a8ca0874e3065a0e955df4063e682c8","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x000000000000000000000000000000000000000000000000000000000000009a","0x00000000000000000000000000000000000000000000000000000000000000fb","0x8730115f3af379603b1e9225ab1e6bc6993b5fd6d0e00c24280a6ba17c0cd6af"]},{"address":"0xc36442b4a4522e871399cd717abdd847ab11fe88","storageKeys":["0x737ff10d44a9cc7efc13561b99d0b3815fe76faccd3039c82bbed8d6178da46b","0x67ba4a4f82789dfc9278c45e31c806d20dc0b004d70f969c52bafb3f86a3901b","0x737ff10d44a9cc7efc13561b99d0b3815fe76faccd3039c82bbed8d6178da46c","0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3cadf8d","0x737ff10d44a9cc7efc13561b99d0b3815fe76faccd3039c82bbed8d6178da46e","0x0000000000000000000000000000000000000000000000000000000000000002","0x67ba4a4f82789dfc9278c45e31c806d20dc0b004d70f969c52bafb3f86a3901c","0x737ff10d44a9cc7efc13561b99d0b3815fe76faccd3039c82bbed8d6178da46d","0xe3cf90a5a6ee91afdc28b429497811e76db6248547e420ee2c7fa218d45124d0"]},{"address":"0x89e51fa8ca5d66cd220baed62ed01e8951aa7c40","storageKeys":[]},{"address":"0xd7f3fbe8c72a961a5515203eada59750437fa762","storageKeys":[]},{"address":"0x50130437a81535dd8f4b0b921756ebddff537523","storageKeys":[]},{"address":"0x0f036f2ac038f8a37c96c4729c6b4433967cf8ad","storageKeys":[]},{"address":"0x724d0de27cb82be1da3568dc5a4b86cee9e4dc7b","storageKeys":[]},{"address":"0x170b1d720c853f6f37ec3be782158d941d904a3c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000013","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000017","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x18672b1b0c623a30089a280ed9256379fb0e4e62","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000002c","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000003","0x000000000000000000000000000000000000000000000000000000000000002d","0x000000000000000000000000000000000000000000000000000000000000002a","0x000000000000000000000000000000000000000000000000000000000000002b","0x000000000000000000000000000000000000000000000000000000000000003e","0x0000000000000000000000000000000000000000000000000000000000000029","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000028","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0x9746c4304cbcf2b9bd02b0686eb2a1443b07bd8b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0xbb7dcb4cc5388d9954a2593ebd544bf89b3aea968dff8e9273b372233cc754c3","0x3b86e9d714f273bf0c5ca748dddade00a0e5033d493fd4872f63743f976142ea","0xd1ae39517b4c7d4995db65c04c8f47ded33153a041e0537d9672ed5960e8b148","0x000000000000000000000000000000000000000000000000000000000000000e","0xf0e313bf90ed3839c64a9fa927a4063b5e02407d2535470248383001e0d81419","0x000000000000000000000000000000000000000000000000000000000000000a","0x38846371790bbf7b77604da8b29ac40f0a83e107e13001367695f22659ca701c","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000b","0x52b97d8334233d215049143127078176f28777a52ee04f52a5cd4cd7fccfdfbf","0x0897dfaf1c37c8dbe7def5779eacef1f70ee8772a9b3244ac94223e45b045a6c"]},{"address":"0x0363b1bc04365087ef6e1360e35872b60187a013","storageKeys":[]},{"address":"0x077d360f11d220e4d5d831430c81c26c9be7c4a4","storageKeys":[]},{"address":"0x271682deb8c4e0901d1a1550ad2e64d568e69909","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000b","0x479cfcf5c676437c79d50ee9bdb4c12c1b76dc1be2d04b6b7a8fd00b9ea1c665","0x94266873ccaeef73376d2463a38f76474de9cc7b08ba8dd8efe24e41637b3b2f","0x0614b180b64fb95a5f9a927026486500538594f863a65a5f270d1394e5e9dde4"]},{"address":"0x8d8404f8cca4c8834ca3cab1e54887ae47724bee","storageKeys":[]},{"address":"0x321afcdaba70b2cee6521546e8feec05e422a10f","storageKeys":[]},{"address":"0x1b7e65258e8a9716c45fe78dca2b8b32d006b018","storageKeys":[]},{"address":"0xe23f8cb32acf55124bad04721f275acecca398aa","storageKeys":[]},{"address":"0x0f13620f1d5a8bbe8fdf8dc701b3f55f823d031a","storageKeys":[]},{"address":"0x3c3d457f1522d3540ab3325aa5f1864e34cba9d0","storageKeys":[]},{"address":"0xcb5928f7d24a05a13520018e82a1e43eadef8d47","storageKeys":[]},{"address":"0x8b2a354ba669da1828e508cc3e8b0d20a0cea81e","storageKeys":[]},{"address":"0xebbd07cab1f6cc2811000e40fcea23e6cfa5336b","storageKeys":[]},{"address":"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x5354068485fd4e394d452e5066f8a0aa2c1e781f","storageKeys":[]},{"address":"0xd533a949740bb3306d119cc777fa900ba034cd52","storageKeys":["0x32366859a08a8c4891fb0bfbcf1cc461f2d20cd3216ca7fbcf21318b863cf8d0","0xce814e876fb74b5918b09fec4d70e03d607b5da912f8cda1e91757ac60d7efb3"]},{"address":"0x0000000000000000000000000000000000000004","storageKeys":[]},{"address":"0x51c72848c68a965f66fa7a88855f9f7784502a7f","storageKeys":["0x398390768c40768f5d7fa1802afb03dc32af900388ff9b094df16e84c0bbad5f","0x0000000000000000000000000000000000000000000000000000000000000000","0x0fb940e5a8f01c04e0a95326b0cc1d255b3eae95a2b9a9dfdf12852a20d72361","0xe2a59d32e529f818e8cd31db816a8242dbf29188915dfe7d9e7442c9b5523fbe","0x41370c61bf529de5cb140b302534d0e7dd86a8a6db142f6eea6ffe20921dfbe8"]},{"address":"0x56eddb7aa87536c09ccc2793473599fd21a8b17f","storageKeys":[]},{"address":"0xc42b14e49744538e3c239f8ae48a1eaaf35e68a0","storageKeys":["0x51c2cd18b7d7edb9d16117321e08b0433321b8ba89593a7ca392ae160f0fbce9","0x0000000000000000000000000000000000000000000000000000000000000003","0x19deab9b494b525cf74020b2ff23fb69acf77adf8cf14baa3ac3ec0dba2d9066"]},{"address":"0x508e1143f569b50bc5e283b78559445bdf0807cc","storageKeys":[]},{"address":"0xc7e5aeb3ec9b4f3d912c17f6852a670aee2d7ec3","storageKeys":[]},{"address":"0xfe188e92b1c51ba31cc78e29994ec5653838e792","storageKeys":[]},{"address":"0x4c11cc6823b0cb7d699d6fc278dad288eab7bd6a","storageKeys":[]},{"address":"0x98f3c9e6e3face36baad05fe09d375ef1464288b","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8c","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c82","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c87","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8e","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c84","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c86","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8b","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8d","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c91","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c88","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c3","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c92","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c94","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c85","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8a","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c93","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8f","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c89","0x0000000000000000000000000000000000000000000000000000000000000003","0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c4","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c90","0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c83"]},{"address":"0x4b483d0d9d6472c4f9f0210337ea0705dd71059a","storageKeys":[]},{"address":"0x2c169dfe5fbba12957bdd0ba47d9cedbfe260ca7","storageKeys":[]},{"address":"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0","storageKeys":["0x829bd372dd791f3f6292feae330ead664fe4b4cbf831fa5da30c6390e6af723f","0xcc535c7b9f605c3344abe50605dbe8f9c3042b41f106ff381ec7c18293d0c706","0x009e326361884c2d8981715b6fb29b3a1a533f490327862b8d26f21a98480f58","0x52ea6016d43a58df0001ed45429c86982b097cc907396c1e5968cd787bf83d28","0x43349b43841a69496db9d22f30a29e252accb6b004ff4aeba98c2ba0b873dd95","0xed72eabd9f3c4714b69eecc5e9c7ec8cfc2c12d9aee073259fbf93ec2e568535","0x2ed57b28a284bebffb1baf9fdbef9c826fec14f335dddd7ec8f211d50c71741f"]},{"address":"0xef52a7127b52dc2eabc1f82cf5d594770279a9ae","storageKeys":[]},{"address":"0x1fc40cedcb47f341b37968a635314756d4c04f36","storageKeys":[]},{"address":"0x69525dac489e4718964b5615c3d794a25d62beb7","storageKeys":["0xdb3ceb65027fc8efa2152b8073814f22b39b2965510944c2d5963cb47ea21414","0xda5bec67218a3452657dd3dfc92c5103ffc53698ce470bd53e545b032465c471","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xeed572b39c8d3f8e891e2fc9080990524248e3bb824fc9cc7eedad7b7b08ba5b"]},{"address":"0xa7ca2c8673bcfa5a26d8ceec2887f2cc2b0db22a","storageKeys":["0x9144aee7f37b7f43b6b90b5f10849f7e24f0d10aec9ad49f57e3aa0eb644251f","0xf8d8af571bcf8331a05936e065bfc9134b6461ab3226d0f94b32b989e63dadf0","0xaeb398aaef01950a3b20c728e1997bb95d411b0de44b9c8c5376cf18fee7cb8b","0xb64dca7c2c7c1042e75fbf9b93ca1120ef9e6feac25da501460cd6d486bb8882","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x423f4e6138e475d85cf7ea071ac92097ed631eea","storageKeys":["0x7e23841ac1dc0ad28c17761055888ad118ca49b7e58219c38f6022ac7cfb6b96","0x0fd4f3d08cdce41693a053d24208ca680e29348fd4d58da076e4800b188bde1e","0xecaa7216573e0b608913bb06dddb4ae1aab903c8d7ee6ea63ea1455237919133"]},{"address":"0x765ee4f09ac9ebbaffb0103bab9aafe88da16d15","storageKeys":[]},{"address":"0xfba175fe8169f08eb02239ca1b235a8e13415204","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0xee722d724c89bf250dae10049726c7ead1476357b09d9efbec404caf9ea81e72","0x79d156ceea4a0fee7d6637a7a651c35fa06f4c4b635515212bfc8949f2e1ec43","0x89771fbd38768c503b93caa8a5a7af1a98aee81bb30693325dc2478c31b99a9f","0xf2c535f78bbf70e8c137acb4e29e2f986545c919fc7214c8b5be774e28c99ce8","0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000000c","0x4a005c35fec15139d97803ed79dc14a88b633f9755a6a0777c9b23f13c3fb861","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000010","0xf28acad8a0670d670466b93ab09c43622744fe969ae226d34ba92c493c22ccf2","0x3bdbca05285fc70b92d87d8c7b9e489bf0787dc47751ba4fb70ff7a65e9bb3a2","0xf404b05dcec4c1028aa8e4480bb5e02ead5e2455a25dcdd2057291e3fc561343","0xa5f3f05fcb15a4a5ad6a9b72b15ccbf4a2d0626b3fb9a2738ef54cef92c8f43e","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000013","0x3cb31db65d4a0cb27afc2b35e83637e3c9f86b1c5713c6da38178dca056db7fe","0xe5898500733853867923fd975114830cc7c234061a723205a8ca9bba6c090781","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000014","0xdcc28a903a03fd1a76f0f5fc8d4e619b82da69a2ea25ec130ff57a51897ecb18"]},{"address":"0x264bd8291fae1d75db2c5f573b07faa6715997b5","storageKeys":[]},{"address":"0xfcd4d62ec78ffa2f3393e707cbd367b55e7650f9","storageKeys":[]},{"address":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","storageKeys":["0xdc276a4f120117ad5ae6415d1c724b4f3a0e81f0ee6466e1392ca121b63123f2","0x0000000000000000000000000000000000000000000000000000000000000005","0x356ea57d585b4c2292ee2a39c9da213499f25d18b4fba5671c7bc01208e40e2e","0x843a1149fb1433eecb1b4c3da1f05b4371f10dfa06005208a012fae04ff9d915","0x1c53a8b75d17843d0eab5a15ce9a3ee0e79e4339f036d33d0248f11f6d31916e"]},{"address":"0xa40f67074bc008081cc2596abcd7312952aa67e7","storageKeys":[]},{"address":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","storageKeys":[]},{"address":"0x8f8e7d4ef1536b3655ec1426aa3a46a3f4356289","storageKeys":[]},{"address":"0x0000000000a39bb272e79075ade125fd351887ac","storageKeys":["0x859245a13018ac5a93a01e110bf65ca1abaee6f8ad471faac9be4824c9577049","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x72b87c327550ab68e32ce1ea0077cd2e2b3258297b5b70be9fcf4abaa45ca847"]},{"address":"0x6d053ea8893ba0163e115b5cc6ff461fdf7511d7","storageKeys":[]},{"address":"0xe0438eb3703bf871e31ce639bd351109c88666ea","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000002","0x000000000000000000000000000000000000000000000000000000000000000d","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000004","0xbb47c685b7a6169f9415fd073108f8b7da3e741b7dde8513850bca404684fa97","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000014","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000007","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000005","0xdf6cae10d416b4d6f459eba806bebc4b85f190dfac647ab7cb4cd2638815444c","0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0xf939e0a03fb07f59a73314e73794be0e57ac1b4e","storageKeys":["0x66368119ff05b3698a038813004193e9779d10801fcf8ea67af1f93e0fd188a9","0x7cbe81bacd388215be9c9e8d344a47af8f17223474d114f0769e1a80406589e4","0x10ef53f11b023c0919a971c7d6dc236fe49431ce18f2b1375a7808c494d504ec","0x0cce64d4f412a0406c3b98e008e3e196ea99f2a9ce128d0ef85ee81b207bd609"]},{"address":"0xc662c410c0ecf747543f5ba90660f6abebd9c8c4","storageKeys":["0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec","0xc447b48995780f669aff2327abe7302de2dddab797e0ae7ea6f3c00d66e82738","0xb4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56","0xf86095cd7a40729b7fc2232125bcf06bb0c3e60d22b83e6ec934e43f40fbf9b7","0x8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4","0x04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fee","0x67963652696f3a8e8976c8d0956f2afb2fdf053b99be7bf625d956fc88a52815","0xabed1d7a8dcd28219aa35907a6d98d00be0ff62e90df1de607ad1eb42a06d50c","0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24","0x71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fed"]},{"address":"0xd4c4044aca68ebbcb81b13cc2699e1bca2d3f458","storageKeys":[]},{"address":"0x51836a753e344257b361519e948ffcaf5fb8d521","storageKeys":[]},{"address":"0x3e573ca2900f5d2d1eebfd5f33c2945208d2f025","storageKeys":[]},{"address":"0x0113a6b755fbad36b4249fd63002e2035e401143","storageKeys":[]},{"address":"0x655edce464cc797526600a462a8154650eee4b77","storageKeys":["0x5e5777fab7622aff3c042c1ece74307c2e9d699a9da444f416c35f2e1def28a5","0x000000000000000000000000000000000000000000000000000000000000000d","0x2ec2a34fac153c8f4ac198c5ff9d0c53d29ab447a04f3e6ab246031dfc6a86fe"]},{"address":"0x808b4da0be6c9512e948521452227efc619bea52","storageKeys":[]},{"address":"0xd5fbda4c79f38920159fe5f22df9655fde292d47","storageKeys":[]},{"address":"0x489dc2a0767fb775d851f678babb5a150e2ec6bc","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0xda90f15a2cb0eb801768ded66ed2467608f403fc4b94a8cbff5931df1d01cad8","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000d","0xf318eb6180bf9fcefbc38616da1ebdd433d8c812b72031058da166e6417d6cea","0x17680248dec3a2b31fb321ab941c0efe7605ef48aab86acfc640717cc6ed14cb","0x2018ac9c66a42e968f350a32a98c7eef7d47691f95dce397a62657fb51b63d3b","0x9c624a5d083d18dacebe46f8d8d787009a1c3414eac150bbec20649cf01d77e2","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000008","0x6b89ba675dd260ebd3e7645241a549e9f4159452ea345e27e2a898d0bee094ac","0x0000000000000000000000000000000000000000000000000000000000000005","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000013","0x709cf7b3021c74484e2991069d4c044114525d03ab6d9b0914fa7c2cd637d43f","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000011"]},{"address":"0xb0f47bb61f572c57d5ced3ed752ab35fe9ba5940","storageKeys":[]},{"address":"0x91aae0aafd9d2d730111b395c6871f248d7bd728","storageKeys":[]},{"address":"0x9696f59e4d72e237be84ffd425dcad154bf96976","storageKeys":[]},{"address":"0xbe83fd842db4937c0c3d15b2aba6af7e854f8dcb","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x436c76637ec45821ee451be285588267361632d4","storageKeys":[]},{"address":"0x16938e4b59297060484fa56a12594d8d6f4177e8","storageKeys":[]},{"address":"0x522659c04120d93e8379b8b90675fa3fb4d128c7","storageKeys":[]},{"address":"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf","storageKeys":[]},{"address":"0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000019","0x000000000000000000000000000000000000000000000000000000000000001a"]},{"address":"0x510100d5143e011db24e2aa38abe85d73d5b2177","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000004","0x13d7831de0a876e15144da77c3e1c9af9bc958eaa402e45fd8f2948f5b26e696","0xcfbc7dff249f698c9d6711b53ecdc089a6a98c03ce65d25900f5eae46de6b732","0x0000000000000000000000000000000000000000000000000000000000000001","0x291ecf6a8ffada34cbdfdd1b0877aa002bbd3215a408671f73c69bdd591ffa12","0x13d7831de0a876e15144da77c3e1c9af9bc958eaa402e45fd8f2948f5b26e698","0xcfbc7dff249f698c9d6711b53ecdc089a6a98c03ce65d25900f5eae46de6b734","0x13d7831de0a876e15144da77c3e1c9af9bc958eaa402e45fd8f2948f5b26e697","0x291ecf6a8ffada34cbdfdd1b0877aa002bbd3215a408671f73c69bdd591ffa15","0x13d7831de0a876e15144da77c3e1c9af9bc958eaa402e45fd8f2948f5b26e699","0x0000000000000000000000000000000000000000000000000000000000000000","0x9b637a02e6f8cc8aa1e3935c0b27bde663b11428c7707039634076a3fb8a0c48","0xcfbc7dff249f698c9d6711b53ecdc089a6a98c03ce65d25900f5eae46de6b735","0x8a9a513b9791a18d5272680de0b8170980d584db74d5cc608d89e97f4ae4c892","0xcfbc7dff249f698c9d6711b53ecdc089a6a98c03ce65d25900f5eae46de6b733","0x0000000000000000000000000000000000000000000000000000000000000012","0x291ecf6a8ffada34cbdfdd1b0877aa002bbd3215a408671f73c69bdd591ffa13","0x0000000000000000000000000000000000000000000000000000000000000013","0x291ecf6a8ffada34cbdfdd1b0877aa002bbd3215a408671f73c69bdd591ffa14"]},{"address":"0xd358c08c4db138e272a12bfc12ba19d5e48f5b93","storageKeys":[]},{"address":"0xf89d7b9c864f589bbf53a82105107622b35eaa40","storageKeys":[]},{"address":"0x4976a4a02f38326660d17bf34b431dc6e2eb2327","storageKeys":[]},{"address":"0x49bcbc58848ac642b48f3d824d8b728a1045d08b","storageKeys":[]},{"address":"0xf5f5b97624542d72a9e06f04804bf81baa15e2b4","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000019","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x3edf79a7116c278710f57b5d65868ddc1b05e961","storageKeys":[]},{"address":"0xca978a0528116dda3cba9acd3e68bc6191ca53d0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000019","0x000000000000000000000000000000000000000000000000000000000000001a"]},{"address":"0xef8714b07ddb4b5d696cf9ab5410eab2a0c87a16","storageKeys":[]},{"address":"0xad3b67bca8935cb510c8d18bd45f0b94f54a968f","storageKeys":[]},{"address":"0x41a9284ab19b4ac1b51ba8764fa88abbb20b50d5","storageKeys":[]},{"address":"0x0d9bdd2d61a37bc074e59b2801f32deee01307e5","storageKeys":[]},{"address":"0x683fd5839bf6711be73e6cd5aa4c805d032b96f7","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xb1102f47a14c83410825bd18bad1821f00119b6d","storageKeys":[]},{"address":"0x01a8227d4e7c3068ad1000c97a059af5c5fa3476","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0xc0d1c00078410fd0164580b0bad93d8a579580d06cf45fc2696a823498097b8a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0x01a656024de4b89e2d0198bf4d468e8fd2358b17","storageKeys":[]},{"address":"0x98c3d3183c4b8a650614ad179a1a98be0a8d6b8e","storageKeys":["0x798ccbe29346a5fbfd5a444781e94d0e404758abd7e34bbd55822bd2969d23c3","0x3d6c880dbe83a61b61e484448c4a8fabd735ff864eceb2b2740317b00698e5f8"]},{"address":"0xfd1b0b0dfa524e1fd42e7d51155a663c581bbd50","storageKeys":["0xdd2aaf728de1badb8028337285ba3f882448f8b67d085766ca4e9dcc16e76bf5","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xd037c46e359becef964a4c93f37d3556ea4f4d1b7fc3c91259fd3470bb97f91a","0x407ee88c92128c4fb2d87bccef49c2ed77da8dd4c42d1290e52f65b99d73b1c0","0x088fe431716beda66b88ace281baae3af3de6a810cdd75749ccff0db9b65c139","0x5e0a0998229e2657df643643b812a918a6425fd66f8a5d5ea17a0825d135a0a3","0x9d776bdff006e72540c6bdfa8fb43c7ea4f1a8a42b67468ebb4db11ae2f55534"]},{"address":"0xa3cc77c73985295322f02a469b4c3eb42a216f56","storageKeys":[]},{"address":"0x1c09a10047fcc944efde9226e259eddfde2c1cf0","storageKeys":[]},{"address":"0x8290333cef9e6d528dd5618fb97a76f268f3edd4","storageKeys":["0x164c0d431a999b5e9f4dfeeb03c48841235e3d171aa85ecb5a0f46085a773b96","0xd0105956e73d61f078a756fad8fb1b3df08cbfd5f3933393ed4896cc9e3885fc"]},{"address":"0x21a31ee1afc51d94c2efccaa2092ad1028285549","storageKeys":[]},{"address":"0x5ec4bfcbc12deebbe745d7d92801354fdaa6452f","storageKeys":[]},{"address":"0xa06591252908576a0f64a8560ec0c8051782377c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0x68204d3e2297f872eb73477faa1fbdbfa51c71bfa8f2c8965c0a812935c44513"]},{"address":"0xab97925eb84fe0260779f58b7cb08d77dcb1ee2b","storageKeys":[]},{"address":"0x4dece678ceceb27446b35c672dc7d61f30bad69e","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000019","0x000000000000000000000000000000000000000000000000000000000000001a"]},{"address":"0xef9080ae61c13c8d389b1811b5708fb363f39be1","storageKeys":[]},{"address":"0xbdeea7bfe465daa4456fb3521be86a488cb0a720","storageKeys":[]},{"address":"0x0a4786366744d0b9b8da18b21418839819f8c051","storageKeys":[]},{"address":"0xe3a0c5af7219321b7c770ceddbf9aece6fd0bc9f","storageKeys":[]},{"address":"0xb4d8d1207d121cca5daa80bb866c23f22a98b95a","storageKeys":[]},{"address":"0x485641b97eb6a6824561f412e7e10b78a86d069f","storageKeys":[]},{"address":"0xaac31c17ea10868d540d251d70734e1c4172a210","storageKeys":[]},{"address":"0xb37d01dad927ea39c8d0aac77e5c3401614df47b","storageKeys":[]},{"address":"0xccdfae588bf1021af8ab44e3c2278dc93c5ca68f","storageKeys":[]},{"address":"0x6704ba24b8640bccee6bf2fd276a6a1b8edf4ade","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004"]},{"address":"0x47312450b3ac8b5b8e247a6bb6d523e7605bdb60","storageKeys":["0x7184681641399eb4ad2fdb92114857ee6ff239f94ad635a1779978947b8843be","0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24"]},{"address":"0x1b69a61ce5e513d117ed6b4468c17caa65a9482d","storageKeys":[]},{"address":"0x1f9090aae28b8a3dceadf281b0f12828e676c326","storageKeys":[]},{"address":"0x06cc6689d7b1a5cc72a7ef8d1f34e32a0895dc7f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0x3802365eb5bd7a6bd842fff1712dc22ea643d2ec","storageKeys":[]},{"address":"0x07cc1c55559f6d2ede4f5fcbe5dc00e709ff2b60","storageKeys":[]},{"address":"0x66538115c011f038bcef6d315e5ab708aba1c139","storageKeys":[]},{"address":"0xc2500bdbcd6c796ee773517ea5cc16e641e6536d","storageKeys":[]},{"address":"0x1885de8f5773e09cd01c2246508897a40de06160","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","storageKeys":[]},{"address":"0x196fd74a25c501d265fdd2d2060a56f09feaae63","storageKeys":[]},{"address":"0x958c2f111fb32f63f51bfa028228a99f6948c68a","storageKeys":[]},{"address":"0x6c2f2ea95392f22d138be349061bd55e18e0d946","storageKeys":[]},{"address":"0xe723a79bb72b6e7aa8f6793c919c776499f65aee","storageKeys":[]},{"address":"0xe6680d000f3c27b148e61346549fddd682e7cca0","storageKeys":[]},{"address":"0xa662f3ba49baa8fc47a65a8c60cf6e10c015e891","storageKeys":[]},{"address":"0x55fe002aeff02f77364de339a1292923a15844b8","storageKeys":[]},{"address":"0xb3c8a4d882533bb072542d2f984b0b5ed91d246d","storageKeys":["0xaa7e57c8186bcdd6053b575b17d4cdbe2fef89cd6b5ca7ef6494fbe1f9f66b8c","0xaa7e57c8186bcdd6053b575b17d4cdbe2fef89cd6b5ca7ef6494fbe1f9f66b8f","0x0000000000000000000000000000000000000000000000000000000000000007","0xaa7e57c8186bcdd6053b575b17d4cdbe2fef89cd6b5ca7ef6494fbe1f9f66b8d","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0xaa7e57c8186bcdd6053b575b17d4cdbe2fef89cd6b5ca7ef6494fbe1f9f66b8b","0xaa7e57c8186bcdd6053b575b17d4cdbe2fef89cd6b5ca7ef6494fbe1f9f66b8e","0x07df5dcb11728897fe45be352ce3b1668d72476db7654902ba25e4b2beb5baed","0x0000000000000000000000000000000000000000000000000000000000000006","0xef02b428b8c6bd5944ba90a63343d128b47a6ff0be582ac1f365506dd06c1b06"]},{"address":"0x3fda25f27211a138adf211f4c060f2149674be6d","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000001","0x000000000000000000000000000000000000000000000000000000000000000a","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000006","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"]},{"address":"0x762340b8a40cdd5bfc3edd94265899fda345d0e3","storageKeys":["0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"]},{"address":"0x0b981d98e857c888e00d2c494d24dc16a12f8f3a","storageKeys":[]},{"address":"0x183a6cf1fc6504138d92c9d663094ee774f80038","storageKeys":[]},{"address":"0x1d8e8cdfd7d5a946bb0ae2965ae44a4b6f76d2c8","storageKeys":[]},{"address":"0xda3ca7fd218535d78ea9c351723e38f01591ada4","storageKeys":["0xad91bdf316595464714a4f9b2538304767ddb9763115d960efc5cddca3d04ea7","0x684171f71bca4cc6bfb1c3b466138198fce7831a43f9c3c840a03da1e5e476cf","0xbca3f838d730ae2728eba81f5806986786f6f12f7baa90e2f78e0fabd83e6bfa","0xa0ef59b4a0464d8b6c2e766414385e70c3aa2b5211b6e4ce24d4bb8583670423","0xeb40862b1d6c4ab7ecfc5aea55b22c875e4ab0a78d1a611b68c7ad49f7631166"]},{"address":"0x6de5d1c8e7d4f4899ae697ebdc0950c86a5fe29e","storageKeys":[]},{"address":"0x2f5ada12977252feaccc30161aef856e4607d2be","storageKeys":[]},{"address":"0x3f9cefc546a8e8a99a8679e4eaab6c7a205d14c5","storageKeys":["0x06388ffdeba23b161819118d98fdec1aee658dfa589a7ab8d1a69a650319e541"]},{"address":"0x6edf968da408a9640b8865826429a977a11c5048","storageKeys":[]},{"address":"0x390f3595bca2df7d23783dfd126427cceb997bf4","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000001a","0x0000000000000000000000000000000000000000000000000000000000000016","0x000000000000000000000000000000000000000000000000000000000000001b","0x0000000000000000000000000000000000000000000000000000000000000019"]},{"address":"0xa2496639f55e23c758e307693a15896bddc3a188","storageKeys":[]},{"address":"0x056fd409e1d7a124bd7017459dfea2f387b6d5cd","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003"]},{"address":"0x32d77a95a359ba51790b54cb052e079beb852de9","storageKeys":[]},{"address":"0x6cb3ee90c50a38a0e4662bb7e7e6e40b91361bf6","storageKeys":["0x98e24e2ef8a5b861bd7570ec0d03f954502d13fe8a18f87752ad6e25748ae75a"]},{"address":"0xac80db567cb2c95995e31bab2c2fb140c20aa4a5","storageKeys":[]},{"address":"0xe16169d9fda471915d8e5d0f9fc197e60eecad92","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000000000000000000000000000000000000d","0x0000000000000000000000000000000000000000000000000000000000000009","0x0b37903c5d83399c9bb463007fa09043c453811bd9be56788366d19b103aeb1d","0xaa69a36f51c5e9620c289306b11c6fc2bd0473378cb7d42100f1b628e8dbf63a","0x9d8c30166c451c1ad833ed6ce91bfdf91c26c5cfe936a74a3d3d8733a134f63d","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000013","0x8d6d63b6e5ac5b75255cca0d0a178713a1ea7a55972d31894f3f02f11fe6e04a","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x4585fe77225b41b697c938b018e2ac67ac5a20c0","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000107","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001","0xa00e9f45e9f0c328446d13a90db1b8ff531c4946ba6a4294a1ec03159cc44b19","0x0000000000000000000000000000000000000000000000000000000000000106"]},{"address":"0x65ff6396cbc816c6228f9950b379639a3c59db35","storageKeys":[]},{"address":"0x96c41145ef781e708f964e1f3adcaa7b5362daee","storageKeys":[]},{"address":"0x7b98421b9314e3ffc0b7a593dba2fbbd3b789c7d","storageKeys":[]},{"address":"0x99a5995bd8fa3e1209a5272c4c6cc3365cfab0a8","storageKeys":[]},{"address":"0x5965aa32f7228ee98dd719223d2a56e323fc1b80","storageKeys":[]},{"address":"0x8aa1907d79e6550b4519db4643d91cff099b2e4f","storageKeys":[]},{"address":"0x43b57cf089e9913e10ef5db68f22f4b9eb3955ff","storageKeys":[]},{"address":"0x82643b1d5aef4d8d33e401ec740a19d416296af5","storageKeys":[]},{"address":"0x253553366da8546fc250f225fe3d25d0c782303b","storageKeys":["0xea6fa780d64bf3048c7451cabee352f576414b4390d6a804e339aaf70d0e4d61"]},{"address":"0xdfd5293d8e347dfe59e90efd55b2956a1343963d","storageKeys":[]},{"address":"0x44affdf87abfb1dba08e444141bd21b4380fa35f","storageKeys":[]},{"address":"0x9360c489056b64d5003bf22f4f31458e31cc8028","storageKeys":["0x11d4878f38cb02a2aec0b48814f1adc17c786149b4c9b2fd3cb835b82255b78c","0x7d99187d1873de6d33dbd2deb14dd0551b0a956cf666dbf2971d7aae54ef3f25","0x000000000000000000000000000000000000000000000000000000000000000b","0xff80cb5d74f875c4c9b96b4a2bfd57cd852a68009b00a5a8a4faa6ed4a2097da","0xfa21456d63d8f5b69fba20e5a869692a200d1017783f11111a212ac21c5dd9a1","0xc68df7b4e42bc12527e4b5dea0db1f252230d177a57a98542f41645f8f8358b4","0x0000000000000000000000000000000000000000000000000000000000000013","0x000000000000000000000000000000000000000000000000000000000000000f"]},{"address":"0x4a585e0f7c18e2c414221d6402652d5e0990e5f8","storageKeys":[]},{"address":"0xbfa7fc8681fa1e1bec716e5308687467b5b10434","storageKeys":[]},{"address":"0xfa103c21ea2df71dfb92b0652f8b1d795e51cdef","storageKeys":["0xc82ec873a6c5c50ca9e6566fee5dd50dc037203c45ebf85bc4e1cf94fa5db768"]},{"address":"0xcda72070e455bb31c7690a170224ce43623d0b6f","storageKeys":["0x9ed27f3e2683378f15b688de9ddf40d0fe3bf7aa5453c0cb9416cffdb14169bd","0x9ed27f3e2683378f15b688de9ddf40d0fe3bf7aa5453c0cb9416cffdb14169b8","0xf9bed5247993478dc5d16f0c77265cb8795360b0d8437aae5874ef087b36ebe6","0x86bdbe699efc3b109b89a74290615a1759051acbbb3ab204ce35fa12ed984ca5","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000b87","0xabd35f888415c1753b0d84994f5ebd9c98a536fe126a0df2f09154201ecd9e7c","0x000000000000000000000000000000000000000000000000000000000000138d","0x9ed27f3e2683378f15b688de9ddf40d0fe3bf7aa5453c0cb9416cffdb14169b6","0x9ed27f3e2683378f15b688de9ddf40d0fe3bf7aa5453c0cb9416cffdb14169b7","0xab22874211e42fb4ec366c8658fcd853861404d5b08b34140a1e40674f62fa17","0x72c191cc1304cf561ec8642be2d38b04875baf1348cad8d58a87e8f0e6e0042b","0x89574835f702678b146205bfd1cc761b9001d8a7c34ed73ffe1594067acbb1bb","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"]},{"address":"0x495f947276749ce646f68ac8c248420045cb7b5e","storageKeys":["0xdda57df4e870409926434e5b0c4c253778fbe966754b34b80aa2c8cc9ff14de7","0x3a172cce141575d8528157bc701b0c730c30f8908b13eb0ffe40a793aa643132","0x0000000000000000000000000000000000000000000000000000000000000009","0x1bc16e4ba07bd6e63f05afe4bbe02a5a5635e067c7ca8f7c86347a1eeec4112a","0x6cc219b0d8bc1e527b4b91876084e02e932d1ba5d8e17771c501824b3f1b128e"]},{"address":"0x09e050f40b3ccfaa568680bf0e459cf8dfc4157e","storageKeys":[]},{"address":"0x64bc2ca1be492be7185faa2c8835d9b824c8a194","storageKeys":["0xd0f22434ae801684604507b0f916246281c85b35845b3101e7af204047f9ba8b","0x02e7b28389f232d3ff086b915490d996ae81376004584f04b62d24929bbfa851"]},{"address":"0x7df70b612040c682d1cb2e32017446e230fcd747","storageKeys":[]},{"address":"0x813ffae25b9b8c909ecc9e2f9747006e0b43d16d","storageKeys":[]},{"address":"0x3c11f6265ddec22f4d049dde480615735f451646","storageKeys":["0x1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0xfad45e47083e4607302aa43c65fb3106f1cd7607","storageKeys":["0x5de8a9a8608a25ea2149c44c6688f84ad6dc2750a9c9a2a30ccc8b52134413ee","0xf9e47bc758ac4ad062d6f5e4396dd7687f046ee4d8af5509937c4cbfef37a918","0xe81fc8824ca636e7885995b240a9317e7d7a5d62ddb4774f024d0a65755ab117","0x0d80ddd128d9961c8eb52e7a2730e4bf9f454e0830fd51e14407f7de9858eb1b","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0xa2e6f9ae7e5a6976e991a0f1d1a6423d90fc5512485585823fcf930f155497da","0x5558e77ec5ea4a1abd00515f540d76026a0f4d32a192b5d5574e8795fb743daa","0x7b758fb15bcbf67d69307045a77010c2ffbfbccc2172bdf7ec5c88fc5c2b6883","0x0000000000000000000000000000000000000000000000000000000000000005"]},{"address":"0xa4fc3b806b041644133cbab7322d5c339e3bf289","storageKeys":[]},{"address":"0x6d542032804c31a6f2a945eb8b7b9942ad05695e","storageKeys":[]},{"address":"0x5ee4182d976b3f3f746085a9eb814efcc23fe807","storageKeys":[]},{"address":"0xbf94f0ac752c739f623c463b5210a7fb2cbb420b","storageKeys":[]},{"address":"0x81321d9c5cfa21e506804308070d2b0f0988af7d","storageKeys":[]},{"address":"0xbabc7768584fc8f9d2a44f4b0abbc60d3b6e20b0","storageKeys":[]},{"address":"0x712e8fa890789e98a058277e69ef1806d952b79a","storageKeys":[]},{"address":"0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000002","0x320975846a116b11411a5cfde94c56d7713040529fd53bc4095fb1022e45da01","0x0000000000000000000000000000000000000000000000000000000000000198","0x0000000000000000000000000000000000000000000000000000000000000199"]},{"address":"0xe17b8adf8e46b15f3f9ab4bb9e3b6e31db09126e","storageKeys":[]},{"address":"0x2889302a794da87fbf1d6db415c1492194663d13","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000011","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000012","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000009","0x0000000000000000000000000000000000000000000000000000000000000005","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000019","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000000000000000000000000000000000000000000e","0x0000000000000000000000000000000000000000000000000000000000000014","0x0000000000000000000000000000000000000000000000000000000000000006","0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000a"]},{"address":"0x102c776ddb30c754ded4fdcc77a19230a60d4e4f","storageKeys":["0xf92db79275607c63b17540432ae9716dabb49afffeda41d08e1e5983746bf17f","0x0c53c9be7a44133a6055bca7a90b2a9f08297a3ac104866dbc14f2d1a4742440","0x49b6a19b11278e1931d2d2ea0cb8ed7dc06efd7b4db8cdf04f81609cb57c3152"]},{"address":"0x60e4d786628fea6478f785a6d7e704777c86a7c6","storageKeys":["0x0db52fef7ac1e68d90cf210ff115fb5ba93ea209bf93946cc5eddf5ac1cad283","0xfb4522ada2189179f8dc298bb297ed4cb70263aa7edbb557aab139c9695be5e8","0x8e77eab1aa2d4973dcff86cade1383ad357bd254e574f6df40d266340f53df26","0x43a0d0213bf1caaba7ed8ed43376d575e467a447cccce8dac9f0bb0c3e4dec42","0x9fbdd789dde3469194f6a705ec8477347176940f0e80330d3044a72a223d2820","0x79a4d452c55560a09894bb1499cd87bae5eaf26e1250f7aec635dde4cfae0512","0x59d5d01e7401183e7d3d5e0b35a1bde0fda576aca009ef4b5e1a126b91a8e46b","0xbeb927c11da198cac04ec1d81f444b65cd1d20976d028ad6d4f26608250e2e66"]},{"address":"0x737e8a8b5f36a388638285d558f80af7fbcecb8a","storageKeys":["0xe52269ae564610856d56e338ed9390f2ec01c35e17f0002c27cb5853b87ebed6","0x48dd75081681b92f9a19c433ca1b9f0d3d78280b9a4c275b2c37559f8fca1cb2","0x5ac6d4be4e02314ce9abcf7ab6a6d1e10a52c7b923194d53cb1e5c6c8a1a3826","0xf2ec168eb5f145359355b5f1959fad560aab1521350ac467b1c75e89ea450712","0x0000000000000000000000000000000000000000000000000000000000000007","0x8962cc3b6af7d5d5edcd7e5e1b9c92d160f40012ed1fda69477c3187f09b09ee","0x8793485b703ebdf444b964d20fb9d47f22f8c33c27c9cec4e6e1060e9d06431b"]},{"address":"0x6c3ea9036406852006290770bedfcaba0e23a0e8","storageKeys":["0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0x0000000000000000000000000000000000000000000000000000000000000004","0x753dc6eec079d2847df83351b4b8d748b683602de39157d548e2725b2d4985cc","0xb7cabaa64a97d062266fae1066d0e9cf7fc8fa1ef26cc174e043956c752a361f","0x53baa87b079572ab05ef794a999f3409b582ee2b112cdf59f65bd75c272cdf5b","0xf7bf5693159a0296acb909949d160ef1224a2f70d7807896ace70b581ba794d9","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b"]},{"address":"0x00000000a991c429ee2ec6df19d40fe0c80088b8","storageKeys":[]},{"address":"0x5cd0ad98ba6288ed7819246a1ebc0386c32c314b","storageKeys":["0x23863ac85e56a9dce6a22321f49a3501475e9287498cbc70613b3c8cbfb68976","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0x28c6c06298d514db089934071355e5743bf21d60","storageKeys":[]},{"address":"0x30252e9c4939c78e816dafc3c5ba85f795b68ae9","storageKeys":[]},{"address":"0xd0ccc331f506c7136f60af96eded503fa9325e16","storageKeys":[]},{"address":"0xa88800cd213da5ae406ce248380802bd53b47647","storageKeys":[]},{"address":"0xd0d56273290d339aaf1417d9bfa1bb8cfe8a0933","storageKeys":["0xb17349740b669941baf55dc09d27353d5066f7515a585f533b40596bae334695","0x884f7af8de1a839be5dd78276d8e88301081df8906d2f0dbf317dc73ab5b3785"]},{"address":"0x31ba6d26bed04a9c57ea29e9e1d2fe4ad47fc742","storageKeys":[]},{"address":"0x5f20f761e3295c4000eda5e193d5e8d615a3173b","storageKeys":[]},{"address":"0x2d7ad24586fa7a37793d09a5dc1a23ef3ec1c468","storageKeys":["0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008"]},{"address":"0xc1c88785e9b5c9c85b3f6c99255c3bef9e3b14a7","storageKeys":[]},{"address":"0xdf0040988afbf833e01b066e62c533e1f9e1fea5","storageKeys":[]},{"address":"0xd2eb2b74a54810d4ab7f40f1755ac8886a32d04c","storageKeys":[]},{"address":"0x4150b9603bd87ae5c1aecdf4aa348699af1754da","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006"]},{"address":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","storageKeys":["0x652d9f5f997b5f97e51c16692541874ca0fc43c98a2aeb85fb26080523d19b3c","0xade11d57f3507738da5732bcfe92a97b492528d4936caf6db8e9435f97ffdf7c","0xc55094e10dd4285a5d505f3cf2e60b608d125b4dda75794f39faff26ed911166","0x7f7203a2058a84ecf5c8f273f70cc7a8dcf56817eb23737e10d311cc0645939e","0x0ab58d56267315b348dbc341e0a9e437774da90ca5cff1fe72f49ce8bd7b0616","0x006b397494d73917e338e799d3425c97218b23605e900f757da88b0e95f62ce3","0xe392a866ce3af318d7e4e6c4e77f4984c9ec10bf9fd7236d1149734fd0a9201e","0x86ba3ded4b0139039c811809da71f46e8f55f5f71f58d40e9afee4798c0fe602","0x65c375c7599fa60be96ec5cd9e11e971243fe7aa688e0fd5733d1f0a163477db","0xf7bcb3e3f878e3f98fe5f78303eb156247e623aaefc5d36ead5c4de7d360bc50","0xe6a9f39063407d4358a1f0f522bbf3b830a44d9664095275ac643f9b464f227a","0x0b8a7e87c24f5d537d642858d09a91be86fdf4df52568c92819045e308a16b8e","0x688c3e002289fcdae99fec728919f8c58bf4a63597b51cc1c50519b02f2fbcb4","0x8952f11a28370b81a6fde973a4500503dad313c52fea41c3f6cff659aecc3ec4","0x52e446fa4ed99aa901145914748e932382fe15b50f063bc34357fe61b3fbbc39","0xa743409e35c9b8ba7979fc827ea69d7932a6865dd7b2917c84932da1b0c0d28e","0x56ebc994366a62c777e947e09b3700e6df7595db04cb4faa84997be984d30d98","0xa68739a1d5963494e4a3668e03db30668b1e0b9f7f15b32ae71197796736dc2d","0xab8653e182d66c8e3913ad65bdd1242570b13dd7b282f7091290d22a98d6d139","0x15afdbd81421f8919789af2e1429235108b484da1839acf2875840648c5c7476","0xfae2b57c0dbcb03b987aa0b81d3794d7770ebd1eb2f8093ab7520a022b679091","0x7e37db77d7b4ecce61487c082463092f13f68f86e67510d9a1965c26bd765962","0x6dfc3055bc2a382f15970adb34c5e72407691ebbec5e1ad8fa1af139ae602141","0x73965bd60672e44c2dc7fa955b980c15bc90734c8efb1723bd99d1b99e70c793","0xc87c4394424eed933585252cdc68e118b6f654e86e921d6c00b9ca14d7857207","0x7207638b97a836e420b5a589358d78c521c2436aa854cdb08233148b0cec6472","0xe8fc2593162131d684821f109e149650b93c4115201346ebf25bfa4427e34987","0x39a528031c821151a0357442b7ae7ecce02aeec01c8255f8ccdd708707e959c9","0x979736774f589820adf4f8e55c518faa23895a7b396c0bfb390dc0236bd1ba26","0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b","0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3","0xbb5864a076ae8e7753e0d4ac2c76072267c6d29d2414ed69905a9d29bddf0108","0x94ae115ebba1f0740a20a15df616ffab6c27b854fb795b9868e5222644ca101b","0xa6fe96299ff0e4cb6c4c51fe56c7601ba1ab418c635f532468b68cbe9e7ed57f","0xc55e228f511308150874de49845c51312aedb276bb5c51a28704f462f74352ff","0x89699e3e37cfcfd00017a28dcc1f89bcc8204ecfc61fe478b0cb7e46897b1ca6","0xa17ee3403718b12b5516b501605e11f62f70223d5a39c422201db9668fa83066","0x5061802a03d635796e1d7de25b91df361e46df671266b83ddd1da425a559bc39","0x61a50af710286a981638e6c47a4a314578a1dadff296e09fb741c5506d4fe7c4","0xfea107046c7bc4c4541e8a89f285b5920d226d60ade521e2341aa0d495e995c1","0x7b45abe437c4682a8ec98870a87fbe031984828bba27fc717e4a8825b562640e","0x2e1cef28272cd277cf67a219816c70c9877674ee855da442865fabfe77161e27","0x0000000000000000000000000000000000000000000000000000000000000001","0xba212c792c69e3e201e5a246ddc30e309e54563370d831947f7ef2a97a43f41b","0x749878fb8d62eed37d5800bd02f2ce973ba13375415e68b74ff303f7158e7182","0xf5fb98b5a92c92ed2c7e22097b2d6e1f0a05e723390ce2f448fdcb655dc2863d","0x9341eb2ed9e88e3aa5e27de8b1fd750f2acff3fb5bdf63de6f367ea4475fc6d5","0xfa9ac48faaee568b7f72a3a19be660d254ad3422b0b09692ed8a8f785dbf4ad0","0x3e4b759bc7348364c10367783c1ff870df4051de361c3bcd6b2ade33c84aa710","0xa545c2690686f37ebc3c1b41222d5889a73d178466a6ca3dcb246b8b593c6737","0x86405c6213719b5e63a2513b579a0631b147e7e06935d7301805b2237936c17d","0xe950ca2c7f2082f2d5b21f0595e3647938578fae29611e88e1a0818815f9ca40","0xc9c9828e1907827d4d7f6a8ed266ba157da9d4cea3364aeaa07338ea8fb173e4","0xd88f6cfd89dcec527072c11cfb20c07c1379e59c09883fd2db8799f54dde725c","0x23ac45fef68c977e2f5bc2c50b9d223748b3d46a3bbf1b70580fa502e02e8c82","0x598ec8a898ad8bf227c0c980c790d87c47401aab72bb7104ac64698200b82660","0x5324ab947d8d46b24e1c9c13b7763c61b6d2597164be887dac5fee7e1cfe2f4c","0x1f21a62c4538bacf2aabeca410f0fe63151869f172e03c0e00357ba26a341eff","0xd4ed0216ff6d852ebc1a82adddf442f64739833d085051c7c0e99c354a6a773d","0x45544f144ac23be62f2d1b3bbe9593176ebea62c731b38425d489a7b202f73e4","0x9c1bd01eb136da68a31672146a239cf3edbdcf00587b9f997e59dd826943ba6b","0x1c02d8ad8a92af61948fcf310180faeb3e042273d345f868b8bb99130f698ba2","0xb6fc83e68c32ef51ef1678bc964cb1dcb58449d9dfd5bd68accbd31ef3031f8e","0x390f6178407c9b8e95802b8659e6df8e34c1e3d4f8d6a49e6132bbcdd937b63a","0x57d18af793d7300c4ba46d192ec7aa095070dde6c52c687c6d0d92fb8532b305","0x07a1af68f3001ecf7768f222017b4ada1987a76d04b24cb424c1846c072b042a","0xfee1fad047ec04bbb7379da05703deaca2b5d734ed74e7024c97ced1e7a07caf"]},{"address":"0x2cc3941d7e7a3fa5d55d75b25748e497e4f83c46","storageKeys":[]},{"address":"0x7698136f5a4334d684bb9fe24cc5b0ce9eaf9b6d","storageKeys":["0x461721ec8dec958003275fe9ae165e3b46a158aeb477811505cf39ea0092fa4e","0x406cf63eb2bb773c07773b98f5ad977a5f9204b76304bdfd98dd4b5d39a5f444","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000009","0xe04b4dea4cc1e0b44a4ec85a5d934dd4b57d65e922b5b792645880892918c37e","0x6926a48dc3e59cab33f7d4d2a3d4d1a219c18068b4efef522e25d5a717e6e9ac","0x23f0e42c5d41cf4336aa90705abdac4f268915c8824665e69390f7d0c7997606","0x000000000000000000000000000000000000000000000000000000000000000b","0x0000000000000000000000000000000000000000000000000000000000000010","0x0000000000000000000000000000000000000000000000000000000000000007","0xcb92b1fe78423854fc6429367a715be45ccbfe565e18e971c41e8a73d64fb816","0x1e4651a8fffb758e6cc1eaa3ebc1f02dfeb43d6948d5b61e6b73a38607694091","0x6a5c9f717af2372fcd4094ea59ef675788f62bdda578d311065edf5011ca9f30","0x0000000000000000000000000000000000000000000000000000000000000005","0x000000000000000000000000000000000000000000000000000000000000000a","0xd71e250b79e6d4cde70a94636ebd2b6274cbaa8891cedfff4289bd1e5706a7b0","0x4821de4fe4d96b6f3c4523f4b09c820be2bd391e8ddc3374c8d8b286aa133358","0xa6089659559de7ba94081fff6316dfda593b3fa0de6c8097f6a3c8fe0e895727","0x0000000000000000000000000000000000000000000000000000000000000016"]},{"address":"0x3e88c9b0e3be6817973a6e629211e702d12c577f","storageKeys":[]},{"address":"0xdf49640412a9c20e0c682a32d5634e8329b01ce0","storageKeys":[]},{"address":"0x3ebb7644beb54b0bf7e025d8c57bf6b510219eb0","storageKeys":[]},{"address":"0x4755e870ca2b6a14bde1f6e9c609127d79d45d55","storageKeys":[]},{"address":"0xebe080c88f6d65fd055aaf0ede7b431eb284450d","storageKeys":[]},{"address":"0xba3e9eb33debbee2034e79c22179529cde748275","storageKeys":[]},{"address":"0x743bde31afcf7dc99a3114cf2b41461747c8c038","storageKeys":[]},{"address":"0xd5ec6bd06614f65ffd6428130d8015875dbb22e3","storageKeys":[]},{"address":"0x415ff1afc201eec50beff210a2f456674046920b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x637034ff9a9768ec1d42ca6e42f6582a3447eb554d12d9f5461218dd45d1b84f","0x17689189b141d9ec4da970d3496672f88dca32f673cb742ad5dc8439c78cc0d0","0x0000000000000000000000000000000000000000000000000000000000000009"]},{"address":"0xdac17f958d2ee523a2206206994597c13d831ec7","storageKeys":["0x70515da04a4268741351ec855f9d235ce7d119b0e688543cbb556e75959dd03f","0x80c5ef2938ffe75df2492b36d511e68cb42632c695e6936f175a3efb51754606","0xf17c13ce4220b1b08a2f36a749ac31c915354ba67ca82a5c702217e3df0732ef","0x8032bbaad8dc69cb68b83388864605a6aa8ca1caae933b253bd93051aa37ad0b","0x24d38a466cd7bc9bf1cd75011322bb22e9eda9b8bf645c742e535e0026124fb7","0xf14a64371dccc87933d80ea6145101595fc67d31777c57bd9fa28fd1fb3000b8","0x7bb2ca684b19ca6a6c3db6aeaacd28d84543a3d093f90efb4943d686a6beee50","0x1ab66521618382b7754fcfb711212a760971309243a4920b7ac40f27518fa567","0x35eded437486b44d295479d34b8303007eaa09345cc6b9c15e99847ed5aa5523","0xcab7eb7f9df34064c3b626ce9079b9f6b25fe8559af3619dabb1e996461f59a1","0x11385df8cfe735e28398c8986e02c217b58f4eed7fe5cc6a7025fa0b8fd5ac43","0x090f09a74c30d3ee3b887c2a1998edabce26c9f7c7230db03f1f6dbeb0212d41","0x0c4a5b1497ee916636123968e453728aec8c2ff04a52d2fbec575d1056cb67db","0xdca09a2414aea154b80f7ad7e5f86ed8e6fb7bb71975ca2a9d4d3b364658185a","0x169228ca33ea854d54aa1e506e59ec687f618a41074f5f5de937a0e9c6343e5a","0xc272448af2488f07397e9ec9edc81a4092731e48a0a0b1cac645a27a49b1eaef","0x0000000000000000000000000000000000000000000000000000000000000003","0x5e64a352c6c978661601bdaa007ea81d5b4871e100837fde8ab4262151200193","0x623ae24b3d164fe3f0ec514d6c96baf40024422933cba682a003769d13f6a56b","0xb421ada65e357e7c9b681e7221e0cf816ea9cbb60f1ff1bf330e0d671ddbfb20","0x3f2e9ab70b73cab52e9f1f7e8a86cec8a6749190504b976b6084b532e43caeb8","0x4e340e511510a8bb172b54e0d3a7fc270ef3a64918df5232c4fa227fdfd2b9b4","0x5ebb1baecda4a71b84910865b25698fec8628083f9292b908e713ac651882a5e","0x69a105fc0f20abf8da4d109695e47e004964dc597456981021d48bba7bd1280d","0xae27e7fd593a51c9e99d3b3e6f880a13cbb48f81385fec69eea28f0c645d8b79","0xc3fb3728d2edc03350492bc149be59715187a17c46075a177bbe5b4d62f15372","0x63880018fa6d02bc2f3010e9f93d3bafa5831d1aaca923c890a7a8c3760a194b","0x31fee813054e2af2e7071596c45806e18a66fc239a368148733c79aa7eb7625a","0x3f24db47a08331f722f9f1dda1b01577431eb91d7f06e6f7bf96da064a998b11","0x462f5cdd8d97bd77492c481d64e144ad5e3f838c7f34529abfdf0095b1dfb516","0x6cd4fde347ba644f94b4c6b4a489c6a986c5ae549289bd2a7a749ac77c3930f4","0x119092491141f390faaa2a2e3b665c12d0ecf60aec5e3b901a2b643b52d9f2be","0x8f609bbefd0b0ba708e799156128418cea8f52187e06c10c35fa37d098c4c415","0x8ae4c49301282fe97656bdd045bf96d92c9b0c5d4585b2cb90c2015d352ae4b5","0xce4b548783a83143173f094addc3554cd447b462fa6dc74b87a90ebd6d0e297b","0x699c6015da84cbbf22282922540b46b3995d68e4c9fbc689f4eb1d761fe74d4f","0xb0985aa558190c58b53dfec81e9426e26fa99b5a560fad2d30098e61930ce34e","0x84f7b98705b836313ea492b8e1c52ee4ab5c7f32f55ed36a0295f547da157f19","0x66f9f462a0c1f0da52ff4c96a06d661ad1bf36c7cd4f4f04334b541d313ca606","0xf28e2e51f965bf951ea03e6cbe230874c0b359dabb90297cd31e0bb21820aab9","0x63aa69b65e900f2d97214c8621703f5de732ef270a5c355c82e9738d1b0ff8b5","0x61806a02d55d0d0c7620a27274300f3809bdab323ae2059c88e73898fec468f4","0xf94b05ba7d0a6aa6692eecf3cf30c6ca5d527c3e5fd03d7081ff14e4910ec033","0x6f82e09671e6c1b702bdedf3da7136ae074f5186e5ebc4aad241743330cc877e","0x1dc754466176cafd659b71e627810b7db358ad8b15914bc81ce1bff0569cf71a","0xcdd86836dd15bc4aa53d67185c5dbff4516e06e47bf6eff996a2d22c964a929e","0x047c854e050cea9a8fceefc1bb3919b6b6ad503f56deaea8be402b7c6d0e15f8","0x0c364b5a45c8ebf44d74f264b66db287c69aed0c994de7689326ba1d8a2e1256","0x931345d8e8ced50140e2e3d00b4a7e43d321517f7866496b8b5b5437b3370b77","0x87eac2970b370f009b8cd5258ea75fbd37e8d3bb5a9dd2dccb07a64cb52014af","0xd10d94fae5b609534af68d41069466722b7a10fdaa850afd2f5fa639efb2d92c","0x74a12ed2cb4d7a6186e5a4d44a36ba12de08157a3c70394bdfe8b950e524b255","0x9993c43a52480555a41d8212ebae46d368e07bf35079fccd80120dfc140a435a","0x2d63c3db42d241001776f2689e0d9bd25b4145b7c66bd878b98692ec847eb2f1","0x6377c278549216f0238d78555a835e7fd61fd3b7f83503bc6a38b910b57ab0b8","0x5109b62eb99f58f446282a6d76354122e3d8dd1ad9c6e4431e6b36667b055752","0x529076023d964f2cbd34b5184674442cd5a80e9d288c1a0e828477b906b78f0b","0xb8e28a4882605b805b283fd5ea07dbca9492afcd74925d81bdbf8074acd0a6f4","0x2cbbbad8ac0df7bcc4f545be21ab04b9959c4d49e36588f40ff126e28fd99f5f","0x78b35599871be95768b2fdfaf9293a4491ecdc8ef25b872ee404fa1e441436e0","0x7e176d7ee1937cd0f5a8d9708e47ae40128dd18307fadc9929da995c37d66fdb","0xbe97063f705c4f52dc4414896af0483081bf44f651aed7a2d6ca49643212c646","0x4346a6b1edf28d1fb579ec754dc7e1adff7dc4ce9c10c3f82b7ca327686dccc4","0x3ccf4584abc19c4830ee26723a1c679bb573712089c5bb96d965e3c66eb05d74","0xd6a434565a929fe7201160bab31815e2c4f6731e7db296ef87c600ec3942b722","0xf7f8b29625c90073921cf5324f917c48425bd90af9092f36da22dc63c7dcc266","0x997e085bc66f893525d11aebd1e6b39a0ab953b50c2f2180b1d25e6044eef73c","0x82fb8d2ad03de93b40d6d2121be068d270401754dfc447fb3116b2482e485c89","0x03b40e77a1629e4bcf95993d3c26c510dd924be13b972870a97164050a14561c","0xff2be857ca28476d23dc004b4ef9e7e8456561d21a0724a1b1dc6e29f3adbbe4","0xe01b06860ee6c0813dd5aa11faeb831db1257646a10fb41e2296ce2e4249dc2f","0x51557c3b9a605592682a4416538663403062d0607b892510562e70819e8c51fc","0x0b215c0811b6422da01a6c06be85f45d96a0aabcb195988380110a45330d5eff","0x7d52c15201a656a81204345a246938e1282ba7abe322bfa3d4b857637c03051b","0xa99a8ff891f333e1b49b1ae56756608e0e5a8dbd4f778afbb4f2ac7236562ffd","0x639b0fad8cb3c3f822c7f87d4faffe54b8e4515394bf43d17915df9c544359d8","0x9314eba2da1961c7918b8ba334edae41be78b7e0203ab269da4dec818126e24b","0x8d0043d78dabffbcd1cdb1d8e91c8c1e7ae3e6e3e414067b68566e80eac13178","0x173d84d6644ea5a602346a6b94ee0fd15ce7f59dcfc66414edbdeb89b7337b55","0x253a19d5d3ab02a1626ac8733ff3c7a807df7be9f3943783e58c4f735846fe5b","0x0c31fb571024f4eebe93d7b29baf4d47c202ce8fee58f03b15a5f77b947b0944","0xfe875e7ac35f1b40f466e78bc1e513d0392f3de308bb3680f16c75386765963f","0xb5387136582fa7e5eae5a3afc1f0188a888c4077bc055e708ba3d5a854bbd95d","0x38276b09648ee547af25c4dd73a8799aa36bf8fd5aeeef3dfcc6eab091c1f80b","0x0662e18bfbacd3c4aaba02032a3aa60074af4161eef40c7929bd1d1b792795f9","0x00747415244b58f7f02194695b6659b19c98326a90969cb5072f02b63b055356","0x94fdb57b6c90dab658eb75ae5356b7f719284edb8c2ed9fb7831ae6f07bb6d0f","0x62364ba67a8d1f69a9aed55692c1e6e689bf13655a110675a7ea1c41395371d7","0x185d806ecd93fc4df053fe912c4e67c2eb542aec644b9791369ad5585c61adc0","0x92e42ee137b983b1c9df53808975881cc130f9b3487504246bc30b9b20ad0c79","0x359293c28c9603c29153f85db7e20934d570ca9b5bed4dd3e9a720c2ab0da52d","0x2458b89008e68bc24fb241391e1bc663fa6fce673e10a26ec73d1da2f7664884","0x81fc01b61e86be0be0ccd0f06c625e565d0b1b3e0bb0d77316b95a2c78eab430","0x0000000000000000000000000000000000000000000000000000000000000004","0x09d04e6c82d7d9352a521fedfb01b851b9ce551292a621977989fa1204543e8a","0xabc6667e084aa76eeacdcfd1906d1787c744078cc3474e9390224d932fb20d68","0x2d6a7bb3059eee24a14dc70c42776d8c08a60e3fc1530ccab0d4162c8d7830fe","0x000000000000000000000000000000000000000000000000000000000000000a","0xe35cbe632c918eda8304425478032020bcc925557b3268776d28fd6026c1bc24","0x744bc9ed50522fa1eb6e774e1d2b1afd7272f8f25b82de51b6688e4bb1d1694a","0xa5922a1dc7e9ebf214bdbf41a82ea0a79af068bb068ae8522ea51811859a1c7a","0xe4490d058f96cc570a71be44f3105737cc6565ec84d798d8e60d87c32aeec861","0xecc68d48a1317e3d624f00d96507f152642b8f1923c537b2127afa968300fa45","0x719d7d05d901e9aa33f7b84f082ef9aadbf490acb57e199d25e77ff970a13a81","0x2d83cf4eba331a1327c5409269c5884d9610306ee832d9af24d5a2d2893b28e0","0x3a8f1f145d9d7331b5fa8cae999f2a4dc9c0bb32a3ead392e323cd9dcc299659","0x4966c331fd21bb95e5096f54ff5bc865ffddab6a0f3c4edcb615c80b8d472ba5","0x1940baa6064838f41701b761a340874dd1be578687bb7d75db3790e0f8cc4bdb","0x3ab474684ec430a476ab3753d607b3d22cde9179b15768f4e1318a78d78a41b0","0x3ad2db55fe5657fe773e3b7111e43f4b662a181a20e875b3b8be52dd9f0e2333","0x6e9e84ae7b8edc848e54262afc59a03baa298e039f2917f989989f0639ac12e4","0xe6926121e5bffaa7aee92b9a2048fd29617a792524626c9a71c0fc4dbc581e96","0x71ce39886cded666b2cea65cc176f07339e69f1b18e8ea0b949cfe571bddb501","0x6351c5c6fc4d713fe37381fc275318f1c3c3f7ea16436c61c7be810168a824d2","0xb7ddbfd200ea853b1e9512269127e11ed034a71c0a9ebcd9379ba1f95905c854","0x6a5135028658c5fe84262cf604ce089ed1b8f490b92ca50c723d7c1f5c870507","0x823adeeb59c1bd04598363f7eef4844c129d3175248a2ec5bbe63a32f1fdc5ad","0x2de45aa08973c6fceddda16f130e4f4a84841ca25a1fae4a4a37a89d4d2e0ea4","0x52f220ada7cb9ff90bb6f412551fec8c9b6c2801a502516004fcc2703e945769","0xd2d307582ed5f8f6cfcbfa917ab2e3d3d69a46ac0aaf330a54daacce14784bcb","0x21cec826884609e4e521695b19972226e65ef6ada141838b7a09e7c2fea20c8a","0x7a29766aac1dbe62f4e0f495f9efd26ed31af828ea799d1401079f2e1a05afef","0x504f70be718782ff8d1919ccbd111e506a97fd47d2e772194409f73f262e0207","0xe8db58c51f1e7cab2bc8bc23d5eaa9e12d3416885cf36840092f0d2950dedcc2","0x95ff0a4d51124669fc0353babe1cc832305db869f5f5a747117b7a7bb2331c7b","0x7c2fc41cde37b74b0b1deb783604a25ec385105fe763518599c171fcd38f5811","0x3825f87fa6745a8267452cfe8283bfad101be5abcd766a66f39fcdbc8df592d2","0x45c1197c2d1d94cb33782ec7cd8e39462b9850b3f4bf79b4368478721686da29","0x6607466841aeb80fb3942190409280ffd05e68f13020d6f61055d035660dc850","0xabb2457be097dda86792f2d233a24baf64c9bb60dea3fc98603bbae92100abe2","0x6efa2e0edf6e8d9b99f569c67aa98a474d559a8a22b4fd37f0c56f9b182fcfa3","0xb38224dbdac4a9f847189f60fc557952c1e63296fb037c379f19cdb687029142","0x6d653daecbd32f794589c81b379906bd27b618af7b3599a79d5b2847e167e1d5","0x75284dfc62ec34ea000b1a9f3a32715197f41a62e1bdd1a0f1eda5163cce3f2e","0x259d49eacc6c30d3f7bc1b1375d9b71b803987dd791aa7026f1dfe301849d545","0xec59fc0ec5646167e8bdc2c556f3cc4a36a14429d30b400e25900bd1aa14f08d","0x759ebf061baf585c99e31ae2e878792704a737b70719d1ed8895fe7d10c01bf7","0xed60408c4b22507914414c1013a0768b6214c8e4308bb00802a07a73fefdfd78","0x7994383cfda8237f0e8ab3a80037af93f8ec780a8fdd2d9b83537b7fa42097fb","0xa1901aaabda5cbfc09236d02f9507d4e86a0f609039a333169b0365d2e305efd","0x6928983459f4836656726accf0960666869e06eb7de6ba2ee7085635bf88a6e5","0x958b2da4728cfaee8179d387ec1b6b1741c907c3dfd12d905af9fab357b28ef7","0xc5355837a645f1ea1f13ad3726034add7c9fb31f7aaf8f9ab387563f9b3aafb7","0xa6446700c6b11808f5c4bd7440794964d7efe5dfaf07560b40eada203da7a2ca","0x9184a57dd0332e8b16f86960d665743455645aa7363efedacb5ed6edf48a5cd4","0x50283d144f443148b76d2ca9e13f5d0828507d484c47a49dd0da2011582dcf02","0x9dfa447cfa8c591111c7a87ad5d0fec15d38cdff4a9752fe270b830f75c726b9","0x3d09f89fa5446b42f2de16468ce035f855de9ddbae2affab11ff8196caa0d73e","0xd074d429c3b94b7261c0d12848df0b2563a05a279de80a9f6404aa8835893c5b","0x9a90f0e454e09af037a7d8e16a0402774dc4d0d445570f0520cbe6c59595d5f7","0x6b017fb7409a42a9c9a6726e025f05db5c386fd5ffdae64fc954a3cfddecc6fb","0x6dfb2cc27320676be552a10ec4bd5cc5643f418b52943a099ee80c274f01a3f5","0xddb241e291c2d4dc1e4051a69eb0436e32716aa3201978c94a849ac42281785c","0xc6860c0db79d2df8f565c5aaeb3cf0ff1b5fb1b83431eed4b88d56d62168e75b","0x02ee59c892c20c773b8c1848a25cd7be6d91395097eca4ce603a371a94641717","0x8c5b05d45c89ccd13cf614c2d3221889ecd40591c9a42d09d4698b4c133d3d03","0x76c3196c40c1047b842470c952d43291e241a446825b4c8ce4a16add3def3f38","0xc874c51c579ac97f11b663856bde56fa49e8382ba499c77de9f61e79f7c12713","0x35d7fb7665514f774d2c2df607e197eb8674b6e63d2638472758647a2e67406a","0x0642db43029543bb1ebbf7d10e6cc868b60db83de3cd8c6bbb1defd82d3b600e","0xfb5eb4a66b860e35f316a94822937b685551f7b5e94e14e264f1b68d765c3ae1","0x5063f5e0310a6a9363b891db8a37e0add0e4409e468dbcea38e0c7728190288e","0x1306e3c98bfe06ab61360fa42bd52ae44a05678bb4f4ac46d7c8e10291229267","0x678a36a61e75b3b7fec896727a042c092901c19b2203d685dc8696a6eb07d4b4","0xd56bdf2c225529686d053ac18fe03d1ce0ac1cbf490c290b889637f8178c525b","0x7620683ad2ca42272c2d3a39320d4c6ff4818972fea477ea0624da1fa2e09302","0x37b788afa5978970fc6fc5351c2eb988e1a6d0f7e034c26dc731df40d167d85b","0x7c24241ffa2de8656510026b51f3c7c6fc1b11cb0412b10bffb5996f6a3f3a2b","0x90112f8828108901f49a6d7efa50f74639494e950021a2f0b881bf4a12f50b1f","0x1f272c5ffa067e40b513a677402451384cb83cec372d351f33c0d2c980aa2791","0x83a4b079180f6516630f3876c177628eda70ee339d4dfc1731304a92bb1face8","0x003532c0810d9bac6e5aede181657c2d767b0f2b4a1f2ec4f0063fa7536195b9","0xec33c2576d25193badd245f1f44c5835881662fd048781e6056adcc103a13866","0x39ce73c2b3beeb36456e38a0bdada3b76c20042618e1d1c014efacb35e02e69e","0x9bf8796c4b076bccc885dcad43fad53f7c828a5dbd59a4141a2846be58d9f0dd","0x95848815d56b13c6e26bfcfee1b4d266b93f75eaff26cdd0c9c463c803b78820","0xbca4fe0be8e975f424af2d073832035804c6f1bbcc86580bf38730cea1253266","0xbd9b90ae1924e53d83ae885e270b2787e61243cd51c8d348e22c54c91882a0be","0x966b2a983a1220f62c7a6fa84f4612bd1d6d742c7b1a18547828e885236ef944","0x87b619b23199970ac7182a216f244ed64ae6ca7b5b2b2b3c1c0481408eb5af64","0xfa9211a19fa7d432fc65f2fa1b77555f3c77133ce7d5a42024a6ef88db123e54","0x39fd0dae636f00b7d9107edf6818413899d69306b0a557d3dce440c5a9a3c3e6","0x7043dc5f10482e6fa448c8187c116e13f30dd5dc14876275c5137c8a295e738d","0xc7f01836ef6bcec14e18ae6fe7c47a9f6087128cfcf3cdae07283005e9c551e1","0x900c6a93f283faf850f1cc77caed5a27f7075790a6a1c2f31d8952b56f89e079","0x3e57d38f12752e44a18a096cc665a4c43f632ecc13bef12afbbd4fa6d09bae11","0x7c475dbd09e95dcc1e4f9e92764bba68d8e476ca4dc8948ee1d2483f9d40e9b4","0x225a3fccdb566290c25173fd63d6e9e3fc54fb86d20619392866f6e201e13a79","0x80240a83ee96679e05d83c7e57fdcde881ae3a8c340602836d87244e1ae7d27f","0xd2f0e7e79c908fecea8c177ac15cdc2850ef353d67d7c5596c1bfc880bce9d40","0xb11a76aa47ec394446ddc8deead56bdf94c92166f1c20558d6e0f8ec303bc88e","0xd4926819075f67206d950bc3bf5d48622894782637972462b87f1c0cb98b6216","0x9aa2404403dacb191322f62da6efeb667b29d10ea1d183ff68e1ea677be12681","0x537bc38f34801d8df302fd30d0b034c0962ddf8dadabe96a9f2091c62742a41e","0x515e9e73892a8d9eb52978ac12f8af94dbabaca774b0363685219b0f7569e7cb","0xdb000d438fac4256fd47252689611c28304ba55b118a2b8c0a56de9171730fe2","0xe83538d417bf3a327392bec978ff0c3d12f982396c90514910d8aad98f85797a","0x7643fec7b9b72242e238ec48b1c3918545a514ef98eb8297e2d0b3d0989019da","0x4fb3c779bf2af416a93d3c886517bcd7bc447ac8e7aeb65ca5ad67352d422522","0x4f8326950fc8aa34177a822ae16b4cbacfc4e534c1f4ee85040bd17bcb29c8ae","0x51a461ff4cc5c89b81d06033066804873c586ece94b1ba94e351e460e0fd37ed","0xc7fd0bd487d0b6ef398b82715d8041b5e7e00ce89f81f78d36f448bcfd83c3d2","0xd9293a630e28d3a5e61462a4f5cf955d155ff86ed3ab041ecb0533dc126b3efe","0xc1dbffaa19366b126514c05d7bc931420f09b403cc13fa9ef31b5362c702ad4b","0x524bfcec436c05b97c4fa0a4b01bdd00880f509c00db106f1fdba5574a8c1526","0x0a04d0eb78fc687531e8070dcddbad4a17fc766535b508be9ec54f25282fabcf","0xe4a567e60c889432bad72fde83037e17c5d3a7c44c84541978f3d45f97f04f64","0x7c55c154cbc7e5133ed06306565f63502d6d540b5c5a443a88373a9b4afe072d","0x507ccb97367fb6cea787ae6caa841f71844d22cb223e8878c51b55e2b4701943","0x5bb96862696c2d0cea055c97d882c1aea2e43ff2b77ddbff047472588e06de3f","0x70434eb59476d5f9a405268edb793715aba6e05f698e907f93a99b023b073680","0x31ab42d640d9678b993a0bc32a5c24c1e52d40a074679dbd57d4724163bfc4fc","0x75cde72a82ffb57816bbab5b7432f5eb9a75a26ba14f61d321bc02f6c7aed9cf","0x74cd033ad106f0bc79e7c03adb6b8a6f4d64f76d45781a942f9ea9cfbb0134ca","0x39f2b54be6f78cd280e4fdd63185862f9951266f30b7bc9221a80187ebc1dbdc","0x80ffb3d9ae62dfc320efb4a1b50c08beeaabbfcdd3c924d186d6bb3c6cca18b3","0x2472b207c9304d88f42862b591fb04f2cb903a7bf38e188f3bd4ad5f422de1fb","0x69b3e376a5bc2e50490fdf62dc9bc4a0bc759533a95ebc68f041acecc91d99e9","0x5370cc048e664a5cc5502e78d16123a2f8b090d4597cfeeb7cc8450373c79c41","0x60e6b5a9e5fd0d89c9b792eb57e2bea9d73b63a6dd60463a949faf7d2155bb30","0x0000000000000000000000000000000000000000000000000000000000000000","0xefa0c25bcfb6f1f2e4bdbca89bf2931d45344a2d03b61ae989901ad0d45680d5","0x01b421520676e57dfa185f0452489eb4dd6c6800067f3d7ed2cebec567e9506a","0xc91bc8b4b5d7614826f38b2e08945eeb5cb119b4d3162bd89550dc493375b8aa","0xa2b54161c07290adf0c06d63002d5b161b98a663b3503249a87609d5fdc9f197","0xe0f69f5cfb39f89cf32b14c12bfae3dee18f339c81329e0e4d2ec901ce7e181c","0x03e3fa5cb275ddde2e44385c1b333af2ef55e9ccd090cc2e523d294eb6d24db0","0x3774386489158544063dc7588c1656ee55477ee5b327126ffeb48b9a649f32c0","0xb9a6a53192c8135ad36e8877a74189152d0496df7910114945bb2a46f662b50f","0xed5d01a190fc977d502a7eb4c9c18d5ee35bacdc10bb26070553045e5f053266"]},{"address":"0x77ad3a15b78101883af36ad4a875e17c86ac65d1","storageKeys":[]},{"address":"0xbcd3465ed116b53b1c0b603bc79297a52c353021","storageKeys":[]},{"address":"0x52e2a402cc0e3eb23cf68f1fa8ce2db867a082e4","storageKeys":[]},{"address":"0x72c60bfffef18dca51db32b52b819a951b6ddbed","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000006","0x0a8622b3bea6b77f880346589e928a5a9e981ee9adf5de6ebaa6cad387beb635","0xf33ca819bebbbb1861541c20de662508c211dc2389f53785d1fa1f5325f7d0f6","0xc05128d02b3623deafe7368d2c3ea64524a9fc1f6debb6b15ff85780be5f63f8","0x1de8b23d264d4237b3ac0469b20ace6d716b240bd983389665de352d40cd5be1","0x1c0bbe55ef33b219e852b40408910cc2e888a9c8822d1e70f3facf6c0584fdd5","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x2999130b47de50504222b5b60278422b730b89fc019494a6572b51e4912005c9","0x0000000000000000000000000000000000000000000000000000000000000011","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000010","0x895a6b9d95243a6356ce91bd48e456419db457f710a80c8a5073ae0c5240fc08","0x16f8c52a2c49604205b83683552ec60fc7b243fe18b218e2ef844c4fa21708c3","0xd5545afde697af5857bb25f0ab3c804f4932763aac4345e33ffc216e85697e26","0x0000000000000000000000000000000000000000000000000000000000000009","0x05383abc1f5d180a9ba55924699390af476c2f54d6e14df8e1d3ef158551b46a"]},{"address":"0x7f86bf177dd4f3494b841a37e810a34dd56c829b","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000012","0x0000000000000000000000000000000000000000000000000000000000000019"]},{"address":"0x31896ebaa868d34def9225f46cbfc0b1c25aa779","storageKeys":[]},{"address":"0x3c442bab170f19dd40d0b1a405c9d93b088b9332","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x0000000000000000000000000000000000000000000000000000000000000008","0x000000000000000000000000000000000000000000000000000000000000000c","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007"]},{"address":"0x129311a1b838f10586ae0cd69c62a35871707cf2","storageKeys":[]},{"address":"0x29469395eaf6f95920e59f858042f0e28d98a20b","storageKeys":["0xc4e2253498670423f1375d8ab3f1ea4629b63f22ee5ab1004e12bee742f0390b","0xf9fce4060ef72e2f0ac395b2fe3dfef3bcd3d8e274fabe08297f895fccbe6817","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","0x0000000000000000000000000000000000000000000000000000000000000163","0x4187e7e3de03d69356a780127a4b6b1bbf37c791e94a682082148bb37b4c7f2f","0xc10a19a91f6232865021f49fef0cf5f2de61e358ec9b88fe5aa966b280fa7075","0xacfe491060b475e094848fc44594e8fe186ec1fd1698f56a8e0f7fb24ad94adf","0x0000000000000000000000000000000000000000000000000000000000000002"]},{"address":"0x343f18e39ab281bdd574834be26b32f3c75f42dc","storageKeys":[]},{"address":"0xe3e1c933623e56cdc9b3b35d5e8c23948249bb2b","storageKeys":[]},{"address":"0x595832f8fc6bf59c85c527fec3740a1b7a361269","storageKeys":["0xf4e54bb51e10c9ff52102ae731b015539d4e9d60e64768267b59846a24141fd7","0xed077da843303ea01806892518760f47d140e0967c2ff1e73798df7e962cca4f"]},{"address":"0xc3112f7c3037ab2653d78da6f68c77f00682c8b6","storageKeys":[]},{"address":"0xe4edb277e41dc89ab076a1f049f4a3efa700bce8","storageKeys":[]},{"address":"0x517ae108c6be226caa4a6e3b224c41db8e4fda7b","storageKeys":[]},{"address":"0x0eb1c92f9f5ec9d817968afddb4b46c564cdedbe","storageKeys":["0x0c1469ad586d86b6976c45826d7ae56d76ee516e37a2bccffbe904b74dbae7ea","0x0000000000000000000000000000000000000000000000000000000000000000","0xbbce0d9318352908521fe9659dce636e39ce00e987a43eecfd7bccd20ce35b1f","0xfb5e2c639adf6f19556e762eea9953bf8c1f92c6a39651186429f581ab806849","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000001","0xf8fd3a386fa60c3459e35240b885c11499f85fa71d9b7fb67c736fb24d81cf0e","0x33445b9a8dc7ce01b7e2b5781e2e6b70ea94ff0ab46cce2526dc35e6fffd7c14","0x189c74cb3dfcf410dd3d6cbab487ece2f87bb9e2e973105ca843cf26d38b5659","0x140aabff1a85df08546c9a350c79ae18341bde4a2cef5d2fd460885c0128ce26"]}] diff --git a/bin/mpt-test/access-lists/2000004.json b/bin/mpt-test/access-lists/2000004.json new file mode 100644 index 0000000000..51d69d2189 --- /dev/null +++ b/bin/mpt-test/access-lists/2000004.json @@ -0,0 +1 @@ +[{"address":"0x4bb96091ee9d802ed039c4d1a5f6216f90f81b01","storageKeys":[]},{"address":"0x8975dbc1b8f25ec994815626d070899dda896511","storageKeys":[]},{"address":"0xb2e3732c0b0ec387962f76fa4f1bb9325089c5e0","storageKeys":[]},{"address":"0xed059bc543141c8c93031d545079b3da0233b27f","storageKeys":[]},{"address":"0xec9f6c9634165f91e22e58b90e3ede393d959e47","storageKeys":[]},{"address":"0xcaac46d9bd68bffb533320545a90cd92c6e98e58","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"]},{"address":"0xec9f6c9634165f91e22e58b90e3ede393d959e47","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000003","0x19da5b482fc1817af240c411d7423a456cdcf4a213e9f192aca5c80a39a4a733"]},{"address":"0xf05c1b271d12b7ecb3b37122730c085ec2c0b552","storageKeys":[]},{"address":"0x4fdf5371f7ffa04866f696882db659fe38f52559","storageKeys":[]},{"address":"0xbef52af092fa2349279f7a2b10779fe810785688","storageKeys":[]},{"address":"0x24f21c22f0e641e2371f04a7bb8d713f89f53550","storageKeys":[]}] \ No newline at end of file diff --git a/bin/mpt-test/access-lists/2000007.json b/bin/mpt-test/access-lists/2000007.json new file mode 100644 index 0000000000..5470f3a4e1 --- /dev/null +++ b/bin/mpt-test/access-lists/2000007.json @@ -0,0 +1 @@ +[{"address":"0x61c808d82a3ac53231750dadc13c777b59310bd9","storageKeys":[]},{"address":"0xdf21fa922215b1a56f5a6d6294e6e36c85a0acfb","storageKeys":[]},{"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","storageKeys":["0x0db619cb4b09b98626d1a90813a5566d6ae59d0a68df3e729f07a4cf6a7169fe","0x28f0a29873c622b02659ae6083b0cf3fb2c44358fa1b0c0efb89893011b2cf8b","0xf610712b7b4266f7fbc44538628f0ffdcb93c6d56f73a4dfeb041befdf2c9058","0xf903a85392f66de7c382c130eb51940c4bfed2038df5c108d8c0115c24efcc94"]}] \ No newline at end of file diff --git a/bin/mpt-test/access-lists/2000070.json b/bin/mpt-test/access-lists/2000070.json new file mode 100644 index 0000000000..3d0c8776b8 --- /dev/null +++ b/bin/mpt-test/access-lists/2000070.json @@ -0,0 +1 @@ +[{"address":"0x1a060b0604883a99809eb3f798df71bef6c358f1","storageKeys":[]},{"address":"0xed8387812f6477a421f2a16975a6121fc91933e6","storageKeys":[]},{"address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413","storageKeys":["0x4312ad16021fb135960665020d410e3ca0e42488b684d61315e73d368c7182ad","0x83390858478ca0e9bd8e0b6f9c61cb360f78d42e5c5c2908d9a885b766925386"]}] \ No newline at end of file diff --git a/bin/mpt-test/access-lists/436875.json b/bin/mpt-test/access-lists/436875.json new file mode 100644 index 0000000000..82011f21d7 --- /dev/null +++ b/bin/mpt-test/access-lists/436875.json @@ -0,0 +1 @@ +[{"address":"0x580992b51e3925e23280efb93d3047c82f17e038","storageKeys":[]},{"address":"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5","storageKeys":[]},{"address":"0x15ac3b6f90549ffbe4091177b1795b3d4c11a59e","storageKeys":[]},{"address":"0x72382223a91051a54c69759be3c93048235efc43","storageKeys":[]}] \ No newline at end of file diff --git a/bin/mpt-test/src/cache.rs b/bin/mpt-test/src/cache.rs new file mode 100644 index 0000000000..ba5100d352 --- /dev/null +++ b/bin/mpt-test/src/cache.rs @@ -0,0 +1,234 @@ +//! A simple cache for web3 rpc requests + +use eth_types::keccak256; +use eyre::{ensure, eyre, Result}; +use flate2::{read::ZlibDecoder, write::ZlibEncoder, Compression}; +use hyper::{ + body::{self}, + service::{make_service_fn, service_fn}, + Body, Client, Request, Response, Server, +}; +use serde::Deserialize; +use serde_json::Value; +use std::{ + collections::HashMap, + convert::Infallible, + fs::File, + io::{Read, Seek, Write}, +}; + +const CACHE_PATH: &str = "web3_rpc_cache.bin"; + +lazy_static! { + static ref CACHE: tokio::sync::Mutex = tokio::sync::Mutex::new(CacheFile::new()); +} + +/// Cache file format is a consecutive list of entries, each entry is: +/// - 32 bytes: key (keccak256 of the request) +/// - 4 bytes: length of the compressed response +/// - N bytes: compressed response +struct CacheFile { + offsets: HashMap<[u8; 32], u64>, +} +impl CacheFile { + pub fn new() -> Self { + Self { + offsets: HashMap::new(), + } + } + /// Load all existing entries from the cache file + pub async fn load(&mut self) -> Result<()> { + if let Ok(mut f) = File::open(CACHE_PATH) { + let mut hash = [0u8; 32]; + while f.read_exact(&mut hash).is_ok() { + let offset = f.stream_position()?; + self.offsets.insert(hash, offset); + let mut len_buf = [0u8; 4]; + f.read_exact(&mut len_buf)?; + let len = u32::from_le_bytes(len_buf); + f.seek(std::io::SeekFrom::Current(len as i64))?; + } + println!("loaded {} cached responses", self.offsets.len()); + } + Ok(()) + } + /// Write a new entry + async fn write(&mut self, key: [u8; 32], value: &[u8]) -> Result<()> { + let mut encoder = ZlibEncoder::new(Vec::new(), Compression::best()); + encoder.write_all(value)?; + let compressed = encoder.finish()?; + + let mut f = File::options().append(true).create(true).open(CACHE_PATH)?; + f.write_all(&key)?; + let offset = f.stream_position()?; + f.write_all(&(compressed.len() as u32).to_le_bytes())?; + f.write_all(&compressed)?; + + self.offsets.insert(key, offset); + + Ok(()) + } + /// Read an entry, returns Ok(None) if not found + async fn read(&self, key: [u8; 32]) -> Result>> { + let offset = self.offsets.get(&key).cloned(); + if let Some(offset) = offset { + let mut f = + File::open(CACHE_PATH).expect("since offset exists, file should exist. qed."); + f.seek(std::io::SeekFrom::Start(offset))?; + + let mut len_buf = [0u8; 4]; + f.read_exact(&mut len_buf)?; + let len = u32::from_le_bytes(len_buf); + + let mut compressed = vec![0u8; len as usize]; + f.read_exact(&mut compressed)?; + let mut decoder = ZlibDecoder::new(&compressed[..]); + let mut decompressed: Vec = Vec::new(); + decoder.read_to_end(&mut decompressed).unwrap(); + + Ok(Some(decompressed)) + } else { + Ok(None) + } + } +} + +#[derive(Deserialize, Debug)] +struct RequestBody { + method: String, + params: Option>, + id: u32, +} + +#[derive(Deserialize, Debug)] +#[serde(untagged)] +enum Param { + String(String), + Bool(bool), + StringVec(Vec), +} + +impl RequestBody { + fn hash(&self) -> [u8; 32] { + let params = if let Some(params) = &self.params { + params + .iter() + .map(|s| match s { + Param::String(s) => s.to_owned(), + Param::Bool(b) => format!("{}", b), + Param::StringVec(v) => v.join("-"), + }) + .collect::>() + .join("-") + } else { + "".to_owned() + }; + keccak256(format!("{}-{}", self.method, params).as_bytes()) + } +} + +/// Handle a web3 rpc request with error handling +async fn infallible_web3_proxy(req: Request) -> Result, Infallible> { + match web3_proxy(req).await { + Ok(res) => Ok(res), + Err(err) => { + let msg = format!("Internal Server Error: {err}"); + Ok(Response::builder() + .status(500) + .body(Body::from(msg)) + .unwrap()) + } + } +} + +/// Handle a web3 rpc request, return cached result or call the env!("WEB3_PROVIDER_URL") RPC server +async fn web3_proxy(req: Request) -> Result> { + let method = req.method().clone(); + let headers = req.headers().clone(); + + // try to read the result from the cache + let request_body_bytes = hyper::body::to_bytes(req.into_body()).await?.to_vec(); + let request_body_json: RequestBody = serde_json::from_slice(&request_body_bytes)?; + let key = request_body_json.hash(); + let response_result = CACHE.lock().await.read(key).await?; + + let response_body = if let Some(response_result) = response_result { + // return cached result + format!( + "{{\"id\":{}, \"jsonrpc\":\"2.0\", \"result\":{}}}", + request_body_json.id, + String::from_utf8(response_result).unwrap() + ) + .into_bytes() + } else { + println!( + "=>{}", + String::from_utf8(request_body_bytes.clone()).unwrap() + ); + + // call RPC server, copying headers and method from the original request + let connector = hyper_rustls::HttpsConnectorBuilder::new() + .with_native_roots() + .https_or_http() + .enable_http1() + .build(); + + let client = Client::builder().build(connector); + let provider_url = std::env::var("WEB3_PROVIDER_URL")?; + + let mut req = Request::builder() + .method(method) + .uri(provider_url) + .body(Body::from(request_body_bytes))?; + + for (key, value) in headers { + if let Some(key) = key { + if !["host", "accept-encoding", "date"].contains(&key.as_str()) { + req.headers_mut().append(key, value); + } + } + } + + let resp = client.request(req).await?; + let (head, response_body) = resp.into_parts(); + ensure!(head.status.is_success(), "Provider does not return 200"); + + // parse response and cache it + let response_bytes = body::to_bytes(response_body).await?.to_vec(); + + let root: Value = serde_json::from_slice(&response_bytes)?; + let Some(result) = root.get("result") else { + return Err(eyre!("Provider does not return result")); + }; + let result_bytes = serde_json::to_vec(result)?; + CACHE.lock().await.write(key, &result_bytes).await?; + + response_bytes + }; + + // return HTTP 200 response + let response = Response::builder() + .status(200) + .body(Body::from(response_body))?; + + Ok(response) +} + +/// Load the cache file +pub async fn load() -> Result<()> { + CACHE.lock().await.load().await +} + +/// Start the cache server at localhost:3000 +pub async fn start() -> Result<()> { + let make_svc = + make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(infallible_web3_proxy)) }); + + let addr = ([127, 0, 0, 1], 3000).into(); + + println!("Listening on http://{}", addr); + + Server::bind(&addr).serve(make_svc).await?; + + Ok(()) +} diff --git a/bin/mpt-test/src/circuit.rs b/bin/mpt-test/src/circuit.rs new file mode 100644 index 0000000000..ee7765bae1 --- /dev/null +++ b/bin/mpt-test/src/circuit.rs @@ -0,0 +1,4 @@ +mod equal_words; +pub mod state_update; +mod utils; +pub mod witness; diff --git a/light-client-poc/src/circuit/equal_words.rs b/bin/mpt-test/src/circuit/equal_words.rs similarity index 83% rename from light-client-poc/src/circuit/equal_words.rs rename to bin/mpt-test/src/circuit/equal_words.rs index c085fa41f6..67143be140 100644 --- a/light-client-poc/src/circuit/equal_words.rs +++ b/bin/mpt-test/src/circuit/equal_words.rs @@ -1,3 +1,5 @@ +//! A simple chip to compare two words for equality. + use eth_types::Field; use eyre::Result; use gadgets::{ @@ -9,16 +11,16 @@ use halo2_proofs::{ plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector}, poly::Rotation, }; -use zkevm_circuits::util::word::Word; +use zkevm_circuits::util::word::WordLoHi; #[derive(Clone, Debug)] -pub struct EqualWordsConfig(Word>); +pub struct EqualWordsConfig(WordLoHi>); impl EqualWordsConfig { pub fn configure( meta: &mut ConstraintSystem, q_enable: Selector, - first: (Word>, Rotation), - second: (Word>, Rotation), + first: (WordLoHi>, Rotation), + second: (WordLoHi>, Rotation), ) -> Self { let lo_inv = meta.advice_column(); let lo = IsZeroChip::configure( @@ -42,7 +44,7 @@ impl EqualWordsConfig { hi_inv, ); - Self(Word::new([lo, hi])) + Self(WordLoHi::new([lo, hi])) } pub fn expr(&self) -> Expression { @@ -54,8 +56,8 @@ impl EqualWordsConfig { region: &mut Region<'_, F>, offset: usize, name: &str, - first: &Word, - second: &Word, + first: &WordLoHi, + second: &WordLoHi, ) -> Result<(), Error> { region.name_column(|| format!("{}_lo_inv", name), self.0.lo().value_inv); region.name_column(|| format!("{}_hi_inv", name), self.0.hi().value_inv); diff --git a/light-client-poc/src/circuit/state_update.rs b/bin/mpt-test/src/circuit/state_update.rs similarity index 86% rename from light-client-poc/src/circuit/state_update.rs rename to bin/mpt-test/src/circuit/state_update.rs index 15464e311b..8060959e34 100644 --- a/light-client-poc/src/circuit/state_update.rs +++ b/bin/mpt-test/src/circuit/state_update.rs @@ -1,4 +1,5 @@ -use super::equal_words::EqualWordsConfig; +//! A circuit to verify chained proofs of state updates in a block. + use eth_types::Field; use eyre::Result; use gadgets::{ @@ -21,11 +22,12 @@ use halo2_proofs::{ use zkevm_circuits::{ mpt_circuit::{MPTCircuit, MPTCircuitParams, MPTConfig}, table::{KeccakTable, MptTable}, - util::{word, Challenges}, + util::{word::WordLoHi, Challenges}, }; -use super::witness::{ - SingleTrieModification, SingleTrieModifications, StateUpdateWitness, Transforms, +use crate::circuit::{ + equal_words::EqualWordsConfig, + witness::{FieldTrieModification, FieldTrieModifications, Witness}, }; #[cfg(not(feature = "disable-keccak"))] @@ -34,46 +36,75 @@ use zkevm_circuits::{ util::{SubCircuit, SubCircuitConfig}, }; -pub const DEFAULT_MAX_NODES: usize = 4000; -pub const DEFAULT_MAX_PROOF_COUNT: usize = 20; -pub const DEFAULT_CIRCUIT_DEGREE: usize = 14; - -// A=>B eq ~(A & ~B) (it is not the case that A is true and B is false) -fn xif(a: Expression, b: Expression) -> Expression { +// negated A=>B eq ~(A & ~B) (it is not the case that A is true and B is false) +pub fn xnif(a: Expression, b: Expression) -> Expression { and::expr([a, not::expr(b)]) } -/// +/// The circuit to verify chained proofs of state updates in a block. #[derive(Clone)] pub struct StateUpdateCircuitConfig { #[cfg(not(feature = "disable-keccak"))] + /// If enabled by feature, the verification of keccaks + /// Please note that the keccak circuit will dramatically increase the time to generate the + /// proof this is the reason why it is disabled by default (check the `disable-keccak` + /// feature) pub keccak_config: KeccakCircuitConfig, + + /// The MPT configuration pub mpt_config: MPTConfig, + /// The MPT table, where the state updates are stored pub pi_mpt: MptTable, - pub pi_instance: Column, + /// Intance column, used to check public inputs + pub instance: Column, + + /// ONE if the first row, ZERO otherwise pub is_first: Column, + + /// ONE if row is paddding, ZERO otherwise pub is_padding: IsZeroConfig, + + /// ONE is the last used row, ZERO otherwise pub is_last: IsZeroConfig, + /// Check if new_root is propagated pub new_root_propagation: EqualWordsConfig, + + /// Check if previous old_root, and new_root are equal pub root_chained: EqualWordsConfig, + /// A down counter, that is decreased by one in each row pub count: Column, + + /// Check if the counter is monotonic decreasing pub count_decrement: IsZeroConfig, pub q_enable: Selector, } -/// MPT Circuit for proving the storage modification is valid. +/// MPT Circuit for proving that a from a given root, a set of state updates are valid. +/// Public inputs: +/// old_root_lo +/// old_root_hi +/// new_root_lo +/// new_root_hi +/// number of MPT changes +/// for each change +/// | change_type +/// | address +/// | value_lo +/// | value_hi +/// | key_lo +/// | key_hi #[derive(Default)] pub struct StateUpdateCircuit { - pub transforms: Transforms, #[cfg(not(feature = "disable-keccak"))] pub keccak_circuit: KeccakCircuit, pub mpt_circuit: MPTCircuit, - pub lc_witness: SingleTrieModifications, + + pub lc_witness: FieldTrieModifications, pub degree: usize, pub max_proof_count: usize, } @@ -114,15 +145,15 @@ impl Circuit for StateUpdateCircuit { let is_first = meta.fixed_column(); let count = meta.advice_column(); let q_enable = meta.complex_selector(); - let pi_instance = meta.instance_column(); + let instance = meta.instance_column(); let pi_mpt = MptTable { address: meta.advice_column(), - storage_key: word::Word::new([meta.advice_column(), meta.advice_column()]), + storage_key: WordLoHi::new([meta.advice_column(), meta.advice_column()]), proof_type: meta.advice_column(), - new_root: word::Word::new([meta.advice_column(), meta.advice_column()]), - old_root: word::Word::new([meta.advice_column(), meta.advice_column()]), - new_value: word::Word::new([meta.advice_column(), meta.advice_column()]), - old_value: word::Word::new([meta.advice_column(), meta.advice_column()]), + new_root: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + old_root: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + new_value: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + old_value: WordLoHi::new([meta.advice_column(), meta.advice_column()]), }; for col in [ @@ -144,7 +175,7 @@ impl Circuit for StateUpdateCircuit { meta.enable_equality(*col); } - meta.enable_equality(pi_instance); + meta.enable_equality(instance); meta.enable_equality(count); let is_padding_inv = meta.advice_column(); @@ -191,13 +222,13 @@ impl Circuit for StateUpdateCircuit { meta.create_gate("if not padding, count decreases monotonically", |meta| { let q_enable = meta.query_selector(q_enable); - vec![q_enable * xif(not::expr(is_padding.expr()), count_decrement.expr())] + vec![q_enable * xnif(not::expr(is_padding.expr()), count_decrement.expr())] }); meta.create_gate("if last or padding, new_root is propagated ", |meta| { let q_enable = meta.query_selector(q_enable); let is_last_or_padding = or::expr([is_padding.expr(), is_last.expr()]); - vec![q_enable * xif(is_last_or_padding.expr(), new_root_propagation.expr())] + vec![q_enable * xnif(is_last_or_padding.expr(), new_root_propagation.expr())] }); meta.create_gate( @@ -210,7 +241,7 @@ impl Circuit for StateUpdateCircuit { vec![ q_enable - * xif( + * xnif( not::expr(one_if_not_padding_and_not_last_rot), root_chained.expr(), ), @@ -283,7 +314,7 @@ impl Circuit for StateUpdateCircuit { new_root_propagation, root_chained, q_enable, - pi_instance, + instance, pi_mpt, }; @@ -301,7 +332,7 @@ impl Circuit for StateUpdateCircuit { ) -> Result<(), Error> { let challenges = _challenges.values(&mut layouter); - // assign MPT witness + // MPT witness config .mpt_config @@ -313,6 +344,8 @@ impl Circuit for StateUpdateCircuit { self.mpt_circuit.max_nodes, )?; + // Keccak witness ( if apply ) + #[cfg(feature = "disable-keccak")] config.mpt_config.keccak_table.dev_load( &mut layouter, @@ -324,7 +357,7 @@ impl Circuit for StateUpdateCircuit { self.keccak_circuit .synthesize_sub(&config.keccak_config, &challenges, &mut layouter)?; - // assign LC witness + // Circuit witness, returns the public inputs for the state update let pi = layouter.assign_region( || "lc witness", @@ -346,7 +379,7 @@ impl Circuit for StateUpdateCircuit { || "LC_count_monodec_inv", config.count_decrement.value_inv, ); - region.name_column(|| "LC_pi_instance", config.pi_instance); + region.name_column(|| "LC_instance", config.instance); region.assign_fixed(|| "", config.is_first, 0, || Value::known(F::ONE))?; @@ -380,11 +413,11 @@ impl Circuit for StateUpdateCircuit { // assign set the value for entries to do the lookup propagating ending root in padding // and collect cells for checking public inputs. - let stm = self.lc_witness.get(offset).cloned().unwrap_or(SingleTrieModification { + let stm = self.lc_witness.get(offset).cloned().unwrap_or(FieldTrieModification { new_root: self.lc_witness.last().cloned().unwrap_or_default().new_root, ..Default::default() }); - let stm_next = self.lc_witness.get(offset+1).cloned().unwrap_or(SingleTrieModification { + let stm_next = self.lc_witness.get(offset+1).cloned().unwrap_or(FieldTrieModification { new_root: self.lc_witness.last().cloned().unwrap_or_default().new_root, ..Default::default() }); @@ -458,7 +491,7 @@ impl Circuit for StateUpdateCircuit { // check that state updates to lookup are the same that the specified in the public inputs for (n, value) in pi.into_iter().enumerate() { - layouter.constrain_instance(value.unwrap().cell(), config.pi_instance, n)?; + layouter.constrain_instance(value.unwrap().cell(), config.instance, n)?; } Ok(()) @@ -467,14 +500,13 @@ impl Circuit for StateUpdateCircuit { impl StateUpdateCircuit { pub fn new( - witness: StateUpdateWitness, + witness: Witness, degree: usize, max_nodes: usize, max_proof_count: usize, ) -> Result> { - let StateUpdateWitness { + let Witness { mpt_witness, - transforms, lc_witness, } = witness; @@ -502,7 +534,6 @@ impl StateUpdateCircuit { let keccak_circuit = KeccakCircuit::::new(2usize.pow(degree as u32), keccak_data); let lc_circuit = StateUpdateCircuit:: { - transforms, #[cfg(not(feature = "disable-keccak"))] keccak_circuit, mpt_circuit, diff --git a/bin/mpt-test/src/circuit/utils.rs b/bin/mpt-test/src/circuit/utils.rs new file mode 100644 index 0000000000..d17827632f --- /dev/null +++ b/bin/mpt-test/src/circuit/utils.rs @@ -0,0 +1,58 @@ +//! Some utilities. + +use crate::circuit::witness::FieldTrieModifications; +use eth_types::Field; +use halo2_proofs::{dev::MockProver, halo2curves::bn256::Fr}; +use std::ops::Deref; + +use super::state_update::StateUpdateCircuit; + +pub struct PublicInputs(pub Vec); +impl Deref for PublicInputs { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl From<&FieldTrieModifications> for PublicInputs { + fn from(stm: &FieldTrieModifications) -> Self { + let mut inputs = vec![ + stm.0[0].old_root.lo(), + stm.0[0].old_root.hi(), + stm.0.last().unwrap().new_root.lo(), + stm.0.last().unwrap().new_root.hi(), + F::from(stm.0.len() as u64), + ]; + + for proof in &stm.0 { + inputs.push(proof.typ); + inputs.push(proof.address); + inputs.push(proof.value.lo()); + inputs.push(proof.value.hi()); + inputs.push(proof.key.lo()); + inputs.push(proof.key.hi()); + } + + PublicInputs(inputs) + } +} + +impl StateUpdateCircuit { + pub fn assert_satisfied(&self) { + let num_rows: usize = self + .mpt_circuit + .nodes + .iter() + .map(|node| node.values.len()) + .sum(); + + let public_inputs: PublicInputs = (&self.lc_witness).into(); + + let prover = + MockProver::::run(self.degree as u32, self, vec![public_inputs.0]).unwrap(); + + prover.assert_satisfied_at_rows(0..num_rows, 0..num_rows); + } +} diff --git a/light-client-poc/src/circuit/witness.rs b/bin/mpt-test/src/circuit/witness.rs similarity index 56% rename from light-client-poc/src/circuit/witness.rs rename to bin/mpt-test/src/circuit/witness.rs index f667abf467..99b1514091 100644 --- a/light-client-poc/src/circuit/witness.rs +++ b/bin/mpt-test/src/circuit/witness.rs @@ -1,11 +1,18 @@ -use std::{collections::HashSet, ops::Deref, sync::Arc}; +//! Generate witness for the StateUpdate circuit. + +use std::{ + collections::{BTreeMap, BTreeSet}, + ops::Deref, + str::FromStr, + time::Duration, +}; use eth_types::{Field, ToScalar}; + use ethers::{ abi::Address, - prelude::{k256::ecdsa::SigningKey, SignerMiddleware, *}, + prelude::*, providers::{Http, Provider}, - signers::Wallet, types::{ transaction::eip2930::{AccessList, AccessListItem}, BlockId, BlockNumber, H256, U256, U64, @@ -13,15 +20,40 @@ use ethers::{ }; use eyre::Result; -use mpt_witness_generator::{ProofType, TrieModification}; +use geth_utils::mpt::{ProofType, TrieModification}; use zkevm_circuits::{ - mpt_circuit::witness_row::Node, - table::mpt_table::MPTProofType, - util::word::{self, Word}, + mpt_circuit::witness_row::Node, table::mpt_table::MPTProofType, util::word::WordLoHi, }; +lazy_static! { + static ref DEFAULT_CODE_HASH: H256 = + H256::from_str("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470") + .unwrap(); +} + +#[derive(Default, Clone)] +pub struct FieldTrieModification { + pub typ: F, + pub address: F, + pub value: WordLoHi, + pub key: WordLoHi, + pub old_root: WordLoHi, + pub new_root: WordLoHi, +} + +#[derive(Default, Clone)] +pub struct FieldTrieModifications(pub Vec>); + +impl Deref for FieldTrieModifications { + type Target = Vec>; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + #[derive(Default, Debug, Clone)] -pub struct Transforms { +struct Transforms { pub block_no: U64, pub prev_state_root: H256, pub curr_state_root: H256, @@ -33,6 +65,7 @@ trait TrieModificationBuilder { fn nonce(address: Address, nonce: U64) -> Self; fn codehash(address: Address, code_hash: H256) -> Self; fn storage(address: Address, key: H256, value: U256) -> Self; + fn storage_does_not_exist(address: Address, key: H256, value: U256) -> Self; } impl TrieModificationBuilder for TrieModification { @@ -69,83 +102,41 @@ impl TrieModificationBuilder for TrieModification { ..Default::default() } } + fn storage_does_not_exist(address: Address, key: H256, value: U256) -> Self { + Self { + typ: ProofType::StorageDoesNotExist, + address, + key, + value, + ..Default::default() + } + } } #[derive(Default)] -pub struct StateUpdateWitness { - pub transforms: Transforms, - pub lc_witness: SingleTrieModifications, +pub struct Witness { + pub lc_witness: FieldTrieModifications, pub mpt_witness: Vec, } -#[derive(Default, Clone)] -pub struct SingleTrieModification { - pub typ: F, - pub address: F, - pub value: word::Word, - pub key: word::Word, - pub old_root: word::Word, - pub new_root: word::Word, -} - -#[derive(Default, Clone)] -pub struct SingleTrieModifications(pub Vec>); - -impl Deref for SingleTrieModifications { - type Target = Vec>; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -pub struct PublicInputs(pub Vec); -impl Deref for PublicInputs { - type Target = Vec; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl From<&SingleTrieModifications> for PublicInputs { - fn from(stm: &SingleTrieModifications) -> Self { - let mut inputs = vec![ - stm.0[0].old_root.lo(), - stm.0[0].old_root.hi(), - stm.0.last().unwrap().new_root.lo(), - stm.0.last().unwrap().new_root.hi(), - F::from(stm.0.len() as u64), - ]; - - for proof in &stm.0 { - inputs.push(proof.typ); - inputs.push(proof.address); - inputs.push(proof.value.lo()); - inputs.push(proof.value.hi()); - inputs.push(proof.key.lo()); - inputs.push(proof.key.hi()); - } - - PublicInputs(inputs) - } -} - -impl StateUpdateWitness { +impl Witness { pub async fn build( - client: Arc, Wallet>>, - provider: &str, + provider_url: &str, block_no: U64, access_list: Option, + include_unchanged: bool, ) -> Result> { - let transforms = Self::get_transforms(client, block_no, access_list).await?; - println!("### trns : {:#?}", transforms); + let provider: Provider = + Provider::::try_from(provider_url)?.interval(Duration::from_millis(10u64)); + + let transforms = + Self::get_transforms(provider, block_no, access_list, include_unchanged).await?; + if transforms.prev_state_root == transforms.curr_state_root { Ok(None) } else { - let (mpt_witness, lc_witness) = Self::mpt_witness(&transforms, provider)?; + let (mpt_witness, lc_witness) = Self::mpt_witness(&transforms, provider_url)?; Ok(Some(Self { - transforms, mpt_witness, lc_witness, })) @@ -153,18 +144,18 @@ impl StateUpdateWitness { } async fn get_transforms( - client: Arc, Wallet>>, + provider: Provider, block_no: U64, access_list: Option, + include_initial_values: bool, ) -> Result { - let mut trie_modifications = Vec::new(); - // get previous block and this block - let prev_block = client + let prev_block: Block = provider .get_block(BlockId::Number(BlockNumber::Number(block_no - 1))) .await? .unwrap(); - let curr_block = client + + let curr_block = provider .get_block_with_txs(BlockId::Number(BlockNumber::Number(block_no))) .await? .unwrap(); @@ -180,8 +171,7 @@ impl StateUpdateWitness { let mut access_list = if let Some(access_list) = access_list { access_list } else { - client - .provider() + provider .request( "eth_getAccessListByNumber", vec![format!("0x{:x}", block_no)], @@ -189,8 +179,28 @@ impl StateUpdateWitness { .await? }; + // sanitize access_list + let mut access_list_map = BTreeMap::new(); + for item in access_list.0.iter_mut() { + let entry = access_list_map + .entry(item.address) + .or_insert_with(BTreeSet::new); + for key in item.storage_keys.iter() { + entry.insert(*key); + } + } + let mut access_list = AccessList( + access_list_map + .into_iter() + .map(|(address, storage_keys)| AccessListItem { + address, + storage_keys: storage_keys.into_iter().collect(), + }) + .collect(), + ); + // add coinbase to the access list - let mut extra_addrs = HashSet::from([curr_block.author.unwrap()]); + let mut extra_addrs = BTreeSet::from([curr_block.author.unwrap()]); for tx in curr_block.transactions { extra_addrs.insert(tx.from); if let Some(addr) = tx.to { @@ -207,13 +217,16 @@ impl StateUpdateWitness { } } + let mut initial_values = Vec::new(); + let mut changed_values = Vec::new(); + for entry in access_list.0 { let AccessListItem { address, storage_keys, } = entry; - let old = client + let old = provider .get_proof( address, storage_keys.clone(), @@ -221,7 +234,7 @@ impl StateUpdateWitness { ) .await?; - let new = client + let new = provider .get_proof( address, storage_keys.clone(), @@ -229,33 +242,55 @@ impl StateUpdateWitness { ) .await?; - // if nothing changed, skip + // if nothing changed, append all values if old.balance == new.balance && old.nonce == new.nonce && old.code_hash == new.code_hash && old.storage_hash == new.storage_hash + && !include_initial_values { - println!("Skipping {:?} as nothing changed", address); continue; } + if include_initial_values { + initial_values.push(TrieModification::balance(address, old.balance)); + initial_values.push(TrieModification::nonce(address, old.nonce)); + initial_values.push(TrieModification::codehash(address, old.code_hash)); + + for key in storage_keys.iter() { + let old = old.storage_proof.iter().find(|p| p.key == *key).unwrap(); + if old.value == U256::zero() { + initial_values.push(TrieModification::storage_does_not_exist( + address, *key, old.value, + )); + } else { + initial_values.push(TrieModification::storage(address, *key, old.value)); + } + } + } + // check for this address changes if old.nonce != new.nonce { - trie_modifications.push(TrieModification::nonce(address, new.nonce)); + changed_values.push(TrieModification::nonce(address, new.nonce)); } if old.balance != new.balance { - trie_modifications.push(TrieModification::balance(address, new.balance)); + changed_values.push(TrieModification::balance(address, new.balance)); } - if old.code_hash != new.code_hash { - trie_modifications.push(TrieModification::codehash(address, new.code_hash)); + if old.code_hash != new.code_hash + // && new.code_hash != *DEFAULT_CODE_HASH + { + changed_values.push(TrieModification::codehash(address, new.code_hash)); } for key in storage_keys { let new = new.storage_proof.iter().find(|p| p.key == key).unwrap(); - trie_modifications.push(TrieModification::storage(address, key, new.value)); + changed_values.push(TrieModification::storage(address, key, new.value)); } } + let mut trie_modifications = initial_values; + trie_modifications.append(&mut changed_values); + Ok(Transforms { block_no, curr_state_root: curr_block.state_root, @@ -267,12 +302,13 @@ impl StateUpdateWitness { fn mpt_witness( trns: &Transforms, provider: &str, - ) -> Result<(Vec, SingleTrieModifications)> { - let nodes = mpt_witness_generator::get_witness( + ) -> Result<(Vec, FieldTrieModifications)> { + let json = geth_utils::get_witness( trns.block_no.as_u64() - 1, &trns.trie_modifications, provider, ); + let nodes = zkevm_circuits::mpt_circuit::load_proof(json.as_bytes())?; let witness_previous_state_root = H256::from_slice(&nodes[0].values[0][1..33]); let non_disabled_node = |n: &&Node| { @@ -283,8 +319,6 @@ impl StateUpdateWitness { let witness_current_state_root = H256::from_slice(&nodes.iter().rev().find(non_disabled_node).unwrap().values[1][1..33]); - // crate::utils::print_nodes(&nodes); - // check if the roots matches assert_eq!( witness_previous_state_root, trns.prev_state_root, @@ -317,28 +351,27 @@ impl StateUpdateWitness { let m = &trns.trie_modifications[lc_proofs.len()]; let changes = match m.typ { - ProofType::BalanceChanged => vec![( + ProofType::BalanceChanged => ( ProofType::BalanceChanged, m.address, m.balance, H256::zero(), - )], - ProofType::NonceChanged => vec![( + ), + ProofType::NonceChanged => ( ProofType::NonceChanged, m.address, U256::from(m.nonce.0[0]), H256::zero(), - )], - ProofType::StorageChanged => { - vec![(ProofType::StorageChanged, m.address, m.value, m.key)] - } - ProofType::CodeHashChanged => { - vec![( - ProofType::CodeHashChanged, - m.address, - U256::from_big_endian(&m.code_hash.0), - H256::zero(), - )] + ), + ProofType::StorageChanged => (ProofType::StorageChanged, m.address, m.value, m.key), + ProofType::CodeHashChanged => ( + ProofType::CodeHashChanged, + m.address, + U256::from_big_endian(&m.code_hash.0), + H256::zero(), + ), + ProofType::StorageDoesNotExist => { + (ProofType::StorageDoesNotExist, m.address, m.value, m.key) } _ => { println!("type unimplemented: {:?}", m.typ); @@ -346,19 +379,19 @@ impl StateUpdateWitness { } }; - for (proof_type, address, value, key) in changes { - let lc_proof = SingleTrieModification:: { - typ: F::from(proof_type as u64), - address: address.to_scalar().unwrap(), - value: Word::::from(value), - key: Word::::from(key), - old_root: Word::::from(from_root), - new_root: Word::::from(to_root), - }; - lc_proofs.push(lc_proof); - } + let (proof_type, address, value, key) = changes; + + let lc_proof = FieldTrieModification:: { + typ: F::from(proof_type as u64), + address: address.to_scalar().unwrap(), + value: WordLoHi::::from(value), + key: WordLoHi::::from(key), + old_root: WordLoHi::::from(from_root), + new_root: WordLoHi::::from(to_root), + }; + lc_proofs.push(lc_proof); } - Ok((nodes, SingleTrieModifications(lc_proofs))) + Ok((nodes, FieldTrieModifications(lc_proofs))) } } diff --git a/bin/mpt-test/src/main.rs b/bin/mpt-test/src/main.rs new file mode 100644 index 0000000000..ccd4dd6187 --- /dev/null +++ b/bin/mpt-test/src/main.rs @@ -0,0 +1,70 @@ +#[macro_use] +extern crate lazy_static; + +mod cache; +mod circuit; + +use ethers::{prelude::*, types::transaction::eip2930::AccessList}; +use eyre::Result; +use halo2_proofs::halo2curves::bn256::Fr; + +use circuit::{state_update::StateUpdateCircuit, witness::Witness}; + +// test the StateUpdate circuit with a mock prover +async fn mock_prove(block_no: u64, access_list: &str) -> Result<()> { + let provider_url = "http://localhost:3000"; + + let access_list: AccessList = serde_json::from_str(access_list)?; + let proof_count = 2 * access_list.0.len() * 3 + + access_list + .0 + .iter() + .map(|k| k.storage_keys.len()) + .sum::(); + + let max_nodes = 40000; + + let witness = Witness::::build(provider_url, U64::from(block_no), Some(access_list), true) + .await? + .unwrap(); + + let circuit = StateUpdateCircuit::new(witness, 16, max_nodes, proof_count + 10)?; + circuit.assert_satisfied(); + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<()> { + // load the cache file, if exists + cache::load().await?; + + // start the cache server + let _handle = tokio::task::spawn(cache::start()); + + // read all the access list files, sorting them by block number + let mut files: Vec<_> = glob::glob("access-lists/*.json") + .unwrap() + .filter_map(|v| v.ok()) + .map(|v| { + let block = v + .file_name() + .unwrap() + .to_str() + .unwrap() + .strip_suffix(".json") + .unwrap(); + let block: u64 = str::parse(block).unwrap(); + (block, v) + }) + .collect(); + + files.sort_by(|(a, _), (b, _)| a.cmp(b)); + + // prove each block + for (block_no, file) in files { + let json = std::fs::read_to_string(&file)?; + mock_prove(block_no, &json).await?; + } + + Ok(()) +} diff --git a/bin/mpt-test/test_mainnet_blocks.sh b/bin/mpt-test/test_mainnet_blocks.sh new file mode 100755 index 0000000000..5a636e414d --- /dev/null +++ b/bin/mpt-test/test_mainnet_blocks.sh @@ -0,0 +1,6 @@ +URL=https://drive.google.com/uc\?export\=download\&id\=1ki4OVizAlvDWHqdipJj4svMBNMBQ5cr5 +CACHE_FILE=web3_rpc_cache.bin +if [ ! -f "$CACHE_FILE" ]; then + wget -O $CACHE_FILE $URL +fi +cargo run --release \ No newline at end of file diff --git a/bus-mapping/src/circuit_input_builder/access.rs b/bus-mapping/src/circuit_input_builder/access.rs index 1626d6f97a..086396e749 100644 --- a/bus-mapping/src/circuit_input_builder/access.rs +++ b/bus-mapping/src/circuit_input_builder/access.rs @@ -72,7 +72,7 @@ impl From> for AccessSet { for access in list { match access.value { AccessValue::Account { address } => { - state.entry(address).or_insert_with(HashSet::new); + state.entry(address).or_default(); } AccessValue::Storage { address, key } => match state.entry(address) { Entry::Vacant(entry) => { @@ -85,7 +85,7 @@ impl From> for AccessSet { } }, AccessValue::Code { address } => { - state.entry(address).or_insert_with(HashSet::new); + state.entry(address).or_default(); code.insert(address); } } diff --git a/bus-mapping/src/circuit_input_builder/input_state_ref.rs b/bus-mapping/src/circuit_input_builder/input_state_ref.rs index 164f4ec72f..09b8089ef1 100644 --- a/bus-mapping/src/circuit_input_builder/input_state_ref.rs +++ b/bus-mapping/src/circuit_input_builder/input_state_ref.rs @@ -1225,7 +1225,7 @@ impl<'a> CircuitInputStateRef<'a> { ) -> Result<(), Error> { let call = self.call()?.clone(); let geth_step = steps - .get(0) + .first() .ok_or(Error::InternalError("invalid index 0"))?; let is_revert_or_return_call_success = (geth_step.op == OpcodeId::REVERT || geth_step.op == OpcodeId::RETURN) @@ -1424,7 +1424,7 @@ impl<'a> CircuitInputStateRef<'a> { let call = self.call()?; - if matches!(next_step, None) { + if next_step.is_none() { // enumerating call scope successful cases // case 1: call with normal halt opcode termination if matches!( diff --git a/bus-mapping/src/precompile.rs b/bus-mapping/src/precompile.rs index 0856d25760..3ccc940964 100644 --- a/bus-mapping/src/precompile.rs +++ b/bus-mapping/src/precompile.rs @@ -36,8 +36,9 @@ pub(crate) fn execute_precompiled( #[cfg(not(target_arch = "wasm32"))] { - let Some(Precompile::Standard(precompile_fn)) = Precompiles::berlin() - .get(address.as_fixed_bytes()) else { + let Some(Precompile::Standard(precompile_fn)) = + Precompiles::berlin().get(address.as_fixed_bytes()) + else { panic!("calling non-exist precompiled contract address") }; let (return_data, gas_cost, is_oog, is_ok) = match precompile_fn(input, gas) { diff --git a/circuit-benchmarks/src/mpt_circuit.rs b/circuit-benchmarks/src/mpt_circuit.rs index 5160e66a76..4ff5d40efa 100644 --- a/circuit-benchmarks/src/mpt_circuit.rs +++ b/circuit-benchmarks/src/mpt_circuit.rs @@ -22,7 +22,7 @@ mod tests { use rand::SeedableRng; use rand_xorshift::XorShiftRng; use std::{env::var, ops::Deref}; - use zkevm_circuits::mpt_circuit::{load_proof, witness_row::Node, MPTCircuit}; + use zkevm_circuits::mpt_circuit::{load_proof_from_file, witness_row::Node, MPTCircuit}; #[cfg_attr(not(feature = "benches"), ignore)] #[test] @@ -39,7 +39,7 @@ mod tests { .expect("Cannot parse DEGREE env var as u32"); let path = "../zkevm-circuits/src/mpt_circuit/tests/UpdateOneLevel.json"; - let nodes: Vec = load_proof(path); + let nodes: Vec = load_proof_from_file(path); let mut keccak_data = vec![]; for node in nodes.iter() { diff --git a/eth-types/src/bytecode.rs b/eth-types/src/bytecode.rs index 627ff10eae..09160e274e 100644 --- a/eth-types/src/bytecode.rs +++ b/eth-types/src/bytecode.rs @@ -1,7 +1,6 @@ //! EVM byte code generator use crate::{evm_types::OpcodeId, keccak256, Bytes, Hash, ToBigEndian, ToWord, Word}; -use std::{collections::HashMap, iter, str::FromStr}; - +use std::{collections::HashMap, fmt::Display, iter, str::FromStr}; /// Error type for Bytecode related failures #[derive(Debug)] pub enum Error { @@ -254,12 +253,13 @@ impl FromStr for OpcodeWithData { } } -impl ToString for OpcodeWithData { - fn to_string(&self) -> String { - match self { +impl Display for OpcodeWithData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let str = match self { OpcodeWithData::Opcode(opcode) => format!("{:?}", opcode), OpcodeWithData::PushWithData(n, word) => format!("PUSH{}({})", n, word), - } + }; + f.write_str(&str) } } @@ -576,6 +576,6 @@ mod tests { POP STOP }; - assert_eq!(Bytecode::try_from(code.code()).unwrap(), code); + assert_eq!(Bytecode::from(code.code()), code); } } diff --git a/eth-types/src/evm_types.rs b/eth-types/src/evm_types.rs index d9fa5ec40b..39adaa4a17 100644 --- a/eth-types/src/evm_types.rs +++ b/eth-types/src/evm_types.rs @@ -34,8 +34,7 @@ mod gas_create { // [gasCreate2Eip3860](https://github.com/ethereum/go-ethereum/blob/eb83e7c54021573eaceb14236af3a7a8c64f6027/core/vm/gas_table.go#L321) // (similar for CREATE). // 1. size <= 49152 (MaxInitCodeSize) - // 2. gasCost = memoryGasCost + (2 + 6) * ((size + 31) / 32) should not - // overflow for Uint64. + // 2. gasCost = memoryGasCost + (2 + 6) * ((size + 31) / 32) should not overflow for Uint64. // No need to constrain the second condition, since the maximum gas cost // cannot overflow for Uint64 (36028809887100925 calculated by // `memorySize = 0x1FFFFFFFE0` and `size = 49152`) if the first condition is diff --git a/eth-types/src/lib.rs b/eth-types/src/lib.rs index 5e1184dbdd..81ec46560b 100644 --- a/eth-types/src/lib.rs +++ b/eth-types/src/lib.rs @@ -8,7 +8,11 @@ #![deny(missing_docs)] //#![deny(unsafe_code)] Allowed now until we find a // better way to handle downcasting from Operation into it's variants. -#![allow(clippy::upper_case_acronyms)] // Too pedantic + +// Too pedantic +#![allow(clippy::upper_case_acronyms)] +// Clippy is buggy on this one. Remove after https://github.com/rust-lang/rust-clippy/issues/12101 is resolved. +#![allow(clippy::useless_vec)] #[macro_use] pub mod macros; @@ -24,9 +28,12 @@ pub use keccak::{keccak256, Keccak}; pub use bytecode::Bytecode; pub use error::Error; -use halo2_proofs::halo2curves::{ - bn256::{Fq, Fr}, - ff::{Field as Halo2Field, FromUniformBytes, PrimeField}, +use halo2_proofs::{ + halo2curves::{ + bn256::{Fq, Fr}, + ff::{Field as Halo2Field, FromUniformBytes, PrimeField}, + }, + plonk::Expression, }; use crate::evm_types::{memory::Memory, stack::Stack, storage::Storage, OpcodeId}; @@ -42,9 +49,58 @@ pub use ethers_core::{ use serde::{de, Deserialize, Serialize}; use std::{collections::HashMap, fmt, str::FromStr}; +/// trait to retrieve general operation itentity element +pub trait OpsIdentity { + /// output type + type Output; + /// additive identity + fn zero() -> Self::Output; + /// multiplicative identity + fn one() -> Self::Output; +} + +impl OpsIdentity for Expression { + type Output = Expression; + fn zero() -> Self::Output { + Expression::Constant(F::ZERO) + } + + fn one() -> Self::Output { + Expression::Constant(F::ONE) + } +} + +// Impl OpsIdentity for Fr +impl OpsIdentity for Fr { + type Output = Fr; + + fn zero() -> Self::Output { + Fr::zero() + } + + fn one() -> Self::Output { + Fr::one() + } +} + +// Impl OpsIdentity for Fq +impl OpsIdentity for Fq { + type Output = Fq; + + fn zero() -> Self::Output { + Fq::zero() + } + + fn one() -> Self::Output { + Fq::one() + } +} + /// Trait used to reduce verbosity with the declaration of the [`PrimeField`] /// trait and its repr. -pub trait Field: Halo2Field + PrimeField + FromUniformBytes<64> + Ord { +pub trait Field: + Halo2Field + PrimeField + FromUniformBytes<64> + Ord + OpsIdentity +{ /// Gets the lower 128 bits of this field element when expressed /// canonically. fn get_lower_128(&self) -> u128 { diff --git a/eth-types/src/sign_types.rs b/eth-types/src/sign_types.rs index 7d90553c99..af5dd261c4 100644 --- a/eth-types/src/sign_types.rs +++ b/eth-types/src/sign_types.rs @@ -154,9 +154,7 @@ pub fn ct_option_ok_or(v: CtOption, err: E) -> Result { /// Return a copy of the serialized public key with swapped Endianness. pub fn pk_bytes_swap_endianness(pk: &[T]) -> [T; 64] { assert_eq!(pk.len(), 64); - let mut pk_swap = <&[T; 64]>::try_from(pk) - .map(|r| r.clone()) - .expect("pk.len() != 64"); + let mut pk_swap = <&[T; 64]>::try_from(pk).cloned().expect("pk.len() != 64"); pk_swap[..32].reverse(); pk_swap[32..].reverse(); pk_swap diff --git a/geth-utils/Cargo.toml b/geth-utils/Cargo.toml index e0598d4ea3..0d0205d6cb 100644 --- a/geth-utils/Cargo.toml +++ b/geth-utils/Cargo.toml @@ -6,8 +6,15 @@ license = "MIT OR Apache-2.0" [build-dependencies] gobuild = "0.1.0-alpha.1" +glob = "0.3.1" [dev-dependencies] -eth-types = { path = "../eth-types" } serde = {version = "1.0.130", features = ["derive"] } -serde_json = "1.0.66" \ No newline at end of file +serde_json = "1.0.66" + +[dependencies] +eth-types = { path = "../eth-types" } +ethers = "2.0" +num_enum = "0.7.0" +serde = "1.0.188" +serde_json = "1.0.105" diff --git a/geth-utils/build.rs b/geth-utils/build.rs index 396de6484e..3a152a02ea 100644 --- a/geth-utils/build.rs +++ b/geth-utils/build.rs @@ -26,9 +26,11 @@ fn main() { } // Files the lib depends on that should recompile the lib - let dep_files = vec!["./gethutil/trace.go", "./go.mod"]; + + println!("cargo:rerun-if-changed=go.mod"); + let dep_files = glob::glob("../**/*.go").unwrap().filter_map(|v| v.ok()); for file in dep_files { - println!("cargo:rerun-if-changed={}", file); + println!("cargo:rerun-if-changed={}", file.to_str().unwrap()); } // Link diff --git a/mpt-witness-generator/oracle/apitypes.go b/geth-utils/gethutil/mpt/oracle/apitypes.go similarity index 100% rename from mpt-witness-generator/oracle/apitypes.go rename to geth-utils/gethutil/mpt/oracle/apitypes.go diff --git a/mpt-witness-generator/oracle/prefetch.go b/geth-utils/gethutil/mpt/oracle/prefetch.go similarity index 100% rename from mpt-witness-generator/oracle/prefetch.go rename to geth-utils/gethutil/mpt/oracle/prefetch.go diff --git a/mpt-witness-generator/oracle/preimage.go b/geth-utils/gethutil/mpt/oracle/preimage.go similarity index 100% rename from mpt-witness-generator/oracle/preimage.go rename to geth-utils/gethutil/mpt/oracle/preimage.go diff --git a/mpt-witness-generator/state/access_list.go b/geth-utils/gethutil/mpt/state/access_list.go similarity index 100% rename from mpt-witness-generator/state/access_list.go rename to geth-utils/gethutil/mpt/state/access_list.go diff --git a/mpt-witness-generator/state/database.go b/geth-utils/gethutil/mpt/state/database.go similarity index 96% rename from mpt-witness-generator/state/database.go rename to geth-utils/gethutil/mpt/state/database.go index 57eee638d6..52cdf1b596 100644 --- a/mpt-witness-generator/state/database.go +++ b/geth-utils/gethutil/mpt/state/database.go @@ -2,13 +2,13 @@ package state import ( "fmt" + "main/gethutil/mpt/oracle" + "main/gethutil/mpt/trie" "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" ) // TODO: add oracle calls here diff --git a/mpt-witness-generator/state/journal.go b/geth-utils/gethutil/mpt/state/journal.go similarity index 100% rename from mpt-witness-generator/state/journal.go rename to geth-utils/gethutil/mpt/state/journal.go diff --git a/mpt-witness-generator/state/state_object.go b/geth-utils/gethutil/mpt/state/state_object.go similarity index 99% rename from mpt-witness-generator/state/state_object.go rename to geth-utils/gethutil/mpt/state/state_object.go index 68630d1cbc..4225152f16 100644 --- a/mpt-witness-generator/state/state_object.go +++ b/geth-utils/gethutil/mpt/state/state_object.go @@ -20,6 +20,8 @@ import ( "bytes" "fmt" "io" + "main/gethutil/mpt/oracle" + "main/gethutil/mpt/trie" "math/big" "time" @@ -27,8 +29,6 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" ) var emptyCodeHash = crypto.Keccak256(nil) diff --git a/mpt-witness-generator/state/statedb.go b/geth-utils/gethutil/mpt/state/statedb.go similarity index 99% rename from mpt-witness-generator/state/statedb.go rename to geth-utils/gethutil/mpt/state/statedb.go index 99f38b2e4f..616f629b6d 100644 --- a/mpt-witness-generator/state/statedb.go +++ b/geth-utils/gethutil/mpt/state/statedb.go @@ -21,6 +21,8 @@ import ( "encoding/hex" "errors" "fmt" + "main/gethutil/mpt/oracle" + "main/gethutil/mpt/trie" "math/big" "sort" "time" @@ -32,8 +34,6 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" ) // for includes we don't have diff --git a/mpt-witness-generator/trie/committer.go b/geth-utils/gethutil/mpt/trie/committer.go similarity index 100% rename from mpt-witness-generator/trie/committer.go rename to geth-utils/gethutil/mpt/trie/committer.go diff --git a/mpt-witness-generator/trie/database.go b/geth-utils/gethutil/mpt/trie/database.go similarity index 97% rename from mpt-witness-generator/trie/database.go rename to geth-utils/gethutil/mpt/trie/database.go index 8595e00572..615c33b9c0 100644 --- a/mpt-witness-generator/trie/database.go +++ b/geth-utils/gethutil/mpt/trie/database.go @@ -3,6 +3,7 @@ package trie import ( "bytes" "io" + "main/gethutil/mpt/oracle" "math/big" "sync" @@ -10,7 +11,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" ) // rawNode is a simple binary blob used to differentiate between collapsed trie diff --git a/mpt-witness-generator/trie/encoding.go b/geth-utils/gethutil/mpt/trie/encoding.go similarity index 100% rename from mpt-witness-generator/trie/encoding.go rename to geth-utils/gethutil/mpt/trie/encoding.go diff --git a/mpt-witness-generator/trie/errors.go b/geth-utils/gethutil/mpt/trie/errors.go similarity index 100% rename from mpt-witness-generator/trie/errors.go rename to geth-utils/gethutil/mpt/trie/errors.go diff --git a/mpt-witness-generator/trie/hasher.go b/geth-utils/gethutil/mpt/trie/hasher.go similarity index 100% rename from mpt-witness-generator/trie/hasher.go rename to geth-utils/gethutil/mpt/trie/hasher.go diff --git a/mpt-witness-generator/trie/iterator.go b/geth-utils/gethutil/mpt/trie/iterator.go similarity index 100% rename from mpt-witness-generator/trie/iterator.go rename to geth-utils/gethutil/mpt/trie/iterator.go diff --git a/mpt-witness-generator/trie/node.go b/geth-utils/gethutil/mpt/trie/node.go similarity index 100% rename from mpt-witness-generator/trie/node.go rename to geth-utils/gethutil/mpt/trie/node.go diff --git a/mpt-witness-generator/trie/proof.go b/geth-utils/gethutil/mpt/trie/proof.go similarity index 100% rename from mpt-witness-generator/trie/proof.go rename to geth-utils/gethutil/mpt/trie/proof.go diff --git a/mpt-witness-generator/trie/secure_trie.go b/geth-utils/gethutil/mpt/trie/secure_trie.go similarity index 99% rename from mpt-witness-generator/trie/secure_trie.go rename to geth-utils/gethutil/mpt/trie/secure_trie.go index 3bf3a889f3..7ed19a2b54 100644 --- a/mpt-witness-generator/trie/secure_trie.go +++ b/geth-utils/gethutil/mpt/trie/secure_trie.go @@ -19,9 +19,10 @@ package trie import ( "fmt" + "main/gethutil/mpt/oracle" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" ) // SecureTrie wraps a trie with key hashing. In a secure trie, all diff --git a/mpt-witness-generator/trie/stacktrie.go b/geth-utils/gethutil/mpt/trie/stacktrie.go similarity index 99% rename from mpt-witness-generator/trie/stacktrie.go rename to geth-utils/gethutil/mpt/trie/stacktrie.go index d19087b5cc..c5a04e5926 100644 --- a/mpt-witness-generator/trie/stacktrie.go +++ b/geth-utils/gethutil/mpt/trie/stacktrie.go @@ -23,12 +23,12 @@ import ( "errors" "fmt" "io" + "main/gethutil/mpt/types" "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" - "github.com/privacy-scaling-explorations/mpt-witness-generator/types" //"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" diff --git a/mpt-witness-generator/trie/trie.go b/geth-utils/gethutil/mpt/trie/trie.go similarity index 100% rename from mpt-witness-generator/trie/trie.go rename to geth-utils/gethutil/mpt/trie/trie.go diff --git a/mpt-witness-generator/types/access_list_tx.go b/geth-utils/gethutil/mpt/types/access_list_tx.go similarity index 100% rename from mpt-witness-generator/types/access_list_tx.go rename to geth-utils/gethutil/mpt/types/access_list_tx.go diff --git a/mpt-witness-generator/types/block.go b/geth-utils/gethutil/mpt/types/block.go similarity index 100% rename from mpt-witness-generator/types/block.go rename to geth-utils/gethutil/mpt/types/block.go diff --git a/mpt-witness-generator/types/bloom9.go b/geth-utils/gethutil/mpt/types/bloom9.go similarity index 100% rename from mpt-witness-generator/types/bloom9.go rename to geth-utils/gethutil/mpt/types/bloom9.go diff --git a/mpt-witness-generator/types/dynamic_fee_tx.go b/geth-utils/gethutil/mpt/types/dynamic_fee_tx.go similarity index 100% rename from mpt-witness-generator/types/dynamic_fee_tx.go rename to geth-utils/gethutil/mpt/types/dynamic_fee_tx.go diff --git a/mpt-witness-generator/types/hashing.go b/geth-utils/gethutil/mpt/types/hashing.go similarity index 100% rename from mpt-witness-generator/types/hashing.go rename to geth-utils/gethutil/mpt/types/hashing.go diff --git a/mpt-witness-generator/types/legacy_tx.go b/geth-utils/gethutil/mpt/types/legacy_tx.go similarity index 100% rename from mpt-witness-generator/types/legacy_tx.go rename to geth-utils/gethutil/mpt/types/legacy_tx.go diff --git a/mpt-witness-generator/types/log.go b/geth-utils/gethutil/mpt/types/log.go similarity index 100% rename from mpt-witness-generator/types/log.go rename to geth-utils/gethutil/mpt/types/log.go diff --git a/mpt-witness-generator/types/receipt.go b/geth-utils/gethutil/mpt/types/receipt.go similarity index 100% rename from mpt-witness-generator/types/receipt.go rename to geth-utils/gethutil/mpt/types/receipt.go diff --git a/mpt-witness-generator/types/transaction.go b/geth-utils/gethutil/mpt/types/transaction.go similarity index 100% rename from mpt-witness-generator/types/transaction.go rename to geth-utils/gethutil/mpt/types/transaction.go diff --git a/mpt-witness-generator/types/transaction_signing.go b/geth-utils/gethutil/mpt/types/transaction_signing.go similarity index 100% rename from mpt-witness-generator/types/transaction_signing.go rename to geth-utils/gethutil/mpt/types/transaction_signing.go diff --git a/mpt-witness-generator/witness/branch.go b/geth-utils/gethutil/mpt/witness/branch.go similarity index 100% rename from mpt-witness-generator/witness/branch.go rename to geth-utils/gethutil/mpt/witness/branch.go diff --git a/mpt-witness-generator/witness/extension_node.go b/geth-utils/gethutil/mpt/witness/extension_node.go similarity index 100% rename from mpt-witness-generator/witness/extension_node.go rename to geth-utils/gethutil/mpt/witness/extension_node.go diff --git a/mpt-witness-generator/witness/gen_witness_from_infura_blockchain_test.go b/geth-utils/gethutil/mpt/witness/gen_witness_from_infura_blockchain_test.go similarity index 99% rename from mpt-witness-generator/witness/gen_witness_from_infura_blockchain_test.go rename to geth-utils/gethutil/mpt/witness/gen_witness_from_infura_blockchain_test.go index d185c77cc0..90c89d324e 100644 --- a/mpt-witness-generator/witness/gen_witness_from_infura_blockchain_test.go +++ b/geth-utils/gethutil/mpt/witness/gen_witness_from_infura_blockchain_test.go @@ -5,9 +5,10 @@ import ( "math/big" "testing" + "main/gethutil/mpt/oracle" + "main/gethutil/mpt/state" + "github.com/ethereum/go-ethereum/common" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" - "github.com/privacy-scaling-explorations/mpt-witness-generator/state" ) func TestUpdateOneLevel(t *testing.T) { diff --git a/mpt-witness-generator/witness/gen_witness_from_local_blockchain_test.go b/geth-utils/gethutil/mpt/witness/gen_witness_from_local_blockchain_test.go similarity index 99% rename from mpt-witness-generator/witness/gen_witness_from_local_blockchain_test.go rename to geth-utils/gethutil/mpt/witness/gen_witness_from_local_blockchain_test.go index 4508e8e22e..8471fb6353 100644 --- a/mpt-witness-generator/witness/gen_witness_from_local_blockchain_test.go +++ b/geth-utils/gethutil/mpt/witness/gen_witness_from_local_blockchain_test.go @@ -6,9 +6,11 @@ import ( "os/exec" "testing" + "main/gethutil/mpt/oracle" + "github.com/ethereum/go-ethereum/common" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" - "github.com/privacy-scaling-explorations/mpt-witness-generator/state" + + "main/gethutil/mpt/state" ) func SkipIfNoGeth(t *testing.T) { diff --git a/mpt-witness-generator/witness/gen_witness_transactions_test.go b/geth-utils/gethutil/mpt/witness/gen_witness_transactions_test.go similarity index 92% rename from mpt-witness-generator/witness/gen_witness_transactions_test.go rename to geth-utils/gethutil/mpt/witness/gen_witness_transactions_test.go index 51c10cd6dd..cd8c3b090d 100644 --- a/mpt-witness-generator/witness/gen_witness_transactions_test.go +++ b/geth-utils/gethutil/mpt/witness/gen_witness_transactions_test.go @@ -2,6 +2,8 @@ package witness import ( "fmt" + "main/gethutil/mpt/trie" + "main/gethutil/mpt/types" "math/big" "testing" @@ -11,8 +13,6 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" - "github.com/privacy-scaling-explorations/mpt-witness-generator/types" ) func TestTransactions(t *testing.T) { diff --git a/mpt-witness-generator/witness/leaf.go b/geth-utils/gethutil/mpt/witness/leaf.go similarity index 99% rename from mpt-witness-generator/witness/leaf.go rename to geth-utils/gethutil/mpt/witness/leaf.go index 95581e4ec8..308490d6c6 100644 --- a/mpt-witness-generator/witness/leaf.go +++ b/geth-utils/gethutil/mpt/witness/leaf.go @@ -3,8 +3,9 @@ package witness import ( "math" + "main/gethutil/mpt/trie" + "github.com/ethereum/go-ethereum/common" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" ) func prepareEmptyNonExistingStorageRow() []byte { diff --git a/mpt-witness-generator/witness/modified_extension_node.go b/geth-utils/gethutil/mpt/witness/modified_extension_node.go similarity index 97% rename from mpt-witness-generator/witness/modified_extension_node.go rename to geth-utils/gethutil/mpt/witness/modified_extension_node.go index ae547ceaf5..2e9eb331e1 100644 --- a/mpt-witness-generator/witness/modified_extension_node.go +++ b/geth-utils/gethutil/mpt/witness/modified_extension_node.go @@ -1,9 +1,10 @@ package witness import ( + "main/gethutil/mpt/state" + "main/gethutil/mpt/trie" + "github.com/ethereum/go-ethereum/common" - "github.com/privacy-scaling-explorations/mpt-witness-generator/state" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" ) // equipLeafWithModExtensionNode adds rows for a modified extension node before and after modification. diff --git a/mpt-witness-generator/witness/nodes.go b/geth-utils/gethutil/mpt/witness/nodes.go similarity index 98% rename from mpt-witness-generator/witness/nodes.go rename to geth-utils/gethutil/mpt/witness/nodes.go index 052290d206..d1d40ee83b 100644 --- a/mpt-witness-generator/witness/nodes.go +++ b/geth-utils/gethutil/mpt/witness/nodes.go @@ -4,8 +4,9 @@ import ( "encoding/hex" "encoding/json" + "main/gethutil/mpt/oracle" + "github.com/ethereum/go-ethereum/common" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" ) type BranchNode struct { diff --git a/mpt-witness-generator/witness/prepare_witness.go b/geth-utils/gethutil/mpt/witness/prepare_witness.go similarity index 98% rename from mpt-witness-generator/witness/prepare_witness.go rename to geth-utils/gethutil/mpt/witness/prepare_witness.go index e5df706238..2149bb8c27 100644 --- a/mpt-witness-generator/witness/prepare_witness.go +++ b/geth-utils/gethutil/mpt/witness/prepare_witness.go @@ -3,11 +3,12 @@ package witness import ( "math/big" + "main/gethutil/mpt/oracle" + "main/gethutil/mpt/state" + "main/gethutil/mpt/trie" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" - "github.com/privacy-scaling-explorations/mpt-witness-generator/oracle" - "github.com/privacy-scaling-explorations/mpt-witness-generator/state" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" ) const valueLen = 34 diff --git a/mpt-witness-generator/witness/test_tools.go b/geth-utils/gethutil/mpt/witness/test_tools.go similarity index 99% rename from mpt-witness-generator/witness/test_tools.go rename to geth-utils/gethutil/mpt/witness/test_tools.go index dbb65041cc..2613ace168 100644 --- a/mpt-witness-generator/witness/test_tools.go +++ b/geth-utils/gethutil/mpt/witness/test_tools.go @@ -3,8 +3,9 @@ package witness import ( "fmt" + "main/gethutil/mpt/trie" + "github.com/ethereum/go-ethereum/common" - "github.com/privacy-scaling-explorations/mpt-witness-generator/trie" ) // moveAccountFromSecondToFirstLevel moves an account from the second level to the first level (key stored in a leaf diff --git a/mpt-witness-generator/witness/util.go b/geth-utils/gethutil/mpt/witness/util.go similarity index 100% rename from mpt-witness-generator/witness/util.go rename to geth-utils/gethutil/mpt/witness/util.go diff --git a/geth-utils/go.mod b/geth-utils/go.mod index 8b468f2c19..a80c801fe2 100644 --- a/geth-utils/go.mod +++ b/geth-utils/go.mod @@ -4,5 +4,7 @@ go 1.16 require github.com/ethereum/go-ethereum v1.11.5 +require golang.org/x/crypto v0.1.0 + // Uncomment for debugging // replace github.com/ethereum/go-ethereum => ../../go-ethereum diff --git a/geth-utils/lib/lib.go b/geth-utils/lib/lib.go index 5f428c3583..59b00b6cce 100644 --- a/geth-utils/lib/lib.go +++ b/geth-utils/lib/lib.go @@ -8,11 +8,13 @@ import ( "encoding/json" "fmt" "main/gethutil" + "main/gethutil/mpt/witness" "unsafe" ) // TODO: Add proper error handling. For example, return an int, where 0 means // ok, and !=0 means error. +// //export CreateTrace func CreateTrace(configStr *C.char) *C.char { var config gethutil.TraceConfig @@ -34,6 +36,38 @@ func CreateTrace(configStr *C.char) *C.char { return C.CString(string(bytes)) } +type Config struct { + NodeUrl string `json:"NodeUrl"` + BlockNum int `json:"BlockNum"` + Addr string `json:"Addr"` + Keys []string `json:"Keys"` + Values []string `json:"Values"` +} + +type GetWitnessRequest struct { + BlockNum int `json:"BlockNum"` + NodeUrl string `json:"NodeUrl"` + Mods []witness.TrieModification +} + +//export GetMptWitness +func GetMptWitness(proofConf *C.char) *C.char { + var config GetWitnessRequest + + err := json.Unmarshal([]byte(C.GoString(proofConf)), &config) + if err != nil { + panic(err) + } + + proof := witness.GetWitness(config.NodeUrl, config.BlockNum, config.Mods) + b, err := json.Marshal(proof) + if err != nil { + fmt.Println(err) + } + + return C.CString(string(b)) +} + //export FreeString func FreeString(str *C.char) { C.free(unsafe.Pointer(str)) diff --git a/geth-utils/src/block.rs b/geth-utils/src/block.rs new file mode 100644 index 0000000000..1df6fd9514 --- /dev/null +++ b/geth-utils/src/block.rs @@ -0,0 +1,163 @@ +//! Connection to external EVM tracer. + +use crate::go; +use core::fmt::{Display, Formatter, Result as FmtResult}; +use std::ffi::{CStr, CString}; + +/// Creates the trace +pub fn trace(config: &str) -> Result { + // Create a string we can pass into Go + let c_config = CString::new(config).expect("invalid config"); + + // Generate the trace externally + let result = unsafe { go::CreateTrace(c_config.as_ptr()) }; + + // Convert the returned string to something we can use in Rust again. + // Also make sure the returned data is copied to rust managed memory. + let c_result = unsafe { CStr::from_ptr(result) }; + let result = c_result + .to_str() + .expect("Error translating EVM trace from library") + .to_string(); + + // We can now free the returned string (memory managed by Go) + unsafe { go::FreeString(c_result.as_ptr()) }; + + // Return the trace + match result.is_empty() || result.starts_with("Failed") { + true => Err(Error::TracingError(result)), + false => Ok(result), + } +} + +/// Error type for any geth-utils related failure. +#[derive(Debug, Clone)] +pub enum Error { + /// Error while tracing. + TracingError(String), +} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { + write!(f, "{:?}", self) + } +} + +#[cfg(test)] +mod test { + use eth_types::GethExecTrace; + + use crate::trace; + + #[test] + fn valid_tx() { + for config in [ + // Minimal call tx with gas_limit = 21000 + r#"{ + "block_constants": { + "gas_limit": "0x52080" + }, + "transactions": [ + { + "from": "0x00000000000000000000000000000000000000fe", + "to": "0x00000000000000000000000000000000000000ff", + "gas_limit": "0x5208" + } + ] + }"#, + // Minimal creation tx with gas_limit = 53000 + r#"{ + "block_constants": { + "gas_limit": "0xcf080" + }, + "transactions": [ + { + "from": "0x00000000000000000000000000000000000000fe", + "gas_limit": "0xcf08" + } + ] + }"#, + // Normal call tx with gas_limit = 21000 and gas_price = 2 Gwei + r#"{ + "block_constants": { + "gas_limit": "0x52080" + }, + "accounts": { + "0x00000000000000000000000000000000000000fe": { + "balance": "0x2632e314a000" + } + }, + "transactions": [ + { + "from": "0x00000000000000000000000000000000000000fe", + "to": "0x00000000000000000000000000000000000000ff", + "gas_limit": "0x5208", + "gas_price": "0x77359400" + } + ] + }"#, + ] { + let trace_result = trace(config); + assert!(trace_result.is_ok()); + // Run over the traces + let trace: Vec = serde_json::from_str(&trace_result.unwrap()).unwrap(); + for trace in trace.iter() { + assert!(!trace.invalid); + } + } + } + + #[test] + fn invalid_tx() { + for config in [ + // Insufficient gas for intrinsic usage + r#"{ + "block_constants": { + "gas_limit": "0xcf080" + }, + "transactions": [ + { + "from": "0x00000000000000000000000000000000000000fe", + "to": "0x00000000000000000000000000000000000000ff" + } + ] + }"#, + // Insufficient balance to buy gas + r#"{ + "block_constants": { + "gas_limit": "0x52080" + }, + "transactions": [ + { + "from": "0x00000000000000000000000000000000000000fe", + "to": "0x00000000000000000000000000000000000000ff", + "gas_limit": "0x5208", + "gas_price": "0x1111" + } + ] + }"#, + // Insufficient balance to do the first transfer + r#"{ + "block_constants": { + "gas_limit": "0x52080" + }, + "transactions": [ + { + "from": "0x00000000000000000000000000000000000000fe", + "to": "0x00000000000000000000000000000000000000ff", + "value": "0x100", + "gas_limit": "0x5208" + } + ] + }"#, + ] { + let trace_result = trace(config); + assert!(trace_result.is_ok()); + // Run over the traces + let trace: Vec = serde_json::from_str(&trace_result.unwrap()).unwrap(); + for trace in trace.iter() { + assert!(trace.invalid); + } + } + } +} diff --git a/geth-utils/src/lib.rs b/geth-utils/src/lib.rs index ee001295c7..3175693820 100644 --- a/geth-utils/src/lib.rs +++ b/geth-utils/src/lib.rs @@ -1,170 +1,16 @@ //! Connection to external EVM tracer. -use core::fmt::{Display, Formatter, Result as FmtResult}; -use std::{ - ffi::{CStr, CString}, - os::raw::c_char, -}; - -extern "C" { - fn CreateTrace(str: *const c_char) -> *const c_char; - fn FreeString(str: *const c_char); -} - -/// Creates the trace -pub fn trace(config: &str) -> Result { - // Create a string we can pass into Go - let c_config = CString::new(config).expect("invalid config"); - - // Generate the trace externally - let result = unsafe { CreateTrace(c_config.as_ptr()) }; - - // Convert the returned string to something we can use in Rust again. - // Also make sure the returned data is copied to rust managed memory. - let c_result = unsafe { CStr::from_ptr(result) }; - let result = c_result - .to_str() - .expect("Error translating EVM trace from library") - .to_string(); - - // We can now free the returned string (memory managed by Go) - unsafe { FreeString(c_result.as_ptr()) }; - - // Return the trace - match result.is_empty() || result.starts_with("Failed") { - true => Err(Error::TracingError(result)), - false => Ok(result), - } -} - -/// Error type for any geth-utils related failure. -#[derive(Debug, Clone)] -pub enum Error { - /// Error while tracing. - TracingError(String), -} - -impl Display for Error { - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - write!(f, "{:?}", self) - } -} - -#[cfg(test)] -mod test { - use eth_types::GethExecTrace; - - use crate::trace; - - #[test] - fn valid_tx() { - for config in [ - // Minimal call tx with gas_limit = 21000 - r#"{ - "block_constants": { - "gas_limit": "0x52080" - }, - "transactions": [ - { - "from": "0x00000000000000000000000000000000000000fe", - "to": "0x00000000000000000000000000000000000000ff", - "gas_limit": "0x5208" - } - ] - }"#, - // Minimal creation tx with gas_limit = 53000 - r#"{ - "block_constants": { - "gas_limit": "0xcf080" - }, - "transactions": [ - { - "from": "0x00000000000000000000000000000000000000fe", - "gas_limit": "0xcf08" - } - ] - }"#, - // Normal call tx with gas_limit = 21000 and gas_price = 2 Gwei - r#"{ - "block_constants": { - "gas_limit": "0x52080" - }, - "accounts": { - "0x00000000000000000000000000000000000000fe": { - "balance": "0x2632e314a000" - } - }, - "transactions": [ - { - "from": "0x00000000000000000000000000000000000000fe", - "to": "0x00000000000000000000000000000000000000ff", - "gas_limit": "0x5208", - "gas_price": "0x77359400" - } - ] - }"#, - ] { - let trace_result = trace(config); - assert!(trace_result.is_ok()); - // Run over the traces - let trace: Vec = serde_json::from_str(&trace_result.unwrap()).unwrap(); - for trace in trace.iter() { - assert!(!trace.invalid); - } - } - } - - #[test] - fn invalid_tx() { - for config in [ - // Insufficient gas for intrinsic usage - r#"{ - "block_constants": { - "gas_limit": "0xcf080" - }, - "transactions": [ - { - "from": "0x00000000000000000000000000000000000000fe", - "to": "0x00000000000000000000000000000000000000ff" - } - ] - }"#, - // Insufficient balance to buy gas - r#"{ - "block_constants": { - "gas_limit": "0x52080" - }, - "transactions": [ - { - "from": "0x00000000000000000000000000000000000000fe", - "to": "0x00000000000000000000000000000000000000ff", - "gas_limit": "0x5208", - "gas_price": "0x1111" - } - ] - }"#, - // Insufficient balance to do the first transfer - r#"{ - "block_constants": { - "gas_limit": "0x52080" - }, - "transactions": [ - { - "from": "0x00000000000000000000000000000000000000fe", - "to": "0x00000000000000000000000000000000000000ff", - "value": "0x100", - "gas_limit": "0x5208" - } - ] - }"#, - ] { - let trace_result = trace(config); - assert!(trace_result.is_ok()); - // Run over the traces - let trace: Vec = serde_json::from_str(&trace_result.unwrap()).unwrap(); - for trace in trace.iter() { - assert!(trace.invalid); - } - } +pub mod block; +pub mod mpt; + +pub use block::*; +pub use mpt::*; + +mod go { + use std::os::raw::c_char; + extern "C" { + pub fn CreateTrace(str: *const c_char) -> *const c_char; + pub fn GetMptWitness(str: *const c_char) -> *const c_char; + pub fn FreeString(str: *const c_char); } } diff --git a/mpt-witness-generator/rustlib/src/lib.rs b/geth-utils/src/mpt.rs similarity index 51% rename from mpt-witness-generator/rustlib/src/lib.rs rename to geth-utils/src/mpt.rs index 6e9112a856..46c60d0e65 100644 --- a/mpt-witness-generator/rustlib/src/lib.rs +++ b/geth-utils/src/mpt.rs @@ -1,20 +1,10 @@ use ethers::types::{Address, H256, U64}; use serde::Serialize; -use std::{ - ffi::{CStr, CString}, - os::raw::c_char, -}; +use std::ffi::{CStr, CString}; +use crate::go; +use eth_types::U256; use num_enum::IntoPrimitive; -use zkevm_circuits::{mpt_circuit::witness_row::Node, util::U256}; - -mod golang { - use super::*; - extern "C" { - pub fn GetWitness(str: *const c_char) -> *const c_char; - pub fn FreeString(str: *const c_char); - } -} #[derive(Default, Debug, IntoPrimitive, Clone, Copy)] #[repr(u8)] @@ -70,7 +60,7 @@ struct GetWitnessRequest<'a> { node_url: &'a str, } -pub fn get_witness(block_no: u64, mods: &[TrieModification], node_url: &str) -> Vec { +pub fn get_witness(block_no: u64, mods: &[TrieModification], node_url: &str) -> String { let mods: Vec<_> = mods .iter() .map(|m| TrieModificationJson { @@ -96,55 +86,18 @@ pub fn get_witness(block_no: u64, mods: &[TrieModification], node_url: &str) -> let json = serde_json::to_string(&req).expect("Invalid request"); let c_config = CString::new(json).expect("invalid config"); - let result = unsafe { golang::GetWitness(c_config.as_ptr() as *const i8) }; + let result = unsafe { go::GetMptWitness(c_config.as_ptr()) }; let c_str = unsafe { CStr::from_ptr(result) }; - let json = c_str.to_str().expect("Error translating from library"); - - let mut nodes: Vec = serde_json::from_str(json).unwrap(); - unsafe { golang::FreeString(c_str.as_ptr()) }; - - // Add the address and the key to the list of values in the Account and Storage nodes - for node in nodes.iter_mut() { - if node.account.is_some() { - let account = node.account.clone().unwrap(); - node.values - .push([vec![148], account.address.to_vec()].concat().into()); - node.values - .push([vec![160], account.key.to_vec()].concat().into()); - } - if node.storage.is_some() { - let storage = node.storage.clone().unwrap(); - node.values - .push([vec![160], storage.address.to_vec()].concat().into()); - node.values - .push([vec![160], storage.key.to_vec()].concat().into()); - } - } - nodes -} + let json = c_str + .to_str() + .expect("Error translating from library") + .to_string(); -#[cfg(test)] -mod tests { - use std::str::FromStr; + unsafe { go::FreeString(c_str.as_ptr()) }; - use super::*; + // Note: previously this function returned a Vec of Nodes, but now returning a JSON string + // to avoid imporing zkEVM circuit here (that will create a circular dependency). + // TODO: consider defining Node types in another crate. - #[test] - fn it_works() { - let nodes = get_witness( - 14359865, - &[TrieModification { - typ: ProofType::StorageChanged, - key: H256::from_low_u64_le(0x12), - value: 0x1123e2.into(), - address: Address::from_str("0x4E5B2e1dc63F6b91cb6Cd759936495434C7e972F").unwrap(), - nonce: 0.into(), - balance: 0.into(), - code_hash: H256::zero(), - }], - "https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161", - ); - println!("{:?}", nodes); - assert_eq!(nodes.len(), 12); - } + json } diff --git a/light-client-poc/.gitignore b/light-client-poc/.gitignore deleted file mode 100644 index d76dbdb852..0000000000 --- a/light-client-poc/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target -go-ethereum-data/geth diff --git a/light-client-poc/Cargo.lock b/light-client-poc/Cargo.lock deleted file mode 100644 index d4e82fd138..0000000000 --- a/light-client-poc/Cargo.lock +++ /dev/null @@ -1,5148 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aes" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "ahash" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloy-rlp" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f938f00332d63a5b0ac687bd6f46d03884638948921d9f8b50c59563d421ae25" -dependencies = [ - "arrayvec", - "bytes", - "smol_str", -] - -[[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", - "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", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.4.0", - "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-macros" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" -dependencies = [ - "num-bigint", - "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", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[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", -] - -[[package]] -name = "ark-std" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "array-init" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23589ecb866b460d3a0f1278834750268c607e8e28a1b982c907219f3178cd72" -dependencies = [ - "nodrop", -] - -[[package]] -name = "array-init" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" - -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - -[[package]] -name = "async-trait" -version = "0.1.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version 0.4.0", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "auto_impl" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" - -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bech32" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" - -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" - -[[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 = "blake2b_simd" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq 0.2.6", -] - -[[package]] -name = "block-buffer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" -dependencies = [ - "arrayref", - "byte-tools", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "block-padding", - "generic-array 0.14.7", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "bs58" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" -dependencies = [ - "sha2 0.10.7", - "tinyvec", -] - -[[package]] -name = "bumpalo" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" - -[[package]] -name = "bus-mapping" -version = "0.1.0" -dependencies = [ - "eth-types", - "ethers-core 2.0.10", - "ethers-providers 2.0.10", - "gadgets", - "halo2_proofs", - "itertools", - "lazy_static", - "log", - "revm-precompile", - "serde", - "serde_json", - "strum 0.24.1", - "strum_macros 0.24.3", -] - -[[package]] -name = "byte-slice-cast" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" - -[[package]] -name = "byte-tools" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" -dependencies = [ - "serde", -] - -[[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.18", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877" -dependencies = [ - "num-traits", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "coins-bip32" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" -dependencies = [ - "bs58", - "coins-core", - "digest 0.10.7", - "hmac 0.12.1", - "k256", - "serde", - "sha2 0.10.7", - "thiserror", -] - -[[package]] -name = "coins-bip39" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" -dependencies = [ - "bitvec", - "coins-bip32", - "hmac 0.12.1", - "once_cell", - "pbkdf2 0.12.2", - "rand", - "sha2 0.10.7", - "thiserror", -] - -[[package]] -name = "coins-core" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" -dependencies = [ - "base64 0.21.3", - "bech32", - "bs58", - "digest 0.10.7", - "generic-array 0.14.7", - "hex", - "ripemd", - "serde", - "serde_derive", - "sha2 0.10.7", - "sha3 0.10.8", - "thiserror", -] - -[[package]] -name = "const-hex" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08849ed393c907c90016652a01465a12d86361cd38ad2a7de026c56a520cc259" -dependencies = [ - "cfg-if", - "cpufeatures", - "hex", - "serde", -] - -[[package]] -name = "const-oid" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "constant_time_eq" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "cpufeatures" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" -dependencies = [ - "generic-array 0.14.7", - "rand_core", - "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 0.14.7", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "data-encoding" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" - -[[package]] -name = "der" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" - -[[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.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn 1.0.109", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" -dependencies = [ - "generic-array 0.9.1", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "ecc" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_04_20#f72db265aa3cebe297c9b9816e940d0e1d400886" -dependencies = [ - "integer", - "num-bigint", - "num-integer", - "num-traits", - "rand", - "subtle", -] - -[[package]] -name = "ecdsa" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_04_20#f72db265aa3cebe297c9b9816e940d0e1d400886" -dependencies = [ - "ecc", - "num-bigint", - "num-integer", - "num-traits", - "rand", - "subtle", -] - -[[package]] -name = "ecdsa" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elliptic-curve" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array 0.14.7", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "ena" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" -dependencies = [ - "log", -] - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enr" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be7b2ac146c1f99fe245c02d16af0696450d8e06c135db75e10eeb9e642c20d" -dependencies = [ - "base64 0.21.3", - "bytes", - "hex", - "k256", - "log", - "rand", - "rlp", - "serde", - "serde-hex", - "sha3 0.10.8", - "zeroize", -] - -[[package]] -name = "enumn" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "eth-keystore" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes", - "ctr", - "digest 0.10.7", - "hex", - "hmac 0.12.1", - "pbkdf2 0.11.0", - "rand", - "scrypt", - "serde", - "serde_json", - "sha2 0.10.7", - "sha3 0.10.8", - "thiserror", - "uuid", -] - -[[package]] -name = "eth-types" -version = "0.1.0" -dependencies = [ - "ethers-core 2.0.10", - "ethers-signers 2.0.10", - "halo2_proofs", - "hex", - "itertools", - "lazy_static", - "libsecp256k1", - "num", - "num-bigint", - "regex", - "serde", - "serde_json", - "serde_with", - "strum 0.24.1", - "strum_macros 0.24.3", - "subtle", - "uint", -] - -[[package]] -name = "ethabi" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" -dependencies = [ - "ethereum-types", - "hex", - "once_cell", - "regex", - "serde", - "serde_json", - "sha3 0.10.8", - "thiserror", - "uint", -] - -[[package]] -name = "ethbloom" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "tiny-keccak", -] - -[[package]] -name = "ethereum-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "primitive-types", - "scale-info", - "uint", -] - -[[package]] -name = "ethers" -version = "2.0.8" -dependencies = [ - "ethers-addressbook 2.0.8", - "ethers-contract 2.0.8", - "ethers-core 2.0.8", - "ethers-etherscan 2.0.8", - "ethers-middleware 2.0.8", - "ethers-providers 2.0.8", - "ethers-signers 2.0.8", - "ethers-solc 2.0.8", -] - -[[package]] -name = "ethers" -version = "2.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba3fd516c15a9a587135229466dbbfc85796de55c5660afbbb1b1c78517d85c" -dependencies = [ - "ethers-addressbook 2.0.10", - "ethers-contract 2.0.10", - "ethers-core 2.0.10", - "ethers-etherscan 2.0.10", - "ethers-middleware 2.0.10", - "ethers-providers 2.0.10", - "ethers-signers 2.0.10", - "ethers-solc 2.0.9", -] - -[[package]] -name = "ethers-addressbook" -version = "2.0.8" -dependencies = [ - "ethers-core 2.0.8", - "once_cell", - "serde", - "serde_json", -] - -[[package]] -name = "ethers-addressbook" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e9e8acd0ed348403cc73a670c24daba3226c40b98dc1a41903766b3ab6240a" -dependencies = [ - "ethers-core 2.0.10", - "once_cell", - "serde", - "serde_json", -] - -[[package]] -name = "ethers-contract" -version = "2.0.8" -dependencies = [ - "ethers-contract-abigen 2.0.8", - "ethers-contract-derive 2.0.8", - "ethers-core 2.0.8", - "ethers-providers 2.0.8", - "ethers-signers 2.0.8", - "futures-util", - "hex", - "once_cell", - "pin-project", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "ethers-contract" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" -dependencies = [ - "const-hex", - "ethers-contract-abigen 2.0.10", - "ethers-contract-derive 2.0.10", - "ethers-core 2.0.10", - "ethers-providers 2.0.10", - "futures-util", - "once_cell", - "pin-project", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "ethers-contract-abigen" -version = "2.0.8" -dependencies = [ - "Inflector", - "dunce", - "ethers-core 2.0.8", - "ethers-etherscan 2.0.8", - "eyre", - "hex", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "reqwest", - "serde", - "serde_json", - "syn 2.0.31", - "toml", - "walkdir", -] - -[[package]] -name = "ethers-contract-abigen" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce95a43c939b2e4e2f3191c5ad4a1f279780b8a39139c9905b43a7433531e2ab" -dependencies = [ - "Inflector", - "const-hex", - "dunce", - "ethers-core 2.0.10", - "ethers-etherscan 2.0.10", - "eyre", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "reqwest", - "serde", - "serde_json", - "syn 2.0.31", - "toml", - "walkdir", -] - -[[package]] -name = "ethers-contract-derive" -version = "2.0.8" -dependencies = [ - "Inflector", - "ethers-contract-abigen 2.0.8", - "ethers-core 2.0.8", - "hex", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.31", -] - -[[package]] -name = "ethers-contract-derive" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9ce44906fc871b3ee8c69a695ca7ec7f70e50cb379c9b9cb5e532269e492f6" -dependencies = [ - "Inflector", - "const-hex", - "ethers-contract-abigen 2.0.10", - "ethers-core 2.0.10", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.31", -] - -[[package]] -name = "ethers-core" -version = "2.0.8" -dependencies = [ - "arrayvec", - "bytes", - "cargo_metadata", - "chrono", - "elliptic-curve", - "ethabi", - "generic-array 0.14.7", - "hex", - "k256", - "num_enum 0.6.1", - "once_cell", - "open-fastrlp", - "rand", - "rlp", - "serde", - "serde_json", - "strum 0.25.0", - "syn 2.0.31", - "tempfile", - "thiserror", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "ethers-core" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" -dependencies = [ - "arrayvec", - "bytes", - "cargo_metadata", - "chrono", - "const-hex", - "elliptic-curve", - "ethabi", - "generic-array 0.14.7", - "k256", - "num_enum 0.7.0", - "once_cell", - "open-fastrlp", - "rand", - "rlp", - "serde", - "serde_json", - "strum 0.25.0", - "syn 2.0.31", - "tempfile", - "thiserror", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "ethers-etherscan" -version = "2.0.8" -dependencies = [ - "ethers-core 2.0.8", - "ethers-solc 2.0.8", - "reqwest", - "semver 1.0.18", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "ethers-etherscan" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e53451ea4a8128fbce33966da71132cf9e1040dcfd2a2084fd7733ada7b2045" -dependencies = [ - "ethers-core 2.0.10", - "reqwest", - "semver 1.0.18", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "ethers-middleware" -version = "2.0.8" -dependencies = [ - "async-trait", - "auto_impl", - "ethers-contract 2.0.8", - "ethers-core 2.0.8", - "ethers-etherscan 2.0.8", - "ethers-providers 2.0.8", - "ethers-signers 2.0.8", - "futures-channel", - "futures-locks", - "futures-util", - "instant", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "tracing-futures", - "url", -] - -[[package]] -name = "ethers-middleware" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473f1ccd0c793871bbc248729fa8df7e6d2981d6226e4343e3bbaa9281074d5d" -dependencies = [ - "async-trait", - "auto_impl", - "ethers-contract 2.0.10", - "ethers-core 2.0.10", - "ethers-etherscan 2.0.10", - "ethers-providers 2.0.10", - "ethers-signers 2.0.10", - "futures-channel", - "futures-locks", - "futures-util", - "instant", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "tracing-futures", - "url", -] - -[[package]] -name = "ethers-providers" -version = "2.0.8" -dependencies = [ - "async-trait", - "auto_impl", - "base64 0.21.3", - "bytes", - "enr", - "ethers-core 2.0.8", - "futures-channel", - "futures-core", - "futures-timer", - "futures-util", - "hashers", - "hex", - "http", - "instant", - "jsonwebtoken", - "once_cell", - "pin-project", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-tungstenite 0.19.0", - "tracing", - "tracing-futures", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "ws_stream_wasm", -] - -[[package]] -name = "ethers-providers" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" -dependencies = [ - "async-trait", - "auto_impl", - "base64 0.21.3", - "bytes", - "const-hex", - "enr", - "ethers-core 2.0.10", - "futures-channel", - "futures-core", - "futures-timer", - "futures-util", - "hashers", - "http", - "instant", - "jsonwebtoken", - "once_cell", - "pin-project", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-tungstenite 0.20.0", - "tracing", - "tracing-futures", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "ws_stream_wasm", -] - -[[package]] -name = "ethers-signers" -version = "2.0.8" -dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "elliptic-curve", - "eth-keystore", - "ethers-core 2.0.8", - "hex", - "rand", - "sha2 0.10.7", - "thiserror", - "tracing", -] - -[[package]] -name = "ethers-signers" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea44bec930f12292866166f9ddbea6aa76304850e4d8dcd66dc492b43d00ff1" -dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "const-hex", - "elliptic-curve", - "eth-keystore", - "ethers-core 2.0.10", - "rand", - "sha2 0.10.7", - "thiserror", - "tracing", -] - -[[package]] -name = "ethers-solc" -version = "2.0.8" -dependencies = [ - "cfg-if", - "dirs", - "dunce", - "ethers-core 2.0.8", - "glob", - "hex", - "home", - "md-5", - "num_cpus", - "once_cell", - "path-slash", - "rayon", - "regex", - "semver 1.0.18", - "serde", - "serde_json", - "solang-parser", - "svm-rs", - "thiserror", - "tiny-keccak", - "tokio", - "tracing", - "walkdir", - "yansi", -] - -[[package]] -name = "ethers-solc" -version = "2.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66559c8f774712df303c907d087275a52a2046b256791aaa566d5abc8ea66731" -dependencies = [ - "cfg-if", - "const-hex", - "dirs", - "dunce", - "ethers-core 2.0.10", - "glob", - "home", - "md-5", - "num_cpus", - "once_cell", - "path-slash", - "rayon", - "regex", - "semver 1.0.18", - "serde", - "serde_json", - "solang-parser", - "svm-rs", - "thiserror", - "tiny-keccak", - "tokio", - "tracing", - "walkdir", - "yansi", -] - -[[package]] -name = "eyre" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fastrand" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" - -[[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 = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "rand_core", - "subtle", -] - -[[package]] -name = "fixed-hash" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" -dependencies = [ - "byteorder", - "rand", - "rustc-hex", - "static_assertions", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - -[[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.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-locks" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" -dependencies = [ - "futures-channel", - "futures-task", -] - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-timer" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" -dependencies = [ - "gloo-timers", - "send_wrapper 0.4.0", -] - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gadgets" -version = "0.1.0" -dependencies = [ - "digest 0.7.6", - "eth-types", - "halo2_proofs", - "sha3 0.7.3", - "strum 0.24.1", -] - -[[package]] -name = "generic-array" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d00328cedcac5e81c683e5620ca6a30756fc23027ebf9bff405c0e8da1fbb7e" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gobuild" -version = "0.1.0-alpha.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e156a4ddbf3deb5e8116946c111413bd9a5679bdc1536c78a60618a7a9ac9e" -dependencies = [ - "cc", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 1.9.3", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "halo2_proofs" -version = "0.2.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_04_20#be955686f86eb618f55d2320c0e042485b313d22" -dependencies = [ - "blake2b_simd", - "ff", - "group", - "halo2curves", - "rand_chacha", - "rand_core", - "rayon", - "sha3 0.9.1", - "tracing", -] - -[[package]] -name = "halo2curves" -version = "0.3.2" -source = "git+https://github.com/privacy-scaling-explorations/halo2curves?tag=0.3.2#9f5c50810bbefe779ee5cf1d852b2fe85dc35d5e" -dependencies = [ - "ff", - "group", - "lazy_static", - "num-bigint", - "num-traits", - "pasta_curves", - "paste", - "rand", - "rand_core", - "static_assertions", - "subtle", -] - -[[package]] -name = "halo2wrong" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_04_20#f72db265aa3cebe297c9b9816e940d0e1d400886" -dependencies = [ - "halo2_proofs", - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - -[[package]] -name = "hashers" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" -dependencies = [ - "fxhash", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac", - "digest 0.9.0", -] - -[[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 = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest 0.9.0", - "generic-array 0.14.7", - "hmac 0.8.1", -] - -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.4.9", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" -dependencies = [ - "futures-util", - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[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-rlp" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" -dependencies = [ - "rlp", -] - -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" -dependencies = [ - "equivalent", - "hashbrown 0.14.0", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_04_20#f72db265aa3cebe297c9b9816e940d0e1d400886" -dependencies = [ - "maingate", - "num-bigint", - "num-integer", - "num-traits", - "rand", - "subtle", -] - -[[package]] -name = "ipnet" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" - -[[package]] -name = "is-terminal" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" -dependencies = [ - "hermit-abi 0.3.2", - "rustix", - "windows-sys", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" - -[[package]] -name = "jobserver" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "jsonwebtoken" -version = "8.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" -dependencies = [ - "base64 0.21.3", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", -] - -[[package]] -name = "k256" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" -dependencies = [ - "cfg-if", - "ecdsa 0.16.8", - "elliptic-curve", - "once_cell", - "sha2 0.10.7", - "signature", -] - -[[package]] -name = "keccak" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lalrpop" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" -dependencies = [ - "ascii-canvas", - "bit-set", - "diff", - "ena", - "is-terminal", - "itertools", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax 0.7.5", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin", -] - -[[package]] -name = "libc" -version = "0.2.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" - -[[package]] -name = "libm" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" - -[[package]] -name = "libsecp256k1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" -dependencies = [ - "arrayref", - "base64 0.13.1", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand", - "serde", - "sha2 0.9.9", - "typenum", -] - -[[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 = "light-client-poc" -version = "0.1.0" -dependencies = [ - "ethers 2.0.8", - "eyre", - "halo2_proofs", - "hex", - "mpt-witness-generator", - "num_enum 0.6.1", - "reqwest", - "serde", - "serde_json", - "tokio", - "zkevm-circuits", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" - -[[package]] -name = "lock_api" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "maingate" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_04_20#f72db265aa3cebe297c9b9816e940d0e1d400886" -dependencies = [ - "halo2wrong", - "num-bigint", - "num-integer", - "num-traits", - "rand", - "subtle", -] - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "memchr" -version = "2.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" -dependencies = [ - "libc", - "wasi", - "windows-sys", -] - -[[package]] -name = "mpt-witness-generator" -version = "0.1.0" -dependencies = [ - "env_logger", - "ethers 2.0.9", - "glob", - "gobuild", - "log", - "num_enum 0.7.0", - "serde", - "serde_json", - "zkevm-circuits", -] - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "num" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", - "rand", -] - -[[package]] -name = "num-complex" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.2", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive 0.5.11", -] - -[[package]] -name = "num_enum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" -dependencies = [ - "num_enum_derive 0.6.1", -] - -[[package]] -name = "num_enum" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" -dependencies = [ - "num_enum_derive 0.7.0", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num_enum_derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "object" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "open-fastrlp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", - "ethereum-types", - "open-fastrlp-derive", -] - -[[package]] -name = "open-fastrlp-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" -dependencies = [ - "bytes", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "openssl" -version = "0.10.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" -dependencies = [ - "bitflags 2.4.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "parity-scale-codec" -version = "3.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d640b40e81625f53b59f9c5812d3fb9e7ce11971d3fb34268eb7a83adf98051" -dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ac464815d51fff2f64d690bf6ea4442d365e53495d50737685cfecfa3dd3f62" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.3.5", - "smallvec 1.11.0", - "windows-targets", -] - -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core", - "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", - "group", - "lazy_static", - "rand", - "static_assertions", - "subtle", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "path-slash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", - "password-hash", - "sha2 0.10.7", -] - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", -] - -[[package]] -name = "pem" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] - -[[package]] -name = "percent-encoding" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" - -[[package]] -name = "pest" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap 2.0.0", -] - -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version 0.4.0", -] - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared 0.11.2", - "rand", -] - -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator", - "phf_shared 0.11.2", - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "poseidon" -version = "0.2.0" -source = "git+https://github.com/privacy-scaling-explorations/poseidon.git?tag=v2023_04_20#807f8f555313f726ca03bdf941f798098f488ba4" -dependencies = [ - "halo2curves", - "subtle", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "prettyplease" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" -dependencies = [ - "proc-macro2", - "syn 2.0.31", -] - -[[package]] -name = "primitive-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" -dependencies = [ - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proptest" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" -dependencies = [ - "bitflags 1.3.2", - "byteorder", - "lazy_static", - "num-traits", - "rand", - "rand_chacha", - "rand_xorshift", - "regex-syntax 0.6.29", - "unarray", -] - -[[package]] -name = "quote" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[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", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rand_xorshift" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" -dependencies = [ - "rand_core", -] - -[[package]] -name = "rayon" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax 0.7.5", -] - -[[package]] -name = "regex-automata" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.7.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - -[[package]] -name = "reqwest" -version = "0.11.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" -dependencies = [ - "base64 0.21.3", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.25.2", - "winreg", -] - -[[package]] -name = "revm" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73d84c8f9836efb0f5f5f8de4700a953c4e1f3119e5cfcb0aad8e5be73daf991" -dependencies = [ - "arrayref", - "auto_impl", - "bytes", - "hashbrown 0.13.2", - "num_enum 0.5.11", - "primitive-types", - "revm_precompiles", - "rlp", - "sha3 0.10.8", -] - -[[package]] -name = "revm-precompile" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41320af3bd6a65153d38eb1d3638ba89104cc9513c7feedb2d8510e8307dab29" -dependencies = [ - "k256", - "num", - "once_cell", - "revm-primitives", - "ripemd", - "secp256k1 0.27.0", - "sha2 0.10.7", - "sha3 0.10.8", - "substrate-bn", -] - -[[package]] -name = "revm-primitives" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "304d998f466ffef72d76c7f20b05bf08a96801736a6fb1fdef47d49a292618df" -dependencies = [ - "auto_impl", - "bitvec", - "bytes", - "derive_more", - "enumn", - "fixed-hash", - "hashbrown 0.13.2", - "hex", - "hex-literal", - "primitive-types", - "rlp", - "ruint", - "sha3 0.10.8", -] - -[[package]] -name = "revm_precompiles" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0353d456ef3e989dc9190f42c6020f09bc2025930c37895826029304413204b5" -dependencies = [ - "bytes", - "hashbrown 0.13.2", - "num", - "once_cell", - "primitive-types", - "ripemd", - "secp256k1 0.24.3", - "sha2 0.10.7", - "sha3 0.10.8", - "substrate-bn", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac 0.12.1", - "subtle", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[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 = "rlp" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" -dependencies = [ - "bytes", - "rlp-derive", - "rustc-hex", -] - -[[package]] -name = "rlp-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ruint" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95294d6e3a6192f3aabf91c38f56505a625aa495533442744185a36d75a790c4" -dependencies = [ - "alloy-rlp", - "ark-ff 0.3.0", - "ark-ff 0.4.2", - "bytes", - "fastrlp", - "num-bigint", - "parity-scale-codec", - "primitive-types", - "proptest", - "rand", - "rlp", - "ruint-macro", - "serde", - "valuable", - "zeroize", -] - -[[package]] -name = "ruint-macro" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e666a5496a0b2186dbcd0ff6106e29e093c15591bde62c20d3842007c6978a09" - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[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.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.18", -] - -[[package]] -name = "rustix" -version = "0.38.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" -dependencies = [ - "bitflags 2.4.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - -[[package]] -name = "rustls" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.4", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" -dependencies = [ - "base64 0.21.3", -] - -[[package]] -name = "rustls-webpki" -version = "0.100.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - -[[package]] -name = "ryu" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" - -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scale-info" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" -dependencies = [ - "cfg-if", - "derive_more", - "parity-scale-codec", - "scale-info-derive", -] - -[[package]] -name = "scale-info-derive" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "schannel" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scrypt" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" -dependencies = [ - "hmac 0.12.1", - "pbkdf2 0.11.0", - "salsa20", - "sha2 0.10.7", -] - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.7", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" -dependencies = [ - "secp256k1-sys 0.6.1", -] - -[[package]] -name = "secp256k1" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" -dependencies = [ - "secp256k1-sys 0.8.1", -] - -[[package]] -name = "secp256k1-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" -dependencies = [ - "cc", -] - -[[package]] -name = "secp256k1-sys" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[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.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "send_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - -[[package]] -name = "serde" -version = "1.0.188" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-hex" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca37e3e4d1b39afd7ff11ee4e947efae85adfddf4841787bfa47c470e96dc26d" -dependencies = [ - "array-init 0.0.4", - "serde", - "smallvec 0.6.14", -] - -[[package]] -name = "serde_derive" -version = "1.0.188" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "serde_json" -version = "1.0.105" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_spanned" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "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", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha3" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64dcef59ed4290b9fb562b53df07f564690d6539e8ecdd4728cf392477530bc" -dependencies = [ - "block-buffer 0.3.3", - "byte-tools", - "digest 0.7.6", - "keccak", -] - -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug", -] - -[[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 = "signature" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" -dependencies = [ - "digest 0.10.7", - "rand_core", -] - -[[package]] -name = "simple_asn1" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror", - "time", -] - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" -dependencies = [ - "maybe-uninit", -] - -[[package]] -name = "smallvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" - -[[package]] -name = "smol_str" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" -dependencies = [ - "serde", -] - -[[package]] -name = "snark-verifier" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/snark-verifier?tag=v2023_04_20#e5d5e4a6ccff2bba71baf77ab7a12b124d6364a1" -dependencies = [ - "bytes", - "ecc", - "halo2_proofs", - "halo2curves", - "hex", - "itertools", - "lazy_static", - "num-bigint", - "num-integer", - "num-traits", - "poseidon", - "primitive-types", - "rand", - "revm", - "rlp", - "sha3 0.10.8", -] - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "solang-parser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c792fe9fae2a2f716846f214ca10d5a1e21133e0bf36cef34bcc4a852467b21" -dependencies = [ - "itertools", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror", - "unicode-xid", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spki" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" -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 = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" - -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros 0.25.2", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", -] - -[[package]] -name = "strum_macros" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.31", -] - -[[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", - "rustc-hex", -] - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "svm-rs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597e3a746727984cb7ea2487b6a40726cad0dbe86628e7d429aa6b8c4c153db4" -dependencies = [ - "dirs", - "fs2", - "hex", - "once_cell", - "reqwest", - "semver 1.0.18", - "serde", - "serde_json", - "sha2 0.10.7", - "thiserror", - "url", - "zip", -] - -[[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.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" -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.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys", -] - -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "time" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" -dependencies = [ - "deranged", - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" -dependencies = [ - "time-core", -] - -[[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.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -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.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2 0.5.3", - "tokio-macros", - "windows-sys", -] - -[[package]] -name = "tokio-macros" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec509ac96e9a0c43427c74f003127d953a265737636129424288d27cb5c4b12c" -dependencies = [ - "futures-util", - "log", - "rustls", - "tokio", - "tokio-rustls", - "tungstenite 0.19.0", - "webpki-roots 0.23.1", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2dbec703c26b00d74844519606ef15d09a7d6857860f84ad223dec002ddea2" -dependencies = [ - "futures-util", - "log", - "rustls", - "tokio", - "tokio-rustls", - "tungstenite 0.20.0", - "webpki-roots 0.23.1", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0a3ab2091e52d7299a39d098e200114a972df0a7724add02a273aa9aada592" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.0.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "tracing-core" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "tungstenite" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15fba1a6d6bb030745759a9a2a588bfe8490fc8b4751a277db3a0be1c9ebbf67" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand", - "rustls", - "sha1", - "thiserror", - "url", - "utf-8", - "webpki", -] - -[[package]] -name = "tungstenite" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e862a1c4128df0112ab625f55cd5c934bcb4312ba80b39ae4b4835a3fd58e649" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand", - "rustls", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-trie" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" - -[[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 = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom", - "serde", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.31", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" - -[[package]] -name = "web-sys" -version = "0.3.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" -dependencies = [ - "rustls-webpki 0.100.2", -] - -[[package]] -name = "webpki-roots" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "winnow" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys", -] - -[[package]] -name = "ws_stream_wasm" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version 0.4.0", - "send_wrapper 0.6.0", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - -[[package]] -name = "zeroize" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "aes", - "byteorder", - "bzip2", - "constant_time_eq 0.1.5", - "crc32fast", - "crossbeam-utils", - "flate2", - "hmac 0.12.1", - "pbkdf2 0.11.0", - "sha1", - "time", - "zstd", -] - -[[package]] -name = "zkevm-circuits" -version = "0.1.0" -dependencies = [ - "array-init 2.1.0", - "bus-mapping", - "ecc", - "ecdsa 0.1.0", - "env_logger", - "eth-types", - "ethers-core 2.0.10", - "gadgets", - "halo2_proofs", - "integer", - "itertools", - "lazy_static", - "libsecp256k1", - "log", - "maingate", - "num", - "num-bigint", - "num_enum 0.5.11", - "rand", - "rand_chacha", - "rand_xorshift", - "serde", - "serde_json", - "sha3 0.10.8", - "snark-verifier", - "strum 0.24.1", - "strum_macros 0.24.3", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" -dependencies = [ - "cc", - "libc", - "pkg-config", -] diff --git a/light-client-poc/Cargo.toml b/light-client-poc/Cargo.toml deleted file mode 100644 index 8086e56640..0000000000 --- a/light-client-poc/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -[package] -name = "light-client-poc" -version = "0.1.0" -edition = "2021" - -[dependencies] -serde = { version = "1.0", features = ["derive"] } -serde_json = { version = "1.0", features = ["arbitrary_precision"] } -zkevm-circuits = { path = "../zkevm-circuits", features=["test-circuits"]} -halo2_proofs = { git = "https://github.com/privacy-scaling-explorations/halo2.git", tag = "v0.3.0" } -eyre = { version = "0.6.8" } -hex = "0.4.3" -num_enum = "0.6.1" -reqwest = "0.11.18" -tokio = { version= "1.28.2", features = ["macros", "rt-multi-thread"] } -mpt-witness-generator = { path = "../mpt-witness-generator/rustlib" } -ethers ={ version = "2.0.10", features = ["abigen", "rustls", "ws", "ethers-solc"] } -eth-types = { path = "../eth-types" } -gadgets = { path = "../gadgets" } -rand_chacha = "0.3.1" -rand = "0.8.5" -env_logger = "0.9" -ahash = "=0.8.6" - -[dev-dependencies] -ctor = "0.1.22" - -[features] -disable-keccak = [] diff --git a/light-client-poc/README.md b/light-client-poc/README.md deleted file mode 100644 index d89da127ec..0000000000 --- a/light-client-poc/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Light client PoC - -**NOTE** this is a draft implementation of a PoC server - -This light client PoC is an experiment to test how to send the incremental statedb changes -with its snark to help light clients to sync without sending MPT proofs. - -This crate contains: - -- The StateUpdateCircuit -- The witness generator for circuit -- A WIP server to generate and serve the proofs -- Test with a local geth node -- Test with mainnet blocks - -The circuit has the following public inputs: - - - previous state root (hi/lo) - - next state root (hi/lo) - - number of state db changes - - state db changes, a list of records of - - type of change ( balance change, codehash change, storage change, ...) - - address - - value changed (hi/lo) - - key changed, relevant only in storage changes (hi/lo) - diff --git a/light-client-poc/go-ethereum b/light-client-poc/go-ethereum deleted file mode 160000 index fd2d7cea37..0000000000 --- a/light-client-poc/go-ethereum +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fd2d7cea3747e1003a817cd18e200bf2b00be03c diff --git a/light-client-poc/go-ethereum-data/boot.key b/light-client-poc/go-ethereum-data/boot.key deleted file mode 100644 index c400ae80f2..0000000000 --- a/light-client-poc/go-ethereum-data/boot.key +++ /dev/null @@ -1 +0,0 @@ -d78e4d3e850d6199341be93ad038be4dc2b68e49fdf898a1368f9e41592041d4 \ No newline at end of file diff --git a/light-client-poc/go-ethereum-data/keystore/UTC--2023-08-08T14-43-37.660247000Z--5b72551fc886e8dc264b4382811e596291c0bfd4 b/light-client-poc/go-ethereum-data/keystore/UTC--2023-08-08T14-43-37.660247000Z--5b72551fc886e8dc264b4382811e596291c0bfd4 deleted file mode 100644 index 02fdb1c865..0000000000 --- a/light-client-poc/go-ethereum-data/keystore/UTC--2023-08-08T14-43-37.660247000Z--5b72551fc886e8dc264b4382811e596291c0bfd4 +++ /dev/null @@ -1 +0,0 @@ -{"address":"5b72551fc886e8dc264b4382811e596291c0bfd4","crypto":{"cipher":"aes-128-ctr","ciphertext":"25d07e3633e84b486236eb38c2352a0ed826841f63db7343f35c67c405a2c64b","cipherparams":{"iv":"1209b2c918f8192410261265bf2663f9"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"817a7152b6bc0da7c706710ae01ec95975f52dd079bceb850c35960a3a88d1ee"},"mac":"d659af0665d25ccbde8dda66b772f74d337b97d94d9e1d8679b3d5b56d27310f"},"id":"0eb3873d-0f07-4289-9e3b-e9c2b5e38c00","version":3} \ No newline at end of file diff --git a/light-client-poc/go-ethereum-data/zklight.json b/light-client-poc/go-ethereum-data/zklight.json deleted file mode 100644 index fa7e60a924..0000000000 --- a/light-client-poc/go-ethereum-data/zklight.json +++ /dev/null @@ -1,803 +0,0 @@ -{ - "config": { - "chainId": 93, - "homesteadBlock": 0, - "eip150Block": 0, - "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "shangaiBlock": 0, - "clique": { - "period": 2, - "epoch": 30000 - } - }, - "nonce": "0x0", - "timestamp": "0x64d25743", - "extraData": "0x00000000000000000000000000000000000000000000000000000000000000005b72551fc886e8dc264b4382811e596291c0bfd40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x47b760", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - }, - "5b72551fc886e8dc264b4382811e596291c0bfd4": { - "balance": "0x200000000000000000000000000000000000000000000000000000000000000" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "baseFeePerGas": null -} diff --git a/light-client-poc/src/circuit/mod.rs b/light-client-poc/src/circuit/mod.rs deleted file mode 100644 index cdd773caf1..0000000000 --- a/light-client-poc/src/circuit/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -mod equal_words; -mod prover; -mod state_update; -mod witness; - -pub use prover::StateUpdateCircuitKeys; - -pub use state_update::{ - StateUpdateCircuit, DEFAULT_CIRCUIT_DEGREE, DEFAULT_MAX_NODES, DEFAULT_MAX_PROOF_COUNT, -}; -pub use witness::{PublicInputs, StateUpdateWitness}; diff --git a/light-client-poc/src/circuit/prover.rs b/light-client-poc/src/circuit/prover.rs deleted file mode 100644 index 40a52a56ca..0000000000 --- a/light-client-poc/src/circuit/prover.rs +++ /dev/null @@ -1,162 +0,0 @@ -use eyre::Result; -use halo2_proofs::{dev::MockProver, halo2curves::bn256::Fr, plonk::Circuit, SerdeFormat}; -use rand::SeedableRng; -use rand_chacha::ChaCha20Rng; -use std::time::Instant; - -use super::witness::PublicInputs; -use halo2_proofs::{ - halo2curves::bn256::{Bn256, G1Affine}, - plonk::{create_proof, keygen_pk, keygen_vk, verify_proof, ProvingKey}, - poly::{ - commitment::ParamsProver, - kzg::{ - commitment::{KZGCommitmentScheme, ParamsKZG, ParamsVerifierKZG}, - multiopen::{ProverSHPLONK, VerifierSHPLONK}, - strategy::SingleStrategy, - }, - }, - transcript::{ - Blake2bRead, Blake2bWrite, Challenge255, TranscriptReadBuffer, TranscriptWriterBuffer, - }, -}; - -use super::state_update::StateUpdateCircuit; - -#[derive(Clone)] -pub struct StateUpdateCircuitKeys { - general_params: ParamsKZG, - verifier_params: ParamsVerifierKZG, - pk: ProvingKey, -} - -impl StateUpdateCircuitKeys { - pub fn new(circuit: &StateUpdateCircuit) -> StateUpdateCircuitKeys { - let mut rng = ChaCha20Rng::seed_from_u64(42); - - let start = Instant::now(); - - // let circuit = StateUpdateCircuit::default(); - - let general_params = ParamsKZG::::setup(circuit.degree as u32, &mut rng); - let verifier_params: ParamsVerifierKZG = general_params.verifier_params().clone(); - - // Initialize the proving key - let vk = keygen_vk(&general_params, circuit).expect("keygen_vk should not fail"); - let pk = keygen_pk(&general_params, vk, circuit).expect("keygen_pk should not fail"); - - println!("key generation time: {:?}", start.elapsed()); - - StateUpdateCircuitKeys { - general_params, - verifier_params, - pk, - } - } - - pub fn serialize(&self) -> Result> { - let mut buffer = Vec::new(); - self.general_params - .write_custom(&mut buffer, SerdeFormat::RawBytes)?; - self.verifier_params - .write_custom(&mut buffer, SerdeFormat::RawBytes)?; - self.pk.write(&mut buffer, SerdeFormat::RawBytes).unwrap(); - Ok(buffer) - } - - pub fn unserialize(mut bytes: &[u8]) -> Result { - let general_params = ParamsKZG::::read_custom(&mut bytes, SerdeFormat::RawBytes)?; - let verifier_params = - ParamsVerifierKZG::::read_custom(&mut bytes, SerdeFormat::RawBytes)?; - let circuit_params = StateUpdateCircuit::::default().params(); - let pk = ProvingKey::::read::<_, StateUpdateCircuit>( - &mut bytes, - SerdeFormat::RawBytes, - circuit_params, - )?; - Ok(Self { - general_params, - verifier_params, - pk, - }) - } -} - -impl StateUpdateCircuit { - pub fn assert_satisfied(&self) { - let num_rows: usize = self - .mpt_circuit - .nodes - .iter() - .map(|node| node.values.len()) - .sum(); - - let public_inputs: PublicInputs = (&self.lc_witness).into(); - - for (i, input) in public_inputs.iter().enumerate() { - println!("input[{i:}]: {input:?}"); - } - - let prover = - MockProver::::run(self.degree as u32, self, vec![public_inputs.0]).unwrap(); - prover.assert_satisfied_at_rows(0..num_rows, 0..num_rows); - } - - pub fn prove(self, keys: &StateUpdateCircuitKeys) -> Result> { - let rng = ChaCha20Rng::seed_from_u64(42); - - // Create a proof - let mut transcript = Blake2bWrite::<_, G1Affine, Challenge255<_>>::init(vec![]); - - let public_inputs: PublicInputs = (&self.lc_witness).into(); - - // Bench proof generation time - let start = Instant::now(); - create_proof::< - KZGCommitmentScheme, - ProverSHPLONK<'_, Bn256>, - Challenge255, - ChaCha20Rng, - Blake2bWrite, G1Affine, Challenge255>, - StateUpdateCircuit, - >( - &keys.general_params, - &keys.pk, - &[self], - &[&[&public_inputs]], - rng, - &mut transcript, - )?; - - let proof = transcript.finalize(); - - println!("proof generation time: {:?}", start.elapsed()); - - Ok(proof) - } - - pub fn verify(proof: &[u8], public_inputs: &[Fr], keys: &StateUpdateCircuitKeys) -> Result<()> { - // Bench verification time - let start = Instant::now(); - let mut verifier_transcript = Blake2bRead::<_, G1Affine, Challenge255<_>>::init(proof); - let strategy = SingleStrategy::new(&keys.general_params); - - verify_proof::< - KZGCommitmentScheme, - VerifierSHPLONK<'_, Bn256>, - Challenge255, - Blake2bRead<&[u8], G1Affine, Challenge255>, - SingleStrategy<'_, Bn256>, - >( - &keys.verifier_params, - keys.pk.get_vk(), - strategy, - &[&[public_inputs]], - &mut verifier_transcript, - )?; - - println!("verification time: {:?}", start.elapsed()); - - Ok(()) - } -} diff --git a/light-client-poc/src/main.rs b/light-client-poc/src/main.rs deleted file mode 100644 index 86eec519ef..0000000000 --- a/light-client-poc/src/main.rs +++ /dev/null @@ -1,11 +0,0 @@ -use eyre::Result; - -pub mod circuit; -pub mod server; -pub mod tests; -pub mod utils; - -#[tokio::main] -async fn main() -> Result<()> { - server::serve().await -} diff --git a/light-client-poc/src/server.rs b/light-client-poc/src/server.rs deleted file mode 100644 index c9b68c616b..0000000000 --- a/light-client-poc/src/server.rs +++ /dev/null @@ -1,85 +0,0 @@ -use eth_types::{Address, U64}; -use ethers::{ - providers::Middleware, - types::{transaction::eip2718::TypedTransaction, TransactionRequest}, -}; -use eyre::Result; -use halo2_proofs::halo2curves::bn256::Fr; -use std::{collections::HashMap, str::FromStr, time::SystemTime}; - -use crate::circuit::{ - PublicInputs, StateUpdateCircuit, StateUpdateCircuitKeys, StateUpdateWitness, - DEFAULT_CIRCUIT_DEGREE, DEFAULT_MAX_NODES, DEFAULT_MAX_PROOF_COUNT, -}; - -pub async fn serve() -> Result<()> { - const PROVIDER_URL: &str = "http://localhost:8545"; - const PVK: &str = "7ccb34dc5fd31fd0aa7860de89a4adc37ccb34dc5fd31fd0aa7860de89a4adc3"; - - let client = crate::utils::new_eth_signer_client(PROVIDER_URL, PVK).await?; - - let mut keys = None; - - let mut storage = HashMap::new(); - let mut last_processed_block = U64::from(1); - - loop { - let current_block = client.get_block_number().await.unwrap(); - if current_block <= last_processed_block { - std::thread::sleep(std::time::Duration::from_secs(1)); - let to = format!( - "0x{:040x}", - SystemTime::now() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_millis() - ); - let tx = TransactionRequest::new() - .to(Address::from_str(&to).unwrap()) - .value(1); - - client - .send_transaction(TypedTransaction::Legacy(tx), None) - .await? - .await?; - continue; - } - - println!("Processing block {}", last_processed_block); - - last_processed_block = last_processed_block + 1; - - let witness = StateUpdateWitness::::build( - client.clone(), - PROVIDER_URL, - last_processed_block, - None, - ) - .await?; - - let Some(witness) = witness else { - continue; - }; - - let public_inputs: PublicInputs = (&witness.lc_witness).into(); - let circuit = StateUpdateCircuit::new( - witness, - DEFAULT_CIRCUIT_DEGREE, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - )?; - - println!("trns: {:#?}", circuit.transforms); - - circuit.assert_satisfied(); - - if keys.is_none() { - keys = Some(StateUpdateCircuitKeys::new(&circuit)); - } - - let proof = circuit.prove(keys.as_ref().unwrap())?; - StateUpdateCircuit::verify(&proof, &public_inputs, keys.as_ref().unwrap())?; - - storage.insert(last_processed_block, proof); - } -} diff --git a/light-client-poc/src/tests/contract.rs b/light-client-poc/src/tests/contract.rs deleted file mode 100644 index a48df356e9..0000000000 --- a/light-client-poc/src/tests/contract.rs +++ /dev/null @@ -1,115 +0,0 @@ -#![allow(dead_code)] -#![allow(unused_imports)] - -use crate::utils::MM; -use ethers::{ - core::types::transaction::eip2930::AccessList, - middleware::SignerMiddleware, - prelude::{ - k256::{ecdsa::SigningKey, schnorr::signature::Verifier, Secp256k1}, - *, - }, - providers::{Http, Middleware, Provider}, - signers::{LocalWallet, Signer}, - solc, - types::{transaction::eip2930::AccessListItem, TransactionRequest}, - utils::format_units, -}; -use eyre::Result; -use num_enum::IntoPrimitive; -use std::{ - collections::{HashMap, HashSet}, - convert::TryFrom, - str::FromStr, - sync::Arc, - time::Duration, -}; - -const SIMPLE_STORAGE_SOL: &str = r#" -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.0; - -contract SimpleStorage { - constructor() payable { - set(0xcafe, 0xbabe); - } - function get(uint k) view public returns (uint) { - uint v; - assembly { - v := sload(k) - } - return v; - } - function set(uint k, uint v) payable public { - assembly { - sstore(k,v) - } - } -} -"#; - -abigen!( - SimpleStorage, - r"[ - function get(uint k) view returns (uint) - function set(uint k, uint v) public -]" -); - -pub(crate) struct Contract { - pub contract: SimpleStorage, - pub receipt: TransactionReceipt, -} - -impl Contract { - pub async fn deploy(client: Arc) -> Result { - let contract = "SimpleStorage"; - - let mut path = std::env::temp_dir(); - path.push("SimpleStorage.sol"); - - std::fs::write(&path, SIMPLE_STORAGE_SOL)?; - - // compile it - - let compiler_input = CompilerInput::new(path)? - .remove(0) - .evm_version(EvmVersion::Paris); - let compiled = Solc::default().compile_exact(&compiler_input)?; - - let (abi, bytecode, _runtime_bytecode) = compiled - .find(contract) - .expect("could not find contract") - .into_parts_or_default(); - - println!("deploying contract"); - - let factory = ContractFactory::new(abi.clone(), bytecode.clone(), client.clone()); - let deployer = factory.deploy(())?.legacy(); - - let (contract, receipt) = deployer.send_with_receipt().await?; - - let address = contract.address(); - - let contract = SimpleStorage::new(address, client.clone()); - - Ok(Self { contract, receipt }) - } - - pub async fn get(&self, key: U256) -> Result { - let value = self.contract.get(key).call().await?; - Ok(value) - } - - pub async fn set(&self, key: U256, value: U256) -> Result { - let tx: TransactionReceipt = self - .contract - .set(key, value) - .legacy() - .send() - .await? - .await? - .unwrap(); - Ok(tx) - } -} diff --git a/light-client-poc/src/tests/local.rs b/light-client-poc/src/tests/local.rs deleted file mode 100644 index ac1f9ef5ef..0000000000 --- a/light-client-poc/src/tests/local.rs +++ /dev/null @@ -1,65 +0,0 @@ -#[cfg(test)] -mod tests { - use ethers::prelude::*; - use eyre::Result; - use halo2_proofs::halo2curves::bn256::Fr; - use std::sync::Arc; - - use crate::{ - circuit::StateUpdateWitness, - utils::{new_eth_signer_client, verify_mpt_witness, MM}, - }; - - const PVK: &str = "7ccb34dc5fd31fd0aa7860de89a4adc37ccb34dc5fd31fd0aa7860de89a4adc3"; - const PROVIDER_URL: &str = "http://localhost:8545"; - - async fn local_test_proof( - test: &str, - client: &Arc, - provider_url: &str, - recipt: &TransactionReceipt, - ) -> Result<()> { - println!("Running test {}", test); - - let witness = StateUpdateWitness::::build( - client.clone(), - provider_url, - recipt.block_number.unwrap(), - None, - ) - .await? - .unwrap(); - println!("trns: {:#?}", witness.transforms); - verify_mpt_witness(witness.mpt_witness) - } - - async fn run_localnode_test() -> Result<()> { - let client = new_eth_signer_client(PROVIDER_URL, PVK).await?; - - // test contract creation - let contract = crate::tests::contract::Contract::deploy(client.clone()).await?; - local_test_proof( - "contract creation", - &client, - PROVIDER_URL, - &contract.receipt, - ) - .await?; - - // test set value - let receipt = contract.set(0xad41a.into(), 0xcafe.into()).await?; - local_test_proof("test set slot", &client, PROVIDER_URL, &receipt).await?; - - // test unset value - let receipt = contract.set(0xad41a.into(), 0.into()).await?; - local_test_proof("test remove slot", &client, PROVIDER_URL, &receipt).await?; - - Ok(()) - } - - #[ignore] - #[tokio::test] - async fn test_local() { - run_localnode_test().await.unwrap(); - } -} diff --git a/light-client-poc/src/tests/mainnet.rs b/light-client-poc/src/tests/mainnet.rs deleted file mode 100644 index 6910b7e480..0000000000 --- a/light-client-poc/src/tests/mainnet.rs +++ /dev/null @@ -1,282 +0,0 @@ -#[cfg(test)] -mod test { - use ethers::{ - prelude::*, - types::transaction::eip2930::{AccessList, AccessListItem}, - }; - use eyre::Result; - use halo2_proofs::halo2curves::bn256::Fr; - use std::{collections::HashMap, str::FromStr}; - - use crate::circuit::{ - PublicInputs, StateUpdateCircuit, StateUpdateCircuitKeys, StateUpdateWitness, - DEFAULT_CIRCUIT_DEGREE, DEFAULT_MAX_NODES, DEFAULT_MAX_PROOF_COUNT, - }; - - #[ctor::ctor] - fn init_env_logger() { - // Enable RUST_LOG during tests - env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("error")).init(); - } - - async fn mock_prove( - block_no: u64, - access_list: &[(&str, Vec<&str>)], - degree: usize, - max_nodes: usize, - max_proof_count: usize, - ) -> Result> { - const PVK: &str = "7ccb34dc5fd31fd0aa7860de89a4adc37ccb34dc5fd31fd0aa7860de89a4adc3"; - let provider_url: String = std::env::var("PROVIDER_URL").expect( - "PROVIDER_URL environment var should be set with a valid mainnet RPC-JSON provider", - ); - let client = crate::utils::new_eth_signer_client(&provider_url, PVK).await?; - - let access_list = AccessList( - access_list - .iter() - .map(|(addr, storage_keys)| AccessListItem { - address: Address::from_str(addr).unwrap(), - storage_keys: storage_keys - .iter() - .map(|k| H256::from_str(k).unwrap()) - .collect(), - }) - .collect(), - ); - let witness = StateUpdateWitness::::build( - client.clone(), - &provider_url, - U64::from(block_no), - Some(access_list), - ) - .await? - .unwrap(); - - println!("trns: {:#?}", witness.transforms); - - let circuit = StateUpdateCircuit::new(witness, degree, max_nodes, max_proof_count)?; - - circuit.assert_satisfied(); - - Ok(circuit) - } - - #[allow(clippy::complexity)] - pub fn blocks() -> HashMap)>> { - [ - // 0 txs - ( - 107, - vec![("0xd7E30ae310C1D1800F5B641Baa7af95b2e1FD98C", vec![])], - ), - // 4 transfer txs - ( - 436875, - vec![ - ("0x580992B51e3925e23280EfB93d3047C82f17E038", vec![]), - ("0x52bc44d5378309EE2abF1539BF71dE1b7d7bE3b5", vec![]), - ("0x15ac3b6F90549FFBE4091177B1795B3d4C11A59e", vec![]), - ("0x72382223a91051A54c69759BE3c93048235EfC43", vec![]), - ], - ), - // TheDAO, 4 storage changes - ( - 2000007, - vec![ - ("0x61C808D82A3Ac53231750daDc13c777b59310bD9", vec![]), // coinbase - ("0xDf21fA922215B1a56f5a6D6294E6E36c85A0Acfb", vec![]), // tx1 from - ( - "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413", - vec![ - "0x0db619cb4b09b98626d1a90813a5566d6ae59d0a68df3e729f07a4cf6a7169fe", - "0x28f0a29873c622b02659ae6083b0cf3fb2c44358fa1b0c0efb89893011b2cf8b", - "0xf610712b7b4266f7fbc44538628f0ffdcb93c6d56f73a4dfeb041befdf2c9058", - "0xf903a85392f66de7c382c130eb51940c4bfed2038df5c108d8c0115c24efcc94", - ], - ), // tx1 to - ], - ), - // TheDAO. Storage does not exist - ( - 2000070, - vec![ - ("0x1a060B0604883A99809eB3F798DF71BEf6c358f1", vec![]), // coinbase - ("0xEd8387812f6477a421f2a16975a6121FC91933e6", vec![]), // tx1 from - ( - "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413", - vec![ - "0x4312ad16021fb135960665020d410e3ca0e42488b684d61315e73d368c7182ad", - "0x83390858478ca0e9bd8e0b6f9c61cb360f78d42e5c5c2908d9a885b766925386", - ], - ), // tx1 to - ], - ), - // A complex block - ( - 2000004, - vec![ - ("0x4Bb96091Ee9D802ED039C4D1a5f6216F90f81B01", vec![]), // coinbase - ("0x8975dBC1b8F25EC994815626D070899ddA896511", vec![]), // tx 0 - ("0xb2e3732C0B0eC387962f76fA4F1BB9325089C5E0", vec![]), - ("0xeD059bc543141c8C93031d545079b3Da0233B27f", vec![]), // tx 1 - ("0xEc9F6c9634165f91e22E58B90e3EdE393d959E47", vec![]), - ( - "0xcaac46d9bd68bffb533320545a90cd92c6e98e58", - vec![ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - ], - ), - ( - "0xec9f6c9634165f91e22e58b90e3ede393d959e47", - vec![ - "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x19da5b482fc1817af240c411d7423a456cdcf4a213e9f192aca5c80a39a4a733", - ], - ), - ("0xF05C1b271D12b7ECB3b37122730C085ec2C0B552", vec![]), // tx 2 - ("0x4FDf5371f7fFA04866f696882Db659fE38f52559", vec![]), - ("0xBef52Af092Fa2349279f7A2B10779FE810785688", vec![]), // tx 3 - ("0x24F21c22F0e641e2371F04a7bB8d713f89f53550", vec![]), - ], - ), - ] - .into_iter() - .collect() - } - - #[ignore] - #[tokio::test] - async fn test_block_436875() -> Result<()> { - let block_no = 436875; - let access_list = blocks().get(&block_no).unwrap().clone(); - let _ = mock_prove( - block_no, - &access_list, - 16, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - ) - .await?; - Ok(()) - } - - #[ignore] - #[tokio::test] - async fn test_block_107() -> Result<()> { - let block_no = 107; - let access_list = blocks().get(&block_no).unwrap().clone(); - let _ = mock_prove( - block_no, - &access_list, - 15, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - ) - .await?; - Ok(()) - } - - #[ignore] - #[tokio::test] - async fn test_reuse_proving_keys() -> Result<()> { - let block_no = 107; - let access_list = blocks().get(&block_no).unwrap().clone(); - - let circuit = mock_prove( - block_no, - &access_list, - 15, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - ) - .await?; - let public_inputs: PublicInputs = (&circuit.lc_witness).into(); - - let keys = StateUpdateCircuitKeys::new(&circuit); - let proof = circuit.prove(&keys)?; - - let keys = StateUpdateCircuitKeys::unserialize(&keys.serialize()?)?; - - StateUpdateCircuit::verify(&proof, &public_inputs, &keys)?; - - let block_no = 436875; - let access_list = blocks().get(&block_no).unwrap().clone(); - - let circuit = mock_prove( - block_no, - &access_list, - DEFAULT_CIRCUIT_DEGREE, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - ) - .await?; - let mut public_inputs: PublicInputs = (&circuit.lc_witness).into(); - - let proof = circuit.prove(&keys)?; - - StateUpdateCircuit::verify(&proof, &public_inputs, &keys)?; - - // ok, check also modifying public inputs to check if fails - - for i in 0..public_inputs.len() { - public_inputs.0[i] += Fr::one(); - let _ = StateUpdateCircuit::verify(&proof, &public_inputs, &keys) - .err() - .unwrap(); - println!("public input: {}", i); - public_inputs.0[i] -= Fr::one(); - } - - Ok(()) - } - - #[ignore] - #[tokio::test] - async fn test_block_2000007() -> Result<()> { - let block_no = 2000007; - let access_list = blocks().get(&block_no).unwrap().clone(); - let _ = mock_prove( - block_no, - &access_list, - 18, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - ) - .await?; - Ok(()) - } - - #[ignore] - #[tokio::test] - async fn test_block_2000004() -> Result<()> { - let block_no = 2000004; - let access_list = blocks().get(&block_no).unwrap().clone(); - let _ = mock_prove( - block_no, - &access_list, - 18, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - ) - .await?; - Ok(()) - } - - #[ignore] - #[tokio::test] - async fn test_block_2000070() -> Result<()> { - let block_no = 2000070; - let access_list = blocks().get(&block_no).unwrap().clone(); - let _ = mock_prove( - block_no, - &access_list, - 18, - DEFAULT_MAX_NODES, - DEFAULT_MAX_PROOF_COUNT, - ) - .await?; - Ok(()) - } -} diff --git a/light-client-poc/src/tests/mod.rs b/light-client-poc/src/tests/mod.rs deleted file mode 100644 index 73f179ccfe..0000000000 --- a/light-client-poc/src/tests/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod contract; -pub mod local; -pub mod mainnet; diff --git a/light-client-poc/src/utils.rs b/light-client-poc/src/utils.rs deleted file mode 100644 index 384e9dd221..0000000000 --- a/light-client-poc/src/utils.rs +++ /dev/null @@ -1,188 +0,0 @@ -use ethers::{ - middleware::SignerMiddleware, - prelude::{k256::ecdsa::SigningKey, *}, - providers::{Http, Middleware, Provider}, - signers::{LocalWallet, Signer}, - utils::format_units, -}; -use eyre::Result; -use halo2_proofs::{dev::MockProver, halo2curves::bn256::Fr}; - -use std::{convert::TryFrom, sync::Arc, time::Duration}; -use zkevm_circuits::mpt_circuit::witness_row::*; - -pub fn print_nodes(node: &[Node]) { - for n in node { - println!("node:"); - if let Some(start) = &n.start { - println!(" start:"); - println!(" proof_type: {:?}", start.proof_type); - println!( - " disable_preimage_check: {:?}", - start.disable_preimage_check - ); - } - if let Some(extension_branch) = &n.extension_branch { - println!(" extension_branch:"); - println!(" is_extension: {:?}", extension_branch.is_extension); - println!( - " is_placeholder: {:?}", - extension_branch.is_placeholder - ); - println!(" extension:"); - println!( - " list_rlp_bytes: {}", - hex::encode(&extension_branch.extension.list_rlp_bytes.to_vec()) - ); - println!(" branch:"); - println!( - " modified_index: {}", - extension_branch.branch.modified_index - ); - println!( - " drifted_index: {}", - extension_branch.branch.drifted_index - ); - println!( - " list_rlp_bytes[0]: {}", - hex::encode(&extension_branch.branch.list_rlp_bytes[0].to_vec()) - ); - println!( - " list_rlp_bytes[1]: {}", - hex::encode(&extension_branch.branch.list_rlp_bytes[1].to_vec()) - ); - } - if let Some(account) = &n.account { - println!(" account:"); - println!(" address: {}", hex::encode(&*account.address)); - println!(" key: {}", hex::encode(&account.key.to_vec())); - println!( - " list_rlp_bytes[0]: {}", - hex::encode(&account.list_rlp_bytes[0].to_vec()) - ); - println!( - " list_rlp_bytes[1]: {}", - hex::encode(&account.list_rlp_bytes[1].to_vec()) - ); - println!( - " value_rlp_bytes[0]: {}", - hex::encode(&account.value_rlp_bytes[0].to_vec()) - ); - println!( - " value_rlp_bytes[1]: {}", - hex::encode(&account.value_rlp_bytes[1].to_vec()) - ); - println!( - " value_list_rlp_bytes[0]: {}", - hex::encode(&account.value_list_rlp_bytes[0].to_vec()) - ); - println!( - " value_list_rlp_bytes[1]: {}", - hex::encode(&account.value_list_rlp_bytes[1].to_vec()) - ); - println!( - " drifted_rlp_bytes: {}", - hex::encode(&account.drifted_rlp_bytes.to_vec()) - ); - println!( - " wrong_rlp_bytes: {}", - hex::encode(&account.wrong_rlp_bytes.to_vec()) - ); - } - - if let Some(storage) = &n.storage { - println!(" storage:"); - println!(" address: {}", hex::encode(&*storage.address)); - println!(" key: {}", hex::encode(&storage.key.to_vec())); - println!( - " list_rlp_bytes[0]: {}", - hex::encode(&storage.list_rlp_bytes[0].to_vec()) - ); - println!( - " list_rlp_bytes[1]: {}", - hex::encode(&storage.list_rlp_bytes[1].to_vec()) - ); - println!( - " value_rlp_bytes[0]: {}", - hex::encode(&storage.value_rlp_bytes[0].to_vec()) - ); - println!( - " value_rlp_bytes[1]: {}", - hex::encode(&storage.value_rlp_bytes[1].to_vec()) - ); - println!( - " drifted_rlp_bytes: {}", - hex::encode(&storage.drifted_rlp_bytes.to_vec()) - ); - println!( - " wrong_rlp_bytes: {}", - hex::encode(&storage.wrong_rlp_bytes.to_vec()) - ); - } - println!(" values:"); - for (idx, value) in n.values.iter().enumerate() { - println!(" [{}]: {}", idx, hex::encode(value.to_vec())); - } - - println!(" keccak_data:"); - for (idx, value) in n.keccak_data.iter().enumerate() { - println!(" [{}]: {}", idx, hex::encode(value.to_vec())); - } - } -} - -pub fn verify_mpt_witness(nodes: Vec) -> Result<()> { - // get the number of rows in the witness - let num_rows: usize = nodes.iter().map(|node| node.values.len()).sum(); - - // populate the keccak data - let mut keccak_data = vec![]; - for node in nodes.iter() { - for k in node.keccak_data.iter() { - keccak_data.push(k.to_vec()); - } - } - - // verify the circuit - let disable_preimage_check = nodes[0].start.clone().unwrap().disable_preimage_check; - let degree = 15; - let max_nodes = 520; - let circuit = zkevm_circuits::mpt_circuit::MPTCircuit:: { - nodes, - keccak_data, - degree, - max_nodes, - disable_preimage_check, - _marker: std::marker::PhantomData, - }; - - let prover = MockProver::::run(degree as u32, &circuit, vec![]).unwrap(); - assert_eq!(prover.verify_at_rows(0..num_rows, 0..num_rows,), Ok(())); - - println!("success!"); - - Ok(()) -} - -pub type MM = SignerMiddleware, Wallet>; - -pub async fn new_eth_signer_client(provider_url: &str, pvk: &str) -> Result> { - let provider: Provider = - Provider::::try_from(provider_url)?.interval(Duration::from_millis(10u64)); - let chain_id = provider.get_chainid().await?.as_u64(); - - let wallet = pvk.parse::()?; - let client = Arc::new(SignerMiddleware::new( - provider, - wallet.with_chain_id(chain_id), - )); - let balance = client.get_balance(client.address(), None).await?; - - println!( - "address {:?} , balance {}ETH", - client.address(), - format_units(balance, "ether")? - ); - - Ok(client) -} diff --git a/light-client-poc/start-go-ethereum.sh b/light-client-poc/start-go-ethereum.sh deleted file mode 100755 index ca135f853a..0000000000 --- a/light-client-poc/start-go-ethereum.sh +++ /dev/null @@ -1,17 +0,0 @@ -GETH=go-ethereum -DATA=./go-ethereum-data - -# clean up -rm access-list-* -rm -rf $DATA/geth - -# build geth -(cd $GETH && make) -$GETH/build/bin/geth --datadir $DATA init $DATA/zklight.json - -# set password for keystore -echo zklight > /tmp/passwd -echo >> /tmp/passwd - -# run node -$GETH/build/bin/geth --rpc.enabledeprecatedpersonal --datadir $DATA --bootnodes=enode://9bbc27c01a26835e18bfeb08a2c304fff29e406e94210a16d7d3ed09291b8a9c86193de027449eec8e0fbb4ee1b81f77686acbdffc8fd3522681739edfde5abb@127.0.0.1:0?discport=30301 --mine --miner.etherbase=0x5b72551fc886e8dc264b4382811e596291c0bfd4 --unlock=0x5b72551fc886e8dc264b4382811e596291c0bfd4 --http --http.port 8545 --http.api "eth,net,web3,txpool" --http.corsdomain '*' --http.vhosts '*' --allow-insecure-unlock $* < /tmp/passwd diff --git a/light-client-poc/test.sh b/light-client-poc/test.sh deleted file mode 100755 index b789008a97..0000000000 --- a/light-client-poc/test.sh +++ /dev/null @@ -1 +0,0 @@ -cargo test --release -- --test-threads=1 diff --git a/mpt-witness-generator/.github/workflows/go.yml b/mpt-witness-generator/.github/workflows/go.yml deleted file mode 100644 index 35860814a3..0000000000 --- a/mpt-witness-generator/.github/workflows/go.yml +++ /dev/null @@ -1,33 +0,0 @@ -# This workflow will build a golang project -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go - -name: Go - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -jobs: - - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: '1.20' - - - name: Format - run: go fmt ./... - - - name: Build - run: go build -v ./... - - - name: Test - env: - NO_GETH: true - run: go test -v ./... diff --git a/mpt-witness-generator/.gitignore b/mpt-witness-generator/.gitignore deleted file mode 100644 index 2fc01ebc1c..0000000000 --- a/mpt-witness-generator/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -rust_call/target -.DS_Store -.vscode -mpt-witness-generator -mpt -generated_witnesses -rust_call/proof.json diff --git a/mpt-witness-generator/README.md b/mpt-witness-generator/README.md deleted file mode 100644 index 040966a9a9..0000000000 --- a/mpt-witness-generator/README.md +++ /dev/null @@ -1,124 +0,0 @@ -# Merkle Patricia Trie witness generator - -This project aims to prepare witness generator for Merkle Patricia Trie circuit which is part of -[zkevm-circuits](https://github.com/appliedzkp/zkevm-circuits). - -It is based on [geth](https://github.com/ethereum/go-ethereum). -It takes `eth_getProof` output and it transforms it into the MPT circuit witness. - -MPT circuit checks that the modification of the trie state happened correctly. - -Let us assume there are two proofs (as returned by `eth getProof`): - -- A proof that there exists value `val1` at key `key1` for address `addr` in the state trie with root `root1`. -- A proof that there exists value `val2` at key `key1` for address `addr` in the state trie with root `root2`. - -The circuit checks the transition from `val1` to `val2` at `key1` that led to the change -of trie root from `root1` to `root2`. - -For this reason, there are two parallel proofs for each trie modification. -There is `S` (as `State`) proof which presents the state of the trie -before the modification. And there is `C` (as `Change`) proof which presents the state -of the trie after modification. - -An example of `eth_getProof` output is given below: - -``` -[248 81 128 128 128 160 32 34 39 131 73 65 47 37 211 142 206 231 172 16 11 203 33 107 30 7 213 226 2 174 55 216 4 117 220 10 186 68 128 128 128 128 128 128 128 160 55 235 85 86 230 197 53 159 28 141 120 87 82 57 4 132 185 12 24 158 142 210 106 188 12 87 179 231 52 16 126 229 128 128 128 128 128] -[226 160 59 138 106 70 105 186 37 13 38 205 122 69 158 202 157 33 95 131 7 227 58 235 229 3 121 188 90 54 23 236 52 68 1] -``` - -The first element of the proof is a branch containing two children. The second element of the proof is -a storage leaf contained in the branch (from the first proof element). - -To simplify the MPT circuit, the `eth_getProof` elements are not directly used as rows. -Instead, the rows are prepared as: - -``` -[1 0 1 0 248 81 0 248 81 0 11 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 160 32 34 39 131 73 65 47 37 211 142 206 231 172 16 11 203 33 107 30 7 213 226 2 174 55 216 4 117 220 10 186 68 0 160 32 34 39 131 73 65 47 37 211 142 206 231 172 16 11 203 33 107 30 7 213 226 2 174 55 216 4 117 220 10 186 68 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 160 55 235 85 86 230 197 53 159 28 141 120 87 82 57 4 132 185 12 24 158 142 210 106 188 12 87 179 231 52 16 126 229 0 160 88 197 127 237 244 146 28 57 104 36 96 69 159 84 254 170 28 196 41 183 253 107 213 32 170 141 111 191 30 100 117 55 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] -[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16] -[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17] -[226 160 59 138 106 70 105 186 37 13 38 205 122 69 158 202 157 33 95 131 7 227 58 235 229 3 121 188 90 54 23 236 52 68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2] -[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13] -[226 160 59 138 106 70 105 186 37 13 38 205 122 69 158 202 157 33 95 131 7 227 58 235 229 3 121 188 90 54 23 236 52 68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3] -[17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14] -[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15] -[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19] -``` - -... - - - -## Generate witnesses - -To generate witnesses for MPT circuit, execute - -``` -go test -v ./... -``` - -To generate the tests that use a local blockchain you need a local `geth`. You would -need to run something like: -``` -geth --dev --http --ipcpath ~/Library/Ethereum/geth.ipc - -``` -The local `geth` is used to generate some tests that have a small number of accounts so that -these accounts appear in the first or second level of the trie. You might need to remove the -database if you already have some accounts: - -``` -geth removedb -``` - -The witness files will appear in generated_witnesses folder. - -## Format the code - -To format the code use: - -``` -gofmt -w ./* -``` - -## Calling from Rust - -Build: - -``` -go build -buildmode=c-archive -o libmpt.a witness_gen_wrapper.go -``` - -Copy libmpt.a and libmpt.h to rust_call/build: - -``` -mv libmpt.* rust_call/build -``` - -Note: to avoid the problem described [](https://github.com/golang/go/issues/42459), -the following has been set in rust_call/.cargo/config: - -``` -[build] -rustflags = ["-C", "link-args=-framework CoreFoundation -framework Security"] -``` diff --git a/mpt-witness-generator/go.mod b/mpt-witness-generator/go.mod deleted file mode 100644 index ce4ba3832e..0000000000 --- a/mpt-witness-generator/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/privacy-scaling-explorations/mpt-witness-generator - -go 1.16 - -require ( - github.com/ethereum/go-ethereum v1.10.8 - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 -) diff --git a/mpt-witness-generator/go.sum b/mpt-witness-generator/go.sum deleted file mode 100644 index 950942ce26..0000000000 --- a/mpt-witness-generator/go.sum +++ /dev/null @@ -1,587 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.8 h1:0UP5WUR8hh46ffbjJV7PK499+uGEyasRIfffS0vy06o= -github.com/ethereum/go-ethereum v1.10.8/go.mod h1:pJNuIUYfX5+JKzSD/BTdNsvJSZ1TJqmz0dVyXMAbf6M= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 h1:xQdMZ1WLrgkkvOZ/LDQxjVxMLdby7osSh4ZEVa5sIjs= -github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 h1:uCLL3g5wH2xjxVREVuAbP9JM5PPKjRbXKRa6IBjkzmU= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/mpt-witness-generator/rustlib/Cargo.lock b/mpt-witness-generator/rustlib/Cargo.lock deleted file mode 100644 index 4d73989235..0000000000 --- a/mpt-witness-generator/rustlib/Cargo.lock +++ /dev/null @@ -1,165 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" -dependencies = [ - "memchr", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "gobuild" -version = "0.1.0-alpha.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e156a4ddbf3deb5e8116946c111413bd9a5679bdc1536c78a60618a7a9ac9e" -dependencies = [ - "cc", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "libc" -version = "0.2.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "memchr" -version = "2.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" - -[[package]] -name = "regex" -version = "1.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - -[[package]] -name = "rustlib" -version = "0.1.0" -dependencies = [ - "env_logger", - "gobuild", - "log", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/mpt-witness-generator/rustlib/Cargo.toml b/mpt-witness-generator/rustlib/Cargo.toml deleted file mode 100644 index c97215f1fb..0000000000 --- a/mpt-witness-generator/rustlib/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "mpt-witness-generator" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -[build-dependencies] -gobuild = "0.1.0-alpha.1" -log = "0.4.14" -env_logger = "0.9" -glob = "0.3.1" - -[dependencies] -ethers = "2.0" -num_enum = "0.7.0" -serde = "1.0.188" -serde_json = "1.0.105" -zkevm-circuits = { path = "../../zkevm-circuits", features=["test-circuits"]} diff --git a/mpt-witness-generator/rustlib/build.rs b/mpt-witness-generator/rustlib/build.rs deleted file mode 100644 index 73d6f57feb..0000000000 --- a/mpt-witness-generator/rustlib/build.rs +++ /dev/null @@ -1,47 +0,0 @@ -use std::{ - env, - io::{self, Write}, -}; - -fn main() { - let lib_name = "mpt-witness-generator"; - let out_dir = env::var("OUT_DIR").unwrap(); - - // Build - if let Err(e) = gobuild::Build::new() - .file("../witness_gen_wrapper.go") - .try_compile(lib_name) - { - // The error type is private so have to check the error string - if format!("{}", e).starts_with("Failed to find tool.") { - fail( - " Failed to find Go. Please install Go 1.16 or later \ - following the instructions at https://golang.org/doc/install. - On linux it is also likely available as a package." - .to_string(), - ); - } else { - fail(format!("{}", e)); - } - } - - // Files the lib depends on that should recompile the lib - let dep_files = glob::glob("../**/*.go").unwrap().filter_map(|v| v.ok()); - - for file in dep_files { - println!("cargo:rerun-if-changed={}", file.to_str().unwrap()); - } - - // Link - println!("cargo:rustc-link-search=native={}", out_dir); - println!("cargo:rustc-link-lib=static={}", lib_name); -} - -fn fail(message: String) { - let _ = writeln!( - io::stderr(), - "\n\nError while building geth-utils: {}\n\n", - message - ); - std::process::exit(1); -} diff --git a/mpt-witness-generator/witness_gen_wrapper.go b/mpt-witness-generator/witness_gen_wrapper.go deleted file mode 100644 index 7bae964e70..0000000000 --- a/mpt-witness-generator/witness_gen_wrapper.go +++ /dev/null @@ -1,51 +0,0 @@ -package main - -// #include -import "C" -import ( - "encoding/json" - "fmt" - "unsafe" - - "github.com/privacy-scaling-explorations/mpt-witness-generator/witness" -) - -type Config struct { - NodeUrl string `json:"NodeUrl"` - BlockNum int `json:"BlockNum"` - Addr string `json:"Addr"` - Keys []string `json:"Keys"` - Values []string `json:"Values"` -} - -type GetWitnessRequest struct { - BlockNum int `json:"BlockNum"` - NodeUrl string `json:"NodeUrl"` - Mods []witness.TrieModification -} - -//export GetWitness -func GetWitness(proofConf *C.char) *C.char { - var config GetWitnessRequest - - err := json.Unmarshal([]byte(C.GoString(proofConf)), &config) - if err != nil { - panic(err) - } - - fmt.Printf("%+v", config) - proof := witness.GetWitness(config.NodeUrl, config.BlockNum, config.Mods) - b, err := json.Marshal(proof) - if err != nil { - fmt.Println(err) - } - - return C.CString(string(b)) -} - -//export FreeString -func FreeString(str *C.char) { - C.free(unsafe.Pointer(str)) -} - -func main() {} diff --git a/rust-toolchain b/rust-toolchain index b6ce6a50ba..c5f610378b 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2023-04-24 +nightly-2024-02-14 diff --git a/testool/src/compiler.rs b/testool/src/compiler.rs index 53296cab3c..7f03d039f4 100644 --- a/testool/src/compiler.rs +++ b/testool/src/compiler.rs @@ -47,7 +47,6 @@ impl Cache { let entry = format!("{}={}\n", hex::encode(code_hash), hex::encode(&bytecode)); std::fs::OpenOptions::new() .read(true) - .write(true) .create(true) .append(true) .open(&self.path)? diff --git a/testool/src/statetest/results.rs b/testool/src/statetest/results.rs index 98b0fa5247..e07e74c383 100644 --- a/testool/src/statetest/results.rs +++ b/testool/src/statetest/results.rs @@ -392,7 +392,6 @@ impl Results { if let Some(path) = &self.cache { let mut file = std::fs::OpenOptions::new() .read(true) - .write(true) .create(true) .append(true) .open(path)?; @@ -441,7 +440,6 @@ impl Results { if let Some(path) = &self.cache { std::fs::OpenOptions::new() .read(true) - .write(true) .create(true) .append(true) .open(path)? diff --git a/testool/src/statetest/yaml.rs b/testool/src/statetest/yaml.rs index 3fe0b2eba3..967e4ec8e8 100644 --- a/testool/src/statetest/yaml.rs +++ b/testool/src/statetest/yaml.rs @@ -410,6 +410,8 @@ impl<'a> YamlStateTestBuilder<'a> { #[cfg(test)] mod test { + use std::fmt::Display; + use super::*; use crate::{ config::TestSuite, @@ -524,9 +526,9 @@ arith: } } } - impl ToString for Template { - fn to_string(&self) -> String { - TEMPLATE + impl Display for Template { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let str = TEMPLATE .replace("{{ gas_limit }}", &self.gas_limit) .replace("{{ pre_code }}", &self.pre_code) .replace("{{ res_storage }}", &self.res_storage) @@ -540,7 +542,8 @@ arith: } else { "Istanbul" }, - ) + ); + f.write_str(&str) } } diff --git a/testool/src/utils.rs b/testool/src/utils.rs index e4e4d647ba..fca65d0de0 100644 --- a/testool/src/utils.rs +++ b/testool/src/utils.rs @@ -181,18 +181,12 @@ pub fn current_submodule_git_commit() -> Result { pub fn bytecode_of(code: &str) -> anyhow::Result { let bytecode = if let Ok(bytes) = hex::decode(code) { - match Bytecode::try_from(bytes.clone()) { - Ok(bytecode) => { - for op in bytecode.iter() { - info!("{}", op.to_string()); - } - bytecode - } - Err(err) => { - error!("Failed to parse bytecode {:?}", err); - Bytecode::from_raw_unchecked(bytes) - } + let bytecode = Bytecode::from(bytes.clone()); + + for op in bytecode.iter() { + info!("{}", op.to_string()); } + bytecode } else { let mut bytecode = Bytecode::default(); for op in code.split(',') { diff --git a/zkevm-circuits/src/bytecode_circuit.rs b/zkevm-circuits/src/bytecode_circuit.rs index e84afb4a91..b02f233868 100644 --- a/zkevm-circuits/src/bytecode_circuit.rs +++ b/zkevm-circuits/src/bytecode_circuit.rs @@ -16,8 +16,8 @@ use crate::{ }, table::{BytecodeFieldTag, BytecodeTable, KeccakTable, LookupTable}, util::{ - self, get_push_size, - word::{empty_code_hash_word_value, Word, Word32, WordExpr}, + get_push_size, + word::{empty_code_hash_word_value, Word32, WordExpr, WordLoHi}, Challenges, Expr, SubCircuit, SubCircuitConfig, }, witness::{self}, @@ -40,7 +40,7 @@ const PUSH_TABLE_WIDTH: usize = 2; #[derive(Debug, Clone, Default)] /// Row for assignment pub(crate) struct BytecodeCircuitRow { - pub(crate) code_hash: Word>, + pub(crate) code_hash: WordLoHi>, tag: F, pub(crate) index: F, pub(crate) is_code: F, @@ -52,7 +52,13 @@ pub(crate) struct BytecodeCircuitRow { } impl BytecodeCircuitRow { #[cfg(test)] - pub(crate) fn new(code_hash: Word>, tag: F, index: F, is_code: F, value: F) -> Self { + pub(crate) fn new( + code_hash: WordLoHi>, + tag: F, + index: F, + is_code: F, + value: F, + ) -> Self { Self { code_hash, tag, @@ -89,7 +95,7 @@ impl From> for BytecodeCircuitAssignment { fn from(codes: Vec) -> Self { let mut rows = vec![]; for bytecode in codes.iter() { - let code_hash = util::word::Word::from(bytecode.hash()).into_value(); + let code_hash = WordLoHi::from(bytecode.hash()).into_value(); let code_size = bytecode.codesize(); let head = BytecodeCircuitRow { code_hash, @@ -341,7 +347,7 @@ impl SubCircuitConfig for BytecodeCircuitConfig { is_byte(meta), ]); - let lookup_columns = vec![value, push_data_size]; + let lookup_columns = [value, push_data_size]; let mut constraints = vec![]; @@ -366,7 +372,7 @@ impl SubCircuitConfig for BytecodeCircuitConfig { meta.query_advice(length, Rotation::cur()), ); - let empty_hash_word: Word> = + let empty_hash_word: WordLoHi> = Word32::new(*EMPTY_CODE_HASH_LE).to_expr().to_word(); cb.require_equal_word( diff --git a/zkevm-circuits/src/circuit_tools/cell_manager.rs b/zkevm-circuits/src/circuit_tools/cell_manager.rs index 468c07e9fa..5dae4ef2af 100644 --- a/zkevm-circuits/src/circuit_tools/cell_manager.rs +++ b/zkevm-circuits/src/circuit_tools/cell_manager.rs @@ -4,7 +4,7 @@ use crate::{ circuit_tools::cached_region::CachedRegion, evm_circuit::util::rlc, table::LookupTable, - util::{query_expression, word::Word, Expr}, + util::{query_expression, word::WordLoHi, Expr}, }; use eth_types::Field; use halo2_proofs::{ @@ -103,11 +103,11 @@ impl Expr for &Cell { } } -pub(crate) type WordCell = Word>; +pub(crate) type WordLoHiCell = WordLoHi>; -impl WordCell { - pub fn expr(&self) -> Word> { - Word::new([self.lo().expr(), self.hi().expr()]) +impl WordLoHiCell { + pub fn expr(&self) -> WordLoHi> { + WordLoHi::new([self.lo().expr(), self.hi().expr()]) } } @@ -239,7 +239,7 @@ impl Eq for CellColumn {} impl PartialOrd for CellColumn { fn partial_cmp(&self, other: &Self) -> Option { - self.height.partial_cmp(&other.height) + Some(self.cmp(other)) } } diff --git a/zkevm-circuits/src/circuit_tools/constraint_builder.rs b/zkevm-circuits/src/circuit_tools/constraint_builder.rs index 62bb78bdb2..814b2eaa0f 100644 --- a/zkevm-circuits/src/circuit_tools/constraint_builder.rs +++ b/zkevm-circuits/src/circuit_tools/constraint_builder.rs @@ -9,7 +9,7 @@ use std::{ use crate::{ evm_circuit::util::rlc, table::LookupTable, - util::{query_expression, word::Word, Expr}, + util::{query_expression, word::WordLoHi, Expr}, }; use eth_types::Field; use gadgets::util::{and, sum, Scalar}; @@ -18,7 +18,7 @@ use itertools::Itertools; use super::{ cached_region::StoredExpression, - cell_manager::{Cell, CellManager, CellType, WordCell}, + cell_manager::{Cell, CellManager, CellType, WordLoHiCell}, }; fn get_condition_expr(conditions: &Vec>) -> Expression { @@ -322,7 +322,7 @@ impl ConstraintBuilder { pub(crate) fn query_default(&mut self) -> Cell { self.query_cells_dyn(C::default(), 1) - .get(0) + .first() .expect("No cell found") .clone() } @@ -352,8 +352,8 @@ impl ConstraintBuilder { } // default query_word is 2 limbs. Each limb is not guaranteed to be 128 bits. - pub(crate) fn query_word_unchecked(&mut self) -> WordCell { - Word::new(self.query_cells_dyn(C::default(), 2).try_into().unwrap()) + pub(crate) fn query_word_unchecked(&mut self) -> WordLoHiCell { + WordLoHi::new(self.query_cells_dyn(C::default(), 2).try_into().unwrap()) } pub(crate) fn validate_degree(&self, degree: usize, name: &'static str) { @@ -536,7 +536,7 @@ impl ConstraintBuilder { )); self.stored_expressions .entry(self.region_id) - .or_insert_with(Vec::new) + .or_default() .push(StoredExpression { name, cell: cell.clone(), @@ -718,7 +718,7 @@ impl> ExprVec for &[E] { } } -impl + Clone> ExprVec for Word { +impl + Clone> ExprVec for WordLoHi { fn to_expr_vec(&self) -> Vec> { vec![self.lo().expr(), self.hi().expr()] } diff --git a/zkevm-circuits/src/circuit_tools/gadgets.rs b/zkevm-circuits/src/circuit_tools/gadgets.rs index 8d95bd9701..906f1c0a7c 100644 --- a/zkevm-circuits/src/circuit_tools/gadgets.rs +++ b/zkevm-circuits/src/circuit_tools/gadgets.rs @@ -8,7 +8,7 @@ use halo2_proofs::{ use crate::{ evm_circuit::util::{from_bytes, pow_of_two, transpose_val_ret}, - util::word::{Word, WordExpr}, + util::word::{WordExpr, WordLoHi}, }; use super::{ @@ -107,8 +107,8 @@ pub struct IsEqualWordGadget { impl IsEqualWordGadget { pub(crate) fn construct( cb: &mut ConstraintBuilder, - lhs: &Word>, - rhs: &Word>, + lhs: &WordLoHi>, + rhs: &WordLoHi>, ) -> Self { let (lhs_lo, lhs_hi) = lhs.to_word().to_lo_hi(); let (rhs_lo, rhs_hi) = rhs.to_word().to_lo_hi(); @@ -129,8 +129,8 @@ impl IsEqualWordGadget { &self, region: &mut CachedRegion<'_, '_, F>, offset: usize, - lhs: Word, - rhs: Word, + lhs: WordLoHi, + rhs: WordLoHi, ) -> Result { let (lhs_lo, lhs_hi) = lhs.to_lo_hi(); let (rhs_lo, rhs_hi) = rhs.to_lo_hi(); @@ -143,8 +143,8 @@ impl IsEqualWordGadget { &self, region: &mut CachedRegion<'_, '_, F>, offset: usize, - lhs: Value>, - rhs: Value>, + lhs: Value>, + rhs: Value>, ) -> Result, Error> { transpose_val_ret( lhs.zip(rhs) @@ -159,7 +159,7 @@ impl IsEqualWordGadget { lhs: eth_types::Word, rhs: eth_types::Word, ) -> Result { - self.assign(region, offset, Word::from(lhs), Word::from(rhs)) + self.assign(region, offset, WordLoHi::from(lhs), WordLoHi::from(rhs)) } } diff --git a/zkevm-circuits/src/copy_circuit.rs b/zkevm-circuits/src/copy_circuit.rs index 7e9cc18759..489dfbcca2 100644 --- a/zkevm-circuits/src/copy_circuit.rs +++ b/zkevm-circuits/src/copy_circuit.rs @@ -363,7 +363,7 @@ impl SubCircuitConfig for CopyCircuitConfig { 0.expr(), // init_val_hi ] .into_iter() - .zip_eq(rw_table.table_exprs(meta).into_iter()) + .zip_eq(rw_table.table_exprs(meta)) .map(|(arg, table)| (cond.clone() * arg, table)) .collect() }); @@ -388,7 +388,7 @@ impl SubCircuitConfig for CopyCircuitConfig { 0.expr(), // init_val_hi ] .into_iter() - .zip_eq(rw_table.table_exprs(meta).into_iter()) + .zip_eq(rw_table.table_exprs(meta)) .map(|(arg, table)| (cond.clone() * arg, table)) .collect() }); @@ -406,7 +406,7 @@ impl SubCircuitConfig for CopyCircuitConfig { meta.query_advice(value, Rotation::cur()), ] .into_iter() - .zip_eq(bytecode_table.table_exprs(meta).into_iter()) + .zip_eq(bytecode_table.table_exprs(meta)) .map(|(arg, table)| (cond.clone() * arg, table)) .collect() }); @@ -423,7 +423,7 @@ impl SubCircuitConfig for CopyCircuitConfig { meta.query_advice(value, Rotation::cur()), ] .into_iter() - .zip(tx_table.table_exprs(meta).into_iter()) + .zip(tx_table.table_exprs(meta)) .map(|(arg, table)| (cond.clone() * arg, table)) .collect() }); @@ -807,7 +807,7 @@ impl CopyCircuit { Self { copy_events, max_copy_rows, - _marker: PhantomData::default(), + _marker: PhantomData, external_data: ExternalData::default(), } } @@ -821,7 +821,7 @@ impl CopyCircuit { Self { copy_events, max_copy_rows, - _marker: PhantomData::default(), + _marker: PhantomData, external_data, } } diff --git a/zkevm-circuits/src/copy_circuit/util.rs b/zkevm-circuits/src/copy_circuit/util.rs index 24cce0f3f4..464d3f0e24 100644 --- a/zkevm-circuits/src/copy_circuit/util.rs +++ b/zkevm-circuits/src/copy_circuit/util.rs @@ -1,12 +1,12 @@ -use crate::util::word::Word; +use crate::util::word::WordLoHi; use bus_mapping::circuit_input_builder::NumberOrHash; use eth_types::Field; use halo2_proofs::circuit::Value; /// Encode the type `NumberOrHash` into a field element -pub fn number_or_hash_to_word(v: &NumberOrHash) -> Word> { +pub fn number_or_hash_to_word(v: &NumberOrHash) -> WordLoHi> { match v { - NumberOrHash::Number(n) => Word::from(*n as u64).into_value(), - NumberOrHash::Hash(h) => Word::from(*h).into_value(), + NumberOrHash::Number(n) => WordLoHi::from(*n as u64).into_value(), + NumberOrHash::Hash(h) => WordLoHi::from(*h).into_value(), } } diff --git a/zkevm-circuits/src/evm_circuit/execution.rs b/zkevm-circuits/src/evm_circuit/execution.rs index 4d44cc6f30..0e106b8412 100644 --- a/zkevm-circuits/src/evm_circuit/execution.rs +++ b/zkevm-circuits/src/evm_circuit/execution.rs @@ -981,7 +981,7 @@ impl ExecutionConfig { .txs .last() .map(|tx| tx.calls()[0].clone()) - .unwrap_or_else(Call::default); + .unwrap_or_default(); let end_block_not_last = &block.end_block_not_last; let end_block_last = &block.end_block_last; // Collect all steps diff --git a/zkevm-circuits/src/evm_circuit/execution/add_sub.rs b/zkevm-circuits/src/evm_circuit/execution/add_sub.rs index 3f58266d58..5355bed337 100644 --- a/zkevm-circuits/src/evm_circuit/execution/add_sub.rs +++ b/zkevm-circuits/src/evm_circuit/execution/add_sub.rs @@ -11,7 +11,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, WordExpr}, + word::{WordExpr, WordLoHi}, Expr, }, }; @@ -54,9 +54,9 @@ impl ExecutionGadget for AddSubGadget { // ADD: Pop a and b from the stack, push c on the stack // SUB: Pop c and b from the stack, push a on the stack - cb.stack_pop(Word::select(is_sub.expr().0, c.to_word(), a.to_word())); + cb.stack_pop(WordLoHi::select(is_sub.expr().0, c.to_word(), a.to_word())); cb.stack_pop(b.to_word()); - cb.stack_push(Word::select(is_sub.expr().0, a.to_word(), c.to_word())); + cb.stack_push(WordLoHi::select(is_sub.expr().0, a.to_word(), c.to_word())); // State transition let step_state_transition = StepStateTransition { diff --git a/zkevm-circuits/src/evm_circuit/execution/addmod.rs b/zkevm-circuits/src/evm_circuit/execution/addmod.rs index 7c918efa5f..9bd928a7ce 100644 --- a/zkevm-circuits/src/evm_circuit/execution/addmod.rs +++ b/zkevm-circuits/src/evm_circuit/execution/addmod.rs @@ -17,7 +17,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -69,7 +69,7 @@ impl ExecutionGadget for AddModGadget { let a_reduced = cb.query_word32(); let d = cb.query_word32(); - let n_is_zero = IsZeroWordGadget::construct(cb, &n); + let n_is_zero = cb.is_zero_word(&n); // 1. check k * N + a_reduced == a without overflow let muladd_k_n_areduced = @@ -94,7 +94,7 @@ impl ExecutionGadget for AddModGadget { cb.require_equal_word( "check a_reduced + b 512 bit carry if n != 0", sum_areduced_b_overflow.to_word(), - Word::from_lo_unchecked(sum_areduced_b.carry().clone().unwrap().expr()) + WordLoHi::from_lo_unchecked(sum_areduced_b.carry().clone().unwrap().expr()) .mul_selector(not::expr(n_is_zero.expr())), ); @@ -220,7 +220,7 @@ impl ExecutionGadget for AddModGadget { self.cmp_areduced_n.assign(region, offset, a_reduced, n)?; self.n_is_zero - .assign_value(region, offset, Value::known(Word::from(n)))?; + .assign_value(region, offset, Value::known(WordLoHi::from(n)))?; Ok(()) } diff --git a/zkevm-circuits/src/evm_circuit/execution/address.rs b/zkevm-circuits/src/evm_circuit/execution/address.rs index 95e9ecf8fc..0a98827638 100644 --- a/zkevm-circuits/src/evm_circuit/execution/address.rs +++ b/zkevm-circuits/src/evm_circuit/execution/address.rs @@ -11,7 +11,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -22,7 +22,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct AddressGadget { same_context: SameContextGadget, - address: WordCell, + address: WordLoHiCell, } impl ExecutionGadget for AddressGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/balance.rs b/zkevm-circuits/src/evm_circuit/execution/balance.rs index cefc1e8a78..ef3f6dfeea 100644 --- a/zkevm-circuits/src/evm_circuit/execution/balance.rs +++ b/zkevm-circuits/src/evm_circuit/execution/balance.rs @@ -15,7 +15,7 @@ use crate::{ }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{Word, Word32Cell, WordCell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -29,8 +29,8 @@ pub(crate) struct BalanceGadget { reversion_info: ReversionInfo, tx_id: Cell, is_warm: Cell, - code_hash: WordCell, - not_exists: IsZeroWordGadget>, + code_hash: WordLoHiCell, + not_exists: IsZeroWordGadget>, balance: Word32Cell, } @@ -60,7 +60,7 @@ impl ExecutionGadget for BalanceGadget { AccountFieldTag::CodeHash, code_hash.to_word(), ); - let not_exists = IsZeroWordGadget::construct(cb, &code_hash); + let not_exists = cb.is_zero_word(&code_hash); let exists = not::expr(not_exists.expr()); let balance = cb.query_word32(); cb.condition(exists.expr(), |cb| { @@ -139,7 +139,7 @@ impl ExecutionGadget for BalanceGadget { self.code_hash .assign_u256(region, offset, code_hash.to_word())?; self.not_exists - .assign_value(region, offset, Value::known(Word::from(code_hash)))?; + .assign_value(region, offset, Value::known(WordLoHi::from(code_hash)))?; let balance = if code_hash.is_zero() { eth_types::Word::zero() } else { diff --git a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs index 9b3c099570..80de4c1973 100644 --- a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs @@ -22,12 +22,12 @@ use crate::{ }, table::{AccountFieldTag, BlockContextFieldTag, CallContextFieldTag}, util::{ - word::{Word, Word32Cell, WordCell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; use bus_mapping::state_db::CodeDB; -use eth_types::{evm_types::PRECOMPILE_COUNT, keccak256, Field, ToWord, U256}; +use eth_types::{evm_types::PRECOMPILE_COUNT, keccak256, Field, OpsIdentity, ToWord, U256}; use halo2_proofs::{ circuit::Value, plonk::{Error, Expression}, @@ -37,19 +37,19 @@ use halo2_proofs::{ pub(crate) struct BeginTxGadget { begin_tx: BeginTxHelperGadget, tx: TxDataGadget, - tx_caller_address_is_zero: IsZeroWordGadget>, + tx_caller_address_is_zero: IsZeroWordGadget>, call_callee_address: AccountAddress, reversion_info: ReversionInfo, sufficient_gas_left: RangeCheckGadget, transfer_with_gas_fee: TransferWithGasFeeGadget, - code_hash: WordCell, - is_empty_code_hash: IsEqualWordGadget>, Word>>, + code_hash: WordLoHiCell, + is_empty_code_hash: IsEqualWordGadget>, WordLoHi>>, caller_nonce_hash_bytes: Word32Cell, create: ContractCreateGadget, - callee_not_exists: IsZeroWordGadget>, + callee_not_exists: IsZeroWordGadget>, is_caller_callee_equal: Cell, // EIP-3651 (Warm COINBASE) - coinbase: WordCell, + coinbase: WordLoHiCell, // Caller, callee and a list addresses are added to the access list before // coinbase, and may be duplicate. // @@ -74,14 +74,14 @@ impl ExecutionGadget for BeginTxGadget { cb.call_context_lookup_write( Some(call_id.expr()), CallContextFieldTag::IsSuccess, - Word::from_lo_unchecked(reversion_info.is_persistent()), + WordLoHi::from_lo_unchecked(reversion_info.is_persistent()), ); // rwc_delta += 1 // Check gas_left is sufficient let gas_left = tx.gas.expr() - tx.intrinsic_gas(); let sufficient_gas_left = RangeCheckGadget::construct(cb, gas_left.clone()); - let tx_caller_address_is_zero = IsZeroWordGadget::construct(cb, &tx.caller_address); + let tx_caller_address_is_zero = cb.is_zero_word(&tx.caller_address); cb.require_equal( "CallerAddress != 0 (not a padding tx)", tx_caller_address_is_zero.expr(), @@ -102,8 +102,8 @@ impl ExecutionGadget for BeginTxGadget { cb.account_write( tx.caller_address.to_word(), AccountFieldTag::Nonce, - Word::from_lo_unchecked(tx.nonce.expr() + 1.expr()), - Word::from_lo_unchecked(tx.nonce.expr()), + WordLoHi::from_lo_unchecked(tx.nonce.expr() + 1.expr()), + WordLoHi::from_lo_unchecked(tx.nonce.expr()), None, ); // rwc_delta += 1 @@ -111,7 +111,7 @@ impl ExecutionGadget for BeginTxGadget { for addr in 1..=PRECOMPILE_COUNT { cb.account_access_list_write_unchecked( tx_id.expr(), - Word::new([addr.expr(), 0.expr()]), + WordLoHi::new([addr.expr(), 0.expr()]), 1.expr(), 0.expr(), None, @@ -155,9 +155,8 @@ impl ExecutionGadget for BeginTxGadget { // Read code_hash of callee let code_hash = cb.query_word_unchecked(); - let is_empty_code_hash = - IsEqualWordGadget::construct(cb, &code_hash.to_word(), &cb.empty_code_hash()); - let callee_not_exists = IsZeroWordGadget::construct(cb, &code_hash); + let is_empty_code_hash = cb.is_eq_word(&code_hash.to_word(), &cb.empty_code_hash()); + let callee_not_exists = cb.is_zero_word(&code_hash); // no_callee_code is true when the account exists and has empty // code hash, or when the account doesn't exist (which we encode with // code_hash = 0). @@ -221,12 +220,12 @@ impl ExecutionGadget for BeginTxGadget { cb.account_write( call_callee_address.to_word(), AccountFieldTag::Nonce, - Word::one(), - Word::zero(), + WordLoHi::one(), + WordLoHi::zero(), Some(&mut reversion_info), ); for (field_tag, value) in [ - (CallContextFieldTag::Depth, Word::one()), + (CallContextFieldTag::Depth, WordLoHi::one()), ( CallContextFieldTag::CallerAddress, tx.caller_address.to_word(), @@ -235,24 +234,24 @@ impl ExecutionGadget for BeginTxGadget { CallContextFieldTag::CalleeAddress, call_callee_address.to_word(), ), - (CallContextFieldTag::CallDataOffset, Word::zero()), + (CallContextFieldTag::CallDataOffset, WordLoHi::zero()), ( CallContextFieldTag::CallDataLength, - Word::from_lo_unchecked(tx.call_data_length.expr()), + WordLoHi::from_lo_unchecked(tx.call_data_length.expr()), ), (CallContextFieldTag::Value, tx.value.to_word()), - (CallContextFieldTag::IsStatic, Word::zero()), - (CallContextFieldTag::LastCalleeId, Word::zero()), + (CallContextFieldTag::IsStatic, WordLoHi::zero()), + (CallContextFieldTag::LastCalleeId, WordLoHi::zero()), ( CallContextFieldTag::LastCalleeReturnDataOffset, - Word::zero(), + WordLoHi::zero(), ), ( CallContextFieldTag::LastCalleeReturnDataLength, - Word::zero(), + WordLoHi::zero(), ), - (CallContextFieldTag::IsRoot, Word::one()), - (CallContextFieldTag::IsCreate, Word::one()), + (CallContextFieldTag::IsRoot, WordLoHi::one()), + (CallContextFieldTag::IsCreate, WordLoHi::one()), ( CallContextFieldTag::CodeHash, cb.curr.state.code_hash.to_word(), @@ -349,7 +348,7 @@ impl ExecutionGadget for BeginTxGadget { |cb| { // Setup first call's context. for (field_tag, value) in [ - (CallContextFieldTag::Depth, Word::one()), + (CallContextFieldTag::Depth, WordLoHi::one()), ( CallContextFieldTag::CallerAddress, tx.caller_address.to_word(), @@ -358,26 +357,26 @@ impl ExecutionGadget for BeginTxGadget { CallContextFieldTag::CalleeAddress, tx.callee_address.to_word(), ), - (CallContextFieldTag::CallDataOffset, Word::zero()), + (CallContextFieldTag::CallDataOffset, WordLoHi::zero()), ( CallContextFieldTag::CallDataLength, - Word::from_lo_unchecked(tx.call_data_length.expr()), + WordLoHi::from_lo_unchecked(tx.call_data_length.expr()), ), (CallContextFieldTag::Value, tx.value.to_word()), - (CallContextFieldTag::IsStatic, Word::zero()), - (CallContextFieldTag::LastCalleeId, Word::zero()), + (CallContextFieldTag::IsStatic, WordLoHi::zero()), + (CallContextFieldTag::LastCalleeId, WordLoHi::zero()), ( CallContextFieldTag::LastCalleeReturnDataOffset, - Word::zero(), + WordLoHi::zero(), ), ( CallContextFieldTag::LastCalleeReturnDataLength, - Word::zero(), + WordLoHi::zero(), ), - (CallContextFieldTag::IsRoot, Word::one()), + (CallContextFieldTag::IsRoot, WordLoHi::one()), ( CallContextFieldTag::IsCreate, - Word::from_lo_unchecked(tx.is_create.expr()), + WordLoHi::from_lo_unchecked(tx.is_create.expr()), ), (CallContextFieldTag::CodeHash, code_hash.to_word()), ] { diff --git a/zkevm-circuits/src/evm_circuit/execution/block_ctx.rs b/zkevm-circuits/src/evm_circuit/execution/block_ctx.rs index f3026c5202..b247438a2d 100644 --- a/zkevm-circuits/src/evm_circuit/execution/block_ctx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/block_ctx.rs @@ -10,7 +10,7 @@ use crate::{ }, table::BlockContextFieldTag, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -23,7 +23,7 @@ use super::ExecutionGadget; #[derive(Clone, Debug)] pub(crate) struct BlockCtxGadget { same_context: SameContextGadget, - value: WordCell, + value: WordLoHiCell, } impl ExecutionGadget for BlockCtxGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs index 8097169646..ea37a199b7 100644 --- a/zkevm-circuits/src/evm_circuit/execution/blockhash.rs +++ b/zkevm-circuits/src/evm_circuit/execution/blockhash.rs @@ -11,7 +11,7 @@ use crate::{ Transition::Delta, }, math_gadget::LtGadget, - CachedRegion, Cell, Word, + CachedRegion, Cell, WordLoHi, }, witness::{Block, Call, ExecStep, Transaction}, }, @@ -28,7 +28,7 @@ pub(crate) struct BlockHashGadget { same_context: SameContextGadget, block_number: WordByteCapGadget, current_block_number: Cell, - block_hash: Word>, + block_hash: WordLoHi>, diff_lt: LtGadget, } @@ -42,7 +42,7 @@ impl ExecutionGadget for BlockHashGadget { cb.block_lookup( BlockContextFieldTag::Number.expr(), None, - Word::from_lo_unchecked(current_block_number.expr()), + WordLoHi::from_lo_unchecked(current_block_number.expr()), ); let block_number = WordByteCapGadget::construct(cb, current_block_number.expr()); diff --git a/zkevm-circuits/src/evm_circuit/execution/byte.rs b/zkevm-circuits/src/evm_circuit/execution/byte.rs index 532c7c61da..fb06fb0579 100644 --- a/zkevm-circuits/src/evm_circuit/execution/byte.rs +++ b/zkevm-circuits/src/evm_circuit/execution/byte.rs @@ -11,7 +11,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -53,7 +53,7 @@ impl ExecutionGadget for ByteGadget { let is_byte_selected = array_init(|idx| { // Check if this byte is selected looking only at the LSB of the // index word - IsEqualGadget::construct(cb, index.limbs[0].expr(), (31 - idx).expr()) + cb.is_eq(index.limbs[0].expr(), (31 - idx).expr()) }); // Sum all possible selected bytes @@ -70,7 +70,7 @@ impl ExecutionGadget for ByteGadget { // it only uses the LSB of a word. cb.stack_pop(index.to_word()); cb.stack_pop(value.to_word()); - cb.stack_push(Word::from_lo_unchecked(selected_byte)); + cb.stack_push(WordLoHi::from_lo_unchecked(selected_byte)); // State transition let step_state_transition = StepStateTransition { diff --git a/zkevm-circuits/src/evm_circuit/execution/calldatacopy.rs b/zkevm-circuits/src/evm_circuit/execution/calldatacopy.rs index f7d9a76240..f0d5155cac 100644 --- a/zkevm-circuits/src/evm_circuit/execution/calldatacopy.rs +++ b/zkevm-circuits/src/evm_circuit/execution/calldatacopy.rs @@ -19,7 +19,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, WordExpr}, + word::{WordExpr, WordLoHi}, Expr, }, }; @@ -69,12 +69,12 @@ impl ExecutionGadget for CallDataCopyGadget { cb.call_context_lookup_read( None, CallContextFieldTag::TxId, - Word::from_lo_unchecked(src_id.expr()), + WordLoHi::from_lo_unchecked(src_id.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::CallDataLength, - Word::from_lo_unchecked(call_data_length.expr()), + WordLoHi::from_lo_unchecked(call_data_length.expr()), ); cb.require_zero( "call_data_offset == 0 in the root call", @@ -85,17 +85,17 @@ impl ExecutionGadget for CallDataCopyGadget { cb.call_context_lookup_read( None, CallContextFieldTag::CallerId, - Word::from_lo_unchecked(src_id.expr()), + WordLoHi::from_lo_unchecked(src_id.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::CallDataLength, - Word::from_lo_unchecked(call_data_length.expr()), + WordLoHi::from_lo_unchecked(call_data_length.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::CallDataOffset, - Word::from_lo_unchecked(call_data_offset.expr()), + WordLoHi::from_lo_unchecked(call_data_offset.expr()), ); }); @@ -127,9 +127,9 @@ impl ExecutionGadget for CallDataCopyGadget { let src_addr_end = call_data_offset.expr() + call_data_length.expr(); cb.copy_table_lookup( - Word::from_lo_unchecked(src_id.expr()), + WordLoHi::from_lo_unchecked(src_id.expr()), src_tag, - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), src_addr, src_addr_end, diff --git a/zkevm-circuits/src/evm_circuit/execution/calldataload.rs b/zkevm-circuits/src/evm_circuit/execution/calldataload.rs index ff0890bb8f..bc133db5c2 100644 --- a/zkevm-circuits/src/evm_circuit/execution/calldataload.rs +++ b/zkevm-circuits/src/evm_circuit/execution/calldataload.rs @@ -23,7 +23,7 @@ use crate::{ }, table::{CallContextFieldTag, TxContextFieldTag}, util::{ - word::{Word, Word32, WordExpr}, + word::{Word32, WordExpr, WordLoHi}, Expr, }, }; @@ -76,12 +76,12 @@ impl ExecutionGadget for CallDataLoadGadget { cb.call_context_lookup_read( None, CallContextFieldTag::TxId, - Word::from_lo_unchecked(src_id.expr()), + WordLoHi::from_lo_unchecked(src_id.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::CallDataLength, - Word::from_lo_unchecked(call_data_length.expr()), + WordLoHi::from_lo_unchecked(call_data_length.expr()), ); cb.require_equal( "if is_root then call_data_offset == 0", @@ -100,17 +100,17 @@ impl ExecutionGadget for CallDataLoadGadget { cb.call_context_lookup_read( None, CallContextFieldTag::CallerId, - Word::from_lo_unchecked(src_id.expr()), + WordLoHi::from_lo_unchecked(src_id.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::CallDataLength, - Word::from_lo_unchecked(call_data_length.expr()), + WordLoHi::from_lo_unchecked(call_data_length.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::CallDataOffset, - Word::from_lo_unchecked(call_data_offset.expr()), + WordLoHi::from_lo_unchecked(call_data_offset.expr()), ); }, ); @@ -141,7 +141,7 @@ impl ExecutionGadget for CallDataLoadGadget { src_id.expr(), TxContextFieldTag::CallData, Some(src_addr.expr() + idx.expr()), - Word::from_lo_unchecked(buffer_reader.byte(idx)), + WordLoHi::from_lo_unchecked(buffer_reader.byte(idx)), ); }, ); diff --git a/zkevm-circuits/src/evm_circuit/execution/calldatasize.rs b/zkevm-circuits/src/evm_circuit/execution/calldatasize.rs index 311365feb3..1ead801063 100644 --- a/zkevm-circuits/src/evm_circuit/execution/calldatasize.rs +++ b/zkevm-circuits/src/evm_circuit/execution/calldatasize.rs @@ -11,7 +11,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -22,7 +22,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct CallDataSizeGadget { same_context: SameContextGadget, - call_data_size: WordCell, + call_data_size: WordLoHiCell, } impl ExecutionGadget for CallDataSizeGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/caller.rs b/zkevm-circuits/src/evm_circuit/execution/caller.rs index d1c6819e5e..6a3839ab34 100644 --- a/zkevm-circuits/src/evm_circuit/execution/caller.rs +++ b/zkevm-circuits/src/evm_circuit/execution/caller.rs @@ -11,7 +11,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -22,7 +22,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct CallerGadget { same_context: SameContextGadget, - caller_address: WordCell, + caller_address: WordLoHiCell, } impl ExecutionGadget for CallerGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/callop.rs b/zkevm-circuits/src/evm_circuit/execution/callop.rs index 0c0e6ae666..66716640c1 100644 --- a/zkevm-circuits/src/evm_circuit/execution/callop.rs +++ b/zkevm-circuits/src/evm_circuit/execution/callop.rs @@ -11,18 +11,19 @@ use crate::{ Transition::{Delta, To}, }, math_gadget::{ - ConstantDivisionGadget, IsZeroGadget, LtGadget, LtWordGadget, MinMaxGadget, + ConstantDivisionGadget, IsEqualGadget, IsZeroGadget, LtGadget, LtWordGadget, + MinMaxGadget, }, memory_gadget::{CommonMemoryAddressGadget, MemoryAddressGadget}, not, or, precompile_gadget::PrecompileGadget, - rlc, select, CachedRegion, Cell, StepRws, Word, + rlc, select, CachedRegion, Cell, StepRws, }, witness::{Block, Call, ExecStep, Transaction}, }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -31,7 +32,9 @@ use bus_mapping::{ evm::OpcodeId, precompile::{is_precompiled, PrecompileCalls}, }; -use eth_types::{evm_types::GAS_STIPEND_CALL_WITH_VALUE, Field, ToAddress, ToScalar, U256}; +use eth_types::{ + evm_types::GAS_STIPEND_CALL_WITH_VALUE, Field, OpsIdentity, ToAddress, ToScalar, U256, +}; use halo2_proofs::{circuit::Value, plonk::Error}; use std::cmp::min; @@ -42,24 +45,24 @@ use std::cmp::min; pub(crate) struct CallOpGadget { opcode: Cell, - is_call: IsZeroGadget, - is_callcode: IsZeroGadget, - is_delegatecall: IsZeroGadget, - is_staticcall: IsZeroGadget, + is_call: IsEqualGadget, + is_callcode: IsEqualGadget, + is_delegatecall: IsEqualGadget, + is_staticcall: IsEqualGadget, tx_id: Cell, reversion_info: ReversionInfo, - current_callee_address: WordCell, - current_caller_address: WordCell, + current_callee_address: WordLoHiCell, + current_caller_address: WordLoHiCell, is_static: Cell, depth: Cell, call: CommonCallGadget, true>, - current_value: Word>, + current_value: WordLoHi>, is_warm: Cell, is_warm_prev: Cell, callee_reversion_info: ReversionInfo, transfer: TransferGadget, // current handling Call* opcode's caller balance - caller_balance: Word>, + caller_balance: WordLoHi>, // check if insufficient balance case is_insufficient_balance: LtWordGadget, is_depth_ok: LtGadget, @@ -92,12 +95,10 @@ impl ExecutionGadget for CallOpGadget { fn configure(cb: &mut EVMConstraintBuilder) -> Self { let opcode = cb.query_cell(); cb.opcode_lookup(opcode.expr(), 1.expr()); - let is_call = IsZeroGadget::construct(cb, opcode.expr() - OpcodeId::CALL.expr()); - let is_callcode = IsZeroGadget::construct(cb, opcode.expr() - OpcodeId::CALLCODE.expr()); - let is_delegatecall = - IsZeroGadget::construct(cb, opcode.expr() - OpcodeId::DELEGATECALL.expr()); - let is_staticcall = - IsZeroGadget::construct(cb, opcode.expr() - OpcodeId::STATICCALL.expr()); + let is_call = cb.is_eq(opcode.expr(), OpcodeId::CALL.expr()); + let is_callcode = cb.is_eq(opcode.expr(), OpcodeId::CALLCODE.expr()); + let is_delegatecall = cb.is_eq(opcode.expr(), OpcodeId::DELEGATECALL.expr()); + let is_staticcall = cb.is_eq(opcode.expr(), OpcodeId::STATICCALL.expr()); // Use rw_counter of the step which triggers next call as its call_id. let callee_call_id = cb.curr.state.rw_counter.clone(); @@ -136,12 +137,12 @@ impl ExecutionGadget for CallOpGadget { ); }); - let caller_address = Word::select( + let caller_address = WordLoHi::select( is_delegatecall.expr(), current_caller_address.to_word(), current_callee_address.to_word(), ); - let callee_address = Word::select( + let callee_address = WordLoHi::select( is_callcode.expr() + is_delegatecall.expr(), current_callee_address.to_word(), call_gadget.callee_address.to_word(), @@ -194,9 +195,9 @@ impl ExecutionGadget for CallOpGadget { // rwc_delta = 8 + is_delegatecall * 2 + call_gadget.rw_delta() + // callee_reversion_info.rw_delta() let is_insufficient_balance = - LtWordGadget::construct(cb, &caller_balance.to_word(), &call_gadget.value.to_word()); + cb.is_lt_word(&caller_balance.to_word(), &call_gadget.value.to_word()); // depth < 1025 - let is_depth_ok = LtGadget::construct(cb, depth.expr(), 1025.expr()); + let is_depth_ok = cb.is_lt(depth.expr(), 1025.expr()); let is_precheck_ok = and::expr([ is_depth_ok.expr(), @@ -213,18 +214,15 @@ impl ExecutionGadget for CallOpGadget { // whether the call is to a precompiled contract. // precompile contracts are stored from address 0x01 to 0x09. - let is_code_address_zero = IsZeroGadget::construct(cb, call_gadget.callee_address.expr()); - let is_precompile_lt = - LtGadget::construct(cb, call_gadget.callee_address.expr(), 0x0A.expr()); + let is_code_address_zero = cb.is_zero(call_gadget.callee_address.expr()); + let is_precompile_lt = cb.is_lt(call_gadget.callee_address.expr(), 0x0A.expr()); let is_precompile = and::expr([ not::expr(is_code_address_zero.expr()), is_precompile_lt.expr(), ]); let precompile_return_length = cb.query_cell(); - let precompile_return_length_zero = - IsZeroGadget::construct(cb, precompile_return_length.expr()); - let precompile_return_data_copy_size = MinMaxGadget::construct( - cb, + let precompile_return_length_zero = cb.is_zero(precompile_return_length.expr()); + let precompile_return_data_copy_size = cb.min_max( precompile_return_length.expr(), call_gadget.rd_address.length(), ); @@ -273,10 +271,10 @@ impl ExecutionGadget for CallOpGadget { let gas_cost = call_gadget.gas_cost_expr(is_warm_prev.expr(), is_call.expr()); // Apply EIP 150 let gas_available = cb.curr.state.gas_left.expr() - gas_cost.clone(); - let one_64th_gas = ConstantDivisionGadget::construct(cb, gas_available.clone(), 64); + let one_64th_gas = cb.div_by_const(gas_available.clone(), 64); let all_but_one_64th_gas = gas_available - one_64th_gas.quotient(); let capped_callee_gas_left = - MinMaxGadget::construct(cb, call_gadget.gas_expr(), all_but_one_64th_gas.clone()); + cb.min_max(call_gadget.gas_expr(), all_but_one_64th_gas.clone()); let callee_gas_left = select::expr( call_gadget.gas_is_u64.expr(), capped_callee_gas_left.min(), @@ -321,7 +319,7 @@ impl ExecutionGadget for CallOpGadget { cb.call_context_lookup_write( Some(callee_call_id.expr()), CallContextFieldTag::IsSuccess, - Word::from_lo_unchecked(call_gadget.is_success.expr()), + WordLoHi::from_lo_unchecked(call_gadget.is_success.expr()), ); cb.call_context_lookup_write( Some(callee_call_id.expr()), @@ -350,7 +348,7 @@ impl ExecutionGadget for CallOpGadget { cb.call_context_lookup_write( Some(callee_call_id.expr()), field_tag, - Word::from_lo_unchecked(value), + WordLoHi::from_lo_unchecked(value), ); } @@ -384,7 +382,11 @@ impl ExecutionGadget for CallOpGadget { precompile_return_length.expr(), ), ] { - cb.call_context_lookup_write(None, field_tag, Word::from_lo_unchecked(value)); + cb.call_context_lookup_write( + None, + field_tag, + WordLoHi::from_lo_unchecked(value), + ); } // copy table lookup to verify the copying of bytes: @@ -394,9 +396,9 @@ impl ExecutionGadget for CallOpGadget { cb.condition(call_gadget.cd_address.has_length(), |cb| { let precompile_input_bytes_rlc = cb.query_cell_phase2(); cb.copy_table_lookup( - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), CopyDataType::RlcAcc.expr(), call_gadget.cd_address.offset(), call_gadget.cd_address.offset() + precompile_input_len.expr(), @@ -419,9 +421,9 @@ impl ExecutionGadget for CallOpGadget { |cb| { let precompile_output_bytes_rlc = cb.query_cell_phase2(); cb.copy_table_lookup( - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), CopyDataType::RlcAcc.expr(), - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), CopyDataType::Memory.expr(), 0.expr(), precompile_return_length.expr(), @@ -448,9 +450,9 @@ impl ExecutionGadget for CallOpGadget { |cb| { let precompile_return_bytes_rlc = cb.query_cell_phase2(); cb.copy_table_lookup( - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), CopyDataType::Memory.expr(), // refer u64::from(CopyDataType) - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), 0.expr(), precompile_return_data_copy_size.min(), @@ -474,10 +476,10 @@ impl ExecutionGadget for CallOpGadget { let callee_gas_left = callee_gas_left.expr() + call_gadget.has_value.clone() * GAS_STIPEND_CALL_WITH_VALUE.expr(); - let precompile_output_word_size_div: ConstantDivisionGadget = - ConstantDivisionGadget::construct(cb, precompile_output_rws.expr(), 32); + let precompile_output_word_size_div = + cb.div_by_const(precompile_output_rws.expr(), 32); let precompile_output_word_size_div_remainder_zero = - IsZeroGadget::construct(cb, precompile_output_word_size_div.remainder()); + cb.is_zero(precompile_output_word_size_div.remainder()); let precompile_output_word_size = precompile_output_word_size_div.quotient() + 1.expr() - precompile_output_word_size_div_remainder_zero.expr(); @@ -534,13 +536,13 @@ impl ExecutionGadget for CallOpGadget { cb.call_context_lookup_write( None, CallContextFieldTag::LastCalleeId, - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), ); for field_tag in [ CallContextFieldTag::LastCalleeReturnDataOffset, CallContextFieldTag::LastCalleeReturnDataLength, ] { - cb.call_context_lookup_write(None, field_tag, Word::zero()); + cb.call_context_lookup_write(None, field_tag, WordLoHi::zero()); } // For CALL opcode, it has an extra stack pop `value` (+1) and if the value is @@ -582,13 +584,13 @@ impl ExecutionGadget for CallOpGadget { cb.call_context_lookup_write( None, CallContextFieldTag::LastCalleeId, - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), ); for field_tag in [ CallContextFieldTag::LastCalleeReturnDataOffset, CallContextFieldTag::LastCalleeReturnDataLength, ] { - cb.call_context_lookup_write(None, field_tag, Word::zero()); + cb.call_context_lookup_write(None, field_tag, WordLoHi::zero()); } cb.require_step_state_transition(StepStateTransition { @@ -636,7 +638,11 @@ impl ExecutionGadget for CallOpGadget { cb.curr.state.reversible_write_counter.expr() + 1.expr(), ), ] { - cb.call_context_lookup_write(None, field_tag, Word::from_lo_unchecked(value)); + cb.call_context_lookup_write( + None, + field_tag, + WordLoHi::from_lo_unchecked(value), + ); } // Setup next call's context. @@ -645,37 +651,37 @@ impl ExecutionGadget for CallOpGadget { for (field_tag, value) in [ ( CallContextFieldTag::CallerId, - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), ), ( CallContextFieldTag::TxId, - Word::from_lo_unchecked(tx_id.expr()), + WordLoHi::from_lo_unchecked(tx_id.expr()), ), ( CallContextFieldTag::Depth, - Word::from_lo_unchecked(depth.expr() + 1.expr()), + WordLoHi::from_lo_unchecked(depth.expr() + 1.expr()), ), (CallContextFieldTag::CallerAddress, caller_address), (CallContextFieldTag::CalleeAddress, callee_address), ( CallContextFieldTag::CallDataOffset, - Word::from_lo_unchecked(cd_address.offset()), + WordLoHi::from_lo_unchecked(cd_address.offset()), ), ( CallContextFieldTag::CallDataLength, - Word::from_lo_unchecked(cd_address.length()), + WordLoHi::from_lo_unchecked(cd_address.length()), ), ( CallContextFieldTag::ReturnDataOffset, - Word::from_lo_unchecked(rd_address.offset()), + WordLoHi::from_lo_unchecked(rd_address.offset()), ), ( CallContextFieldTag::ReturnDataLength, - Word::from_lo_unchecked(rd_address.length()), + WordLoHi::from_lo_unchecked(rd_address.length()), ), ( CallContextFieldTag::Value, - Word::select( + WordLoHi::select( is_delegatecall.expr(), current_value.to_word(), call_gadget.value.to_word(), @@ -683,23 +689,26 @@ impl ExecutionGadget for CallOpGadget { ), ( CallContextFieldTag::IsSuccess, - Word::from_lo_unchecked(call_gadget.is_success.expr()), + WordLoHi::from_lo_unchecked(call_gadget.is_success.expr()), ), ( CallContextFieldTag::IsStatic, - Word::from_lo_unchecked(or::expr([is_static.expr(), is_staticcall.expr()])), + WordLoHi::from_lo_unchecked(or::expr([ + is_static.expr(), + is_staticcall.expr(), + ])), ), - (CallContextFieldTag::LastCalleeId, Word::zero()), + (CallContextFieldTag::LastCalleeId, WordLoHi::zero()), ( CallContextFieldTag::LastCalleeReturnDataOffset, - Word::zero(), + WordLoHi::zero(), ), ( CallContextFieldTag::LastCalleeReturnDataLength, - Word::zero(), + WordLoHi::zero(), ), - (CallContextFieldTag::IsRoot, Word::zero()), - (CallContextFieldTag::IsCreate, Word::zero()), + (CallContextFieldTag::IsRoot, WordLoHi::zero()), + (CallContextFieldTag::IsCreate, WordLoHi::zero()), ( CallContextFieldTag::CodeHash, call_gadget.callee_code_hash.to_word(), @@ -878,22 +887,26 @@ impl ExecutionGadget for CallOpGadget { self.is_call.assign( region, offset, - F::from(opcode.as_u64()) - F::from(OpcodeId::CALL.as_u64()), + F::from(opcode.as_u64()), + F::from(OpcodeId::CALL.as_u64()), )?; self.is_callcode.assign( region, offset, - F::from(opcode.as_u64()) - F::from(OpcodeId::CALLCODE.as_u64()), + F::from(opcode.as_u64()), + F::from(OpcodeId::CALLCODE.as_u64()), )?; self.is_delegatecall.assign( region, offset, - F::from(opcode.as_u64()) - F::from(OpcodeId::DELEGATECALL.as_u64()), + F::from(opcode.as_u64()), + F::from(OpcodeId::DELEGATECALL.as_u64()), )?; self.is_staticcall.assign( region, offset, - F::from(opcode.as_u64()) - F::from(OpcodeId::STATICCALL.as_u64()), + F::from(opcode.as_u64()), + F::from(OpcodeId::STATICCALL.as_u64()), )?; self.tx_id .assign(region, offset, Value::known(F::from(tx_id.low_u64())))?; diff --git a/zkevm-circuits/src/evm_circuit/execution/callvalue.rs b/zkevm-circuits/src/evm_circuit/execution/callvalue.rs index 978452a58d..f590984d77 100644 --- a/zkevm-circuits/src/evm_circuit/execution/callvalue.rs +++ b/zkevm-circuits/src/evm_circuit/execution/callvalue.rs @@ -11,7 +11,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -24,7 +24,7 @@ pub(crate) struct CallValueGadget { same_context: SameContextGadget, // Value in rw_table->stack_op and call_context->call_value are both RLC // encoded, so no need to decode. - call_value: WordCell, + call_value: WordLoHiCell, } impl ExecutionGadget for CallValueGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/chainid.rs b/zkevm-circuits/src/evm_circuit/execution/chainid.rs index 920877f017..c355c47c47 100644 --- a/zkevm-circuits/src/evm_circuit/execution/chainid.rs +++ b/zkevm-circuits/src/evm_circuit/execution/chainid.rs @@ -11,7 +11,7 @@ use crate::{ }, table::BlockContextFieldTag, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -22,7 +22,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct ChainIdGadget { same_context: SameContextGadget, - chain_id: WordCell, + chain_id: WordLoHiCell, } impl ExecutionGadget for ChainIdGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/codecopy.rs b/zkevm-circuits/src/evm_circuit/execution/codecopy.rs index c310e11281..45c2fc0360 100644 --- a/zkevm-circuits/src/evm_circuit/execution/codecopy.rs +++ b/zkevm-circuits/src/evm_circuit/execution/codecopy.rs @@ -20,7 +20,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, WordExpr}, + word::{WordExpr, WordLoHi}, Expr, }, }; @@ -66,7 +66,7 @@ impl ExecutionGadget for CodeCopyGadget { // Pop items from stack. cb.stack_pop(dst_memory_offset.to_word()); cb.stack_pop(code_offset.original_word().to_word()); - cb.stack_pop(Word::from_lo_unchecked(length.expr())); + cb.stack_pop(WordLoHi::from_lo_unchecked(length.expr())); // Construct memory address in the destionation (memory) to which we copy code. let dst_memory_addr = MemoryAddressGadget::construct(cb, dst_memory_offset, length); @@ -99,7 +99,7 @@ impl ExecutionGadget for CodeCopyGadget { cb.copy_table_lookup( code_hash.to_word(), CopyDataType::Bytecode.expr(), - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), src_addr, code_size.expr(), diff --git a/zkevm-circuits/src/evm_circuit/execution/comparator.rs b/zkevm-circuits/src/evm_circuit/execution/comparator.rs index efcb877992..a0f81f8109 100644 --- a/zkevm-circuits/src/evm_circuit/execution/comparator.rs +++ b/zkevm-circuits/src/evm_circuit/execution/comparator.rs @@ -11,7 +11,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -21,12 +21,12 @@ use halo2_proofs::{circuit::Value, plonk::Error}; #[derive(Clone, Debug)] pub(crate) struct ComparatorGadget { same_context: SameContextGadget, - a: WordCell, - b: WordCell, + a: WordLoHiCell, + b: WordLoHiCell, result: Cell, is_eq: IsEqualGadget, is_gt: IsEqualGadget, - word_comparison: CmpWordsGadget, WordCell>, + word_comparison: CmpWordsGadget, WordLoHiCell>, } impl ExecutionGadget for ComparatorGadget { @@ -41,10 +41,10 @@ impl ExecutionGadget for ComparatorGadget { let b = cb.query_word_unchecked(); // Check if opcode is EQ - let is_eq = IsEqualGadget::construct(cb, opcode.expr(), OpcodeId::EQ.expr()); + let is_eq = cb.is_eq(opcode.expr(), OpcodeId::EQ.expr()); // Check if opcode is GT. For GT we swap the stack inputs so that we // actually do greater than instead of smaller than. - let is_gt = IsEqualGadget::construct(cb, opcode.expr(), OpcodeId::GT.expr()); + let is_gt = cb.is_eq(opcode.expr(), OpcodeId::GT.expr()); let word_comparison = CmpWordsGadget::construct(cb, a.clone(), b.clone()); @@ -62,9 +62,9 @@ impl ExecutionGadget for ComparatorGadget { // When swap is enabled we swap stack places between a and b. // We can push result here directly because // it only uses the LSB of a word. - cb.stack_pop(Word::select(is_gt.expr(), b.to_word(), a.to_word())); - cb.stack_pop(Word::select(is_gt.expr(), a.to_word(), b.to_word())); - cb.stack_push(Word::from_lo_unchecked(result.expr())); + cb.stack_pop(WordLoHi::select(is_gt.expr(), b.to_word(), a.to_word())); + cb.stack_pop(WordLoHi::select(is_gt.expr(), a.to_word(), b.to_word())); + cb.stack_push(WordLoHi::from_lo_unchecked(result.expr())); // State transition let step_state_transition = StepStateTransition { diff --git a/zkevm-circuits/src/evm_circuit/execution/create.rs b/zkevm-circuits/src/evm_circuit/execution/create.rs index 293f18f7c3..9b560a16ce 100644 --- a/zkevm-circuits/src/evm_circuit/execution/create.rs +++ b/zkevm-circuits/src/evm_circuit/execution/create.rs @@ -13,19 +13,19 @@ use crate::{ Transition::{Delta, To}, }, math_gadget::{ - ConstantDivisionGadget, ContractCreateGadget, IsZeroGadget, IsZeroWordGadget, + ConstantDivisionGadget, ContractCreateGadget, IsEqualGadget, IsZeroWordGadget, LtGadget, LtWordGadget, }, memory_gadget::{ CommonMemoryAddressGadget, MemoryAddressGadget, MemoryExpansionGadget, }, - not, AccountAddress, CachedRegion, Cell, StepRws, Word, WordExpr, + not, AccountAddress, CachedRegion, Cell, StepRws, }, witness::{Block, Call, ExecStep, Transaction}, }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{Word32Cell, WordCell}, + word::{Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -34,7 +34,7 @@ use bus_mapping::{ }; use eth_types::{ evm_types::{GasCost, INIT_CODE_WORD_GAS}, - Field, ToBigEndian, ToScalar, ToWord, U256, + Field, OpsIdentity, ToBigEndian, ToScalar, ToWord, U256, }; use ethers_core::utils::keccak256; use gadgets::util::{and, select}; @@ -53,16 +53,16 @@ pub(crate) struct CreateGadget, depth: Cell, - is_create2: IsZeroGadget, + is_create2: IsEqualGadget, is_success: Cell, was_warm: Cell, value: Word32Cell, - caller_balance: WordCell, + caller_balance: WordLoHiCell, callee_reversion_info: ReversionInfo, callee_nonce: Cell, - prev_code_hash: WordCell, - prev_code_hash_is_zero: IsZeroWordGadget>>, + prev_code_hash: WordLoHiCell, + prev_code_hash_is_zero: IsZeroWordGadget>>, transfer: TransferGadget, create: ContractCreateGadget, @@ -74,7 +74,7 @@ pub(crate) struct CreateGadget, is_insufficient_balance: LtWordGadget, is_nonce_in_range: LtGadget, - not_address_collision: IsZeroWordGadget>>, + not_address_collision: IsZeroWordGadget>>, memory_expansion: MemoryExpansionGadget, gas_left: ConstantDivisionGadget, @@ -95,7 +95,7 @@ impl ExecutionGadget< opcode.expr(), vec![OpcodeId::CREATE2.expr(), OpcodeId::CREATE.expr()], ); - let is_create2 = IsZeroGadget::construct(cb, opcode.expr() - OpcodeId::CREATE2.expr()); + let is_create2 = cb.is_eq(opcode.expr(), OpcodeId::CREATE2.expr()); // Use rw_counter of the step which triggers next call as its call_id. let callee_call_id = cb.curr.state.rw_counter.clone(); @@ -139,14 +139,13 @@ impl ExecutionGadget< cb.account_read( create.caller_address(), AccountFieldTag::Nonce, - Word::from_lo_unchecked(caller_nonce.expr()), + WordLoHi::from_lo_unchecked(caller_nonce.expr()), ); // Pre-check: call depth, user's nonce and user's balance - let is_depth_in_range = LtGadget::construct(cb, depth.expr(), 1025.expr()); - let is_insufficient_balance = - LtWordGadget::construct(cb, &caller_balance.to_word(), &value.to_word()); - let is_nonce_in_range = LtGadget::construct(cb, caller_nonce.expr(), u64::MAX.expr()); + let is_depth_in_range = cb.is_lt(depth.expr(), 1025.expr()); + let is_insufficient_balance = cb.is_lt_word(&caller_balance.to_word(), &value.to_word()); + let is_nonce_in_range = cb.is_lt(caller_nonce.expr(), u64::MAX.expr()); let is_precheck_ok = and::expr([ is_depth_in_range.expr(), not::expr(is_insufficient_balance.expr()), @@ -169,7 +168,7 @@ impl ExecutionGadget< ); let gas_cost = GasCost::CREATE.expr() + memory_expansion.gas_cost() + keccak_gas_cost; let gas_remaining = cb.curr.state.gas_left.expr() - gas_cost.clone(); - let gas_left = ConstantDivisionGadget::construct(cb, gas_remaining.clone(), 64); + let gas_left = cb.div_by_const(gas_remaining.clone(), 64); let callee_gas_left = gas_remaining - gas_left.quotient(); let was_warm = cb.query_bool(); @@ -182,8 +181,8 @@ impl ExecutionGadget< cb.account_write( create.caller_address(), AccountFieldTag::Nonce, - Word::from_lo_unchecked(caller_nonce.expr() + 1.expr()), - Word::from_lo_unchecked(caller_nonce.expr()), + WordLoHi::from_lo_unchecked(caller_nonce.expr() + 1.expr()), + WordLoHi::from_lo_unchecked(caller_nonce.expr()), Some(&mut reversion_info), ); @@ -209,19 +208,19 @@ impl ExecutionGadget< // empty_code_hash_word))` to represent `(callee_nonce == 0 && (prev_code_hash_word // == 0 or prev_code_hash_word == empty_code_hash_word))` let prev_code_hash_word = prev_code_hash.to_word(); - let prev_code_hash_is_zero = IsZeroWordGadget::construct(cb, &prev_code_hash_word); + let prev_code_hash_is_zero = cb.is_zero_word(&prev_code_hash_word); cb.condition(not::expr(prev_code_hash_is_zero.expr()), |cb| { cb.account_read( contract_addr.to_word(), AccountFieldTag::Nonce, - Word::from_lo_unchecked(callee_nonce.expr()), + WordLoHi::from_lo_unchecked(callee_nonce.expr()), ); }); ( prev_code_hash_is_zero, IsZeroWordGadget::construct( cb, - &Word::from_lo_unchecked(callee_nonce.expr()).add_unchecked( + &WordLoHi::from_lo_unchecked(callee_nonce.expr()).add_unchecked( prev_code_hash_word.clone().mul_unchecked( prev_code_hash_word.sub_unchecked(cb.empty_code_hash()), ), @@ -233,25 +232,27 @@ impl ExecutionGadget< for (field_tag, value) in [ ( CallContextFieldTag::ProgramCounter, - Word::from_lo_unchecked(cb.curr.state.program_counter.expr() + 1.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.program_counter.expr() + 1.expr()), ), ( CallContextFieldTag::StackPointer, - Word::from_lo_unchecked( + WordLoHi::from_lo_unchecked( cb.curr.state.stack_pointer.expr() + 2.expr() + is_create2.expr(), ), ), ( CallContextFieldTag::GasLeft, - Word::from_lo_unchecked(gas_left.quotient()), + WordLoHi::from_lo_unchecked(gas_left.quotient()), ), ( CallContextFieldTag::MemorySize, - Word::from_lo_unchecked(memory_expansion.next_memory_word_size()), + WordLoHi::from_lo_unchecked(memory_expansion.next_memory_word_size()), ), ( CallContextFieldTag::ReversibleWriteCounter, - Word::from_lo_unchecked(cb.curr.state.reversible_write_counter.expr() + 2.expr()), + WordLoHi::from_lo_unchecked( + cb.curr.state.reversible_write_counter.expr() + 2.expr(), + ), ), ] { cb.call_context_lookup_write(None, field_tag, value); @@ -266,7 +267,7 @@ impl ExecutionGadget< // the init code is being copied from memory to bytecode, so a copy table lookup // to verify that the associated fields for the copy event. cb.copy_table_lookup( - Word::from_lo_unchecked(current_call_id.expr()), + WordLoHi::from_lo_unchecked(current_call_id.expr()), CopyDataType::Memory.expr(), create.code_hash(), CopyDataType::Bytecode.expr(), @@ -290,13 +291,13 @@ impl ExecutionGadget< cb.call_context_lookup_write( None, CallContextFieldTag::LastCalleeId, - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), ); for field_tag in [ CallContextFieldTag::LastCalleeReturnDataOffset, CallContextFieldTag::LastCalleeReturnDataLength, ] { - cb.call_context_lookup_write(None, field_tag, Word::zero()); + cb.call_context_lookup_write(None, field_tag, WordLoHi::zero()); } cb.require_step_state_transition(StepStateTransition { @@ -342,8 +343,8 @@ impl ExecutionGadget< cb.account_write( contract_addr.to_word(), AccountFieldTag::Nonce, - Word::one(), - Word::zero(), + WordLoHi::one(), + WordLoHi::zero(), Some(&mut callee_reversion_info), ); @@ -351,43 +352,43 @@ impl ExecutionGadget< for (field_tag, value) in [ ( CallContextFieldTag::CallerId, - Word::from_lo_unchecked(current_call_id.expr()), + WordLoHi::from_lo_unchecked(current_call_id.expr()), ), ( CallContextFieldTag::IsSuccess, - Word::from_lo_unchecked(is_success.expr()), + WordLoHi::from_lo_unchecked(is_success.expr()), ), ( CallContextFieldTag::IsPersistent, - Word::from_lo_unchecked(callee_reversion_info.is_persistent()), + WordLoHi::from_lo_unchecked(callee_reversion_info.is_persistent()), ), ( CallContextFieldTag::TxId, - Word::from_lo_unchecked(tx_id.expr()), + WordLoHi::from_lo_unchecked(tx_id.expr()), ), (CallContextFieldTag::CallerAddress, create.caller_address()), (CallContextFieldTag::CalleeAddress, contract_addr.to_word()), ( CallContextFieldTag::RwCounterEndOfReversion, - Word::from_lo_unchecked( + WordLoHi::from_lo_unchecked( callee_reversion_info.rw_counter_end_of_reversion(), ), ), ( CallContextFieldTag::Depth, - Word::from_lo_unchecked(depth.expr() + 1.expr()), + WordLoHi::from_lo_unchecked(depth.expr() + 1.expr()), ), ( CallContextFieldTag::IsRoot, - Word::from_lo_unchecked(false.expr()), + WordLoHi::from_lo_unchecked(false.expr()), ), ( CallContextFieldTag::IsStatic, - Word::from_lo_unchecked(false.expr()), + WordLoHi::from_lo_unchecked(false.expr()), ), ( CallContextFieldTag::IsCreate, - Word::from_lo_unchecked(true.expr()), + WordLoHi::from_lo_unchecked(true.expr()), ), (CallContextFieldTag::CodeHash, create.code_hash()), (CallContextFieldTag::Value, value.to_word()), @@ -414,13 +415,13 @@ impl ExecutionGadget< cb.call_context_lookup_write( None, CallContextFieldTag::LastCalleeId, - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), ); for field_tag in [ CallContextFieldTag::LastCalleeReturnDataOffset, CallContextFieldTag::LastCalleeReturnDataLength, ] { - cb.call_context_lookup_write(None, field_tag, Word::zero()); + cb.call_context_lookup_write(None, field_tag, WordLoHi::zero()); } cb.require_step_state_transition(StepStateTransition { rw_counter: Delta(cb.rw_counter_offset()), @@ -457,13 +458,13 @@ impl ExecutionGadget< cb.call_context_lookup_write( None, CallContextFieldTag::LastCalleeId, - Word::from_lo_unchecked(callee_call_id.expr()), + WordLoHi::from_lo_unchecked(callee_call_id.expr()), ); for field_tag in [ CallContextFieldTag::LastCalleeReturnDataOffset, CallContextFieldTag::LastCalleeReturnDataLength, ] { - cb.call_context_lookup_write(None, field_tag, Word::zero()); + cb.call_context_lookup_write(None, field_tag, WordLoHi::zero()); } cb.require_step_state_transition(StepStateTransition { @@ -523,7 +524,8 @@ impl ExecutionGadget< self.is_create2.assign( region, offset, - F::from(opcode.as_u64()) - F::from(OpcodeId::CREATE2.as_u64()), + F::from(opcode.as_u64()), + F::from(OpcodeId::CREATE2.as_u64()), )?; self.tx_id diff --git a/zkevm-circuits/src/evm_circuit/execution/dummy.rs b/zkevm-circuits/src/evm_circuit/execution/dummy.rs index 425aa1a443..ad85b35bc4 100644 --- a/zkevm-circuits/src/evm_circuit/execution/dummy.rs +++ b/zkevm-circuits/src/evm_circuit/execution/dummy.rs @@ -7,15 +7,15 @@ use crate::{ util::{constraint_builder::EVMConstraintBuilder, CachedRegion}, witness::{Block, Call, ExecStep, Transaction}, }, - util::word::{WordCell, WordExpr}, + util::word::{WordExpr, WordLoHiCell}, }; use eth_types::Field; use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct DummyGadget { - pops: [WordCell; N_POP], - pushes: [WordCell; N_PUSH], + pops: [WordLoHiCell; N_POP], + pushes: [WordLoHiCell; N_PUSH], _marker: PhantomData, } @@ -27,8 +27,8 @@ impl const EXECUTION_STATE: ExecutionState = S; fn configure(cb: &mut EVMConstraintBuilder) -> Self { - let pops: [WordCell; N_POP] = [(); N_POP].map(|_| cb.query_word_unchecked()); - let pushes: [WordCell; N_PUSH] = [(); N_PUSH].map(|_| cb.query_word_unchecked()); + let pops: [WordLoHiCell; N_POP] = [(); N_POP].map(|_| cb.query_word_unchecked()); + let pushes: [WordLoHiCell; N_PUSH] = [(); N_PUSH].map(|_| cb.query_word_unchecked()); for pop in pops.iter() { cb.stack_pop(pop.to_word()); } diff --git a/zkevm-circuits/src/evm_circuit/execution/dup.rs b/zkevm-circuits/src/evm_circuit/execution/dup.rs index 49c2a58a0a..71a8c8d7e8 100644 --- a/zkevm-circuits/src/evm_circuit/execution/dup.rs +++ b/zkevm-circuits/src/evm_circuit/execution/dup.rs @@ -10,7 +10,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -20,7 +20,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct DupGadget { same_context: SameContextGadget, - value: WordCell, + value: WordLoHiCell, } impl ExecutionGadget for DupGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/end_block.rs b/zkevm-circuits/src/evm_circuit/execution/end_block.rs index 48e083602b..63c5e530e1 100644 --- a/zkevm-circuits/src/evm_circuit/execution/end_block.rs +++ b/zkevm-circuits/src/evm_circuit/execution/end_block.rs @@ -6,15 +6,15 @@ use crate::{ constraint_builder::{ ConstrainBuilderCommon, EVMConstraintBuilder, StepStateTransition, Transition::Same, }, - math_gadget::{IsEqualGadget, IsZeroGadget}, + math_gadget::IsEqualGadget, not, CachedRegion, Cell, }, witness::{Block, Call, ExecStep, Transaction}, }, table::{CallContextFieldTag, TxContextFieldTag}, - util::{word::Word, Expr}, + util::{word::WordLoHi, Expr}, }; -use eth_types::Field; +use eth_types::{Field, OpsIdentity}; use gadgets::util::select; use halo2_proofs::{circuit::Value, plonk::Error}; @@ -22,7 +22,7 @@ use halo2_proofs::{circuit::Value, plonk::Error}; pub(crate) struct EndBlockGadget { total_txs: Cell, total_txs_is_max_txs: IsEqualGadget, - is_empty_block: IsZeroGadget, + is_empty_block: IsEqualGadget, max_rws: Cell, max_txs: Cell, } @@ -36,10 +36,9 @@ impl ExecutionGadget for EndBlockGadget { let max_txs = cb.query_copy_cell(); let max_rws = cb.query_copy_cell(); let total_txs = cb.query_cell(); - let total_txs_is_max_txs = IsEqualGadget::construct(cb, total_txs.expr(), max_txs.expr()); + let total_txs_is_max_txs = cb.is_eq(total_txs.expr(), max_txs.expr()); // Note that rw_counter starts at 1 - let is_empty_block = - IsZeroGadget::construct(cb, cb.curr.state.rw_counter.clone().expr() - 1.expr()); + let is_empty_block = cb.is_eq(cb.curr.state.rw_counter.clone().expr(), 1.expr()); let total_rws_before_padding = cb.curr.state.rw_counter.clone().expr() - 1.expr() + select::expr( @@ -59,7 +58,7 @@ impl ExecutionGadget for EndBlockGadget { cb.call_context_lookup_read( None, CallContextFieldTag::TxId, - Word::from_lo_unchecked(total_txs.expr()), + WordLoHi::from_lo_unchecked(total_txs.expr()), ); }); @@ -74,7 +73,7 @@ impl ExecutionGadget for EndBlockGadget { total_txs.expr() + 1.expr(), TxContextFieldTag::CallerAddress, None, - Word::zero(), + WordLoHi::zero(), ); // Since every tx lookup done in the EVM circuit must succeed // and uses a unique tx_id, we know that at @@ -126,7 +125,7 @@ impl ExecutionGadget for EndBlockGadget { step: &ExecStep, ) -> Result<(), Error> { self.is_empty_block - .assign(region, offset, F::from(u64::from(step.rwc) - 1))?; + .assign(region, offset, F::from(u64::from(step.rwc)), F::ONE)?; let max_rws = F::from(block.circuits_params.max_rws as u64); let max_rws_assigned = self.max_rws.assign(region, offset, Value::known(max_rws))?; diff --git a/zkevm-circuits/src/evm_circuit/execution/end_tx.rs b/zkevm-circuits/src/evm_circuit/execution/end_tx.rs index 3e9a38150e..8c68776fdc 100644 --- a/zkevm-circuits/src/evm_circuit/execution/end_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/end_tx.rs @@ -17,7 +17,7 @@ use crate::{ }, table::{AccountFieldTag, BlockContextFieldTag, CallContextFieldTag, TxContextFieldTag}, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -32,13 +32,13 @@ pub(crate) struct EndTxGadget { refund: Cell, effective_refund: MinMaxGadget, mul_gas_price_by_refund: MulWordByU64Gadget, - tx_caller_address: WordCell, + tx_caller_address: WordLoHiCell, gas_fee_refund: UpdateBalanceGadget, sub_gas_price_by_base_fee: AddWordsGadget, mul_effective_tip_by_gas_used: MulWordByU64Gadget, - coinbase: WordCell, - coinbase_code_hash: WordCell, - coinbase_code_hash_is_zero: IsZeroWordGadget>, + coinbase: WordLoHiCell, + coinbase_code_hash: WordLoHiCell, + coinbase_code_hash_is_zero: IsZeroWordGadget>, coinbase_reward: TransferToGadget, is_persistent: Cell, end_tx: EndTxHelperGadget, @@ -66,8 +66,8 @@ impl ExecutionGadget for EndTxGadget { MAX_REFUND_QUOTIENT_OF_GAS_USED as u64, ); let refund = cb.query_cell(); - cb.tx_refund_read(tx_id.expr(), Word::from_lo_unchecked(refund.expr())); - let effective_refund = MinMaxGadget::construct(cb, max_refund.quotient(), refund.expr()); + cb.tx_refund_read(tx_id.expr(), WordLoHi::from_lo_unchecked(refund.expr())); + let effective_refund = cb.min_max(max_refund.quotient(), refund.expr()); // Add effective_refund * tx_gas_price back to caller's balance let mul_gas_price_by_refund = MulWordByU64Gadget::construct( @@ -85,7 +85,7 @@ impl ExecutionGadget for EndTxGadget { // Add gas_used * effective_tip to coinbase's balance let coinbase = cb.query_word_unchecked(); let coinbase_code_hash = cb.query_word_unchecked(); - let coinbase_code_hash_is_zero = IsZeroWordGadget::construct(cb, &coinbase_code_hash); + let coinbase_code_hash_is_zero = cb.is_zero_word(&coinbase_code_hash); cb.account_read( coinbase.to_word(), AccountFieldTag::CodeHash, diff --git a/zkevm-circuits/src/evm_circuit/execution/error_code_store.rs b/zkevm-circuits/src/evm_circuit/execution/error_code_store.rs index 3440bd9f44..2506639307 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_code_store.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_code_store.rs @@ -72,8 +72,7 @@ impl ExecutionGadget for ErrorCodeStoreGadget { ); // constrain code size > MAXCODESIZE - let max_code_size_exceed = - LtGadget::construct(cb, MAXCODESIZE.expr(), memory_address.length()); + let max_code_size_exceed = cb.is_lt(MAXCODESIZE.expr(), memory_address.length()); // check must be one of CodeStoreOutOfGas or MaxCodeSizeExceeded cb.require_in_set( diff --git a/zkevm-circuits/src/evm_circuit/execution/error_invalid_creation_code.rs b/zkevm-circuits/src/evm_circuit/execution/error_invalid_creation_code.rs index e076a831bc..6b7482046a 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_invalid_creation_code.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_invalid_creation_code.rs @@ -46,7 +46,7 @@ impl ExecutionGadget for ErrorInvalidCreationCodeGadget { cb.memory_lookup(0.expr(), memory_address.offset(), first_byte.expr(), None); let is_first_byte_invalid = - IsEqualGadget::construct(cb, first_byte.expr(), INVALID_INIT_CODE_FIRST_BYTE.expr()); + cb.is_eq(first_byte.expr(), INVALID_INIT_CODE_FIRST_BYTE.expr()); cb.require_true( "is_first_byte_invalid is true", is_first_byte_invalid.expr(), diff --git a/zkevm-circuits/src/evm_circuit/execution/error_invalid_jump.rs b/zkevm-circuits/src/evm_circuit/execution/error_invalid_jump.rs index 65e81e8fc6..6fab8e624b 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_invalid_jump.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_invalid_jump.rs @@ -12,7 +12,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -29,8 +29,8 @@ pub(crate) struct ErrorInvalidJumpGadget { is_code: Cell, is_jump_dest: IsEqualGadget, is_jumpi: IsEqualGadget, - condition: WordCell, - is_condition_zero: IsZeroWordGadget>, + condition: WordLoHiCell, + is_condition_zero: IsZeroWordGadget>, common_error_gadget: CommonErrorGadget, } @@ -54,14 +54,14 @@ impl ExecutionGadget for ErrorInvalidJumpGadget { vec![OpcodeId::JUMP.expr(), OpcodeId::JUMPI.expr()], ); - let is_jumpi = IsEqualGadget::construct(cb, opcode.expr(), OpcodeId::JUMPI.expr()); + let is_jumpi = cb.is_eq(opcode.expr(), OpcodeId::JUMPI.expr()); // initialize is_jump_dest - let is_jump_dest = IsEqualGadget::construct(cb, value.expr(), OpcodeId::JUMPDEST.expr()); + let is_jump_dest = cb.is_eq(value.expr(), OpcodeId::JUMPDEST.expr()); // first default this condition, if use will re-construct with real condition // value - let is_condition_zero = IsZeroWordGadget::construct(cb, &condition); + let is_condition_zero = cb.is_zero_word(&condition); // Pop the value from the stack cb.stack_pop(dest.original_word().to_word()); @@ -160,8 +160,11 @@ impl ExecutionGadget for ErrorInvalidJumpGadget { )?; self.condition.assign_u256(region, offset, condition)?; - self.is_condition_zero - .assign_value(region, offset, Value::known(Word::from(condition)))?; + self.is_condition_zero.assign_value( + region, + offset, + Value::known(WordLoHi::from(condition)), + )?; self.common_error_gadget.assign( region, diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_account_access.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_account_access.rs index 9e36738ef2..7878b67252 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_account_access.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_account_access.rs @@ -62,8 +62,7 @@ impl ExecutionGadget for ErrorOOGAccountAccessGadget { GasCost::COLD_ACCOUNT_ACCESS.expr(), ); - let insufficient_gas_cost = - LtGadget::construct(cb, cb.curr.state.gas_left.expr(), gas_cost); + let insufficient_gas_cost = cb.is_lt(cb.curr.state.gas_left.expr(), gas_cost); cb.require_equal( "Gas left is less than gas cost", diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_call.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_call.rs index 38aeae1db7..53b61484aa 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_call.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_call.rs @@ -79,7 +79,7 @@ impl ExecutionGadget for ErrorOOGCallGadget { let gas_cost = call_gadget.gas_cost_expr(is_warm.expr(), is_call.expr()); // Check if the amount of gas available is less than the amount of gas required - let insufficient_gas = LtGadget::construct(cb, cb.curr.state.gas_left.expr(), gas_cost); + let insufficient_gas = cb.is_lt(cb.curr.state.gas_left.expr(), gas_cost); cb.require_equal( "Either Memory address is overflow or gas left is less than cost", diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_constant.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_constant.rs index acaec49d6d..c0061b31c5 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_constant.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_constant.rs @@ -38,8 +38,7 @@ impl ExecutionGadget for ErrorOOGConstantGadget { cb.constant_gas_lookup(opcode.expr(), gas_required.expr()); // Check if the amount of gas available is less than the amount of gas // required - let insufficient_gas = - LtGadget::construct(cb, cb.curr.state.gas_left.expr(), gas_required.expr()); + let insufficient_gas = cb.is_lt(cb.curr.state.gas_left.expr(), gas_required.expr()); cb.require_equal( "constant gas left is less than gas required ", insufficient_gas.expr(), diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_create.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_create.rs index b22619ae01..99756d1d23 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_create.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_create.rs @@ -68,8 +68,7 @@ impl ExecutionGadget for ErrorOOGCreateGadget { cb.stack_pop(memory_address.length_word()); cb.condition(is_create2.expr().0, |cb| cb.stack_pop(salt.to_word())); - let init_code_size_overflow = - LtGadget::construct(cb, MAX_INIT_CODE_SIZE.expr(), memory_address.length()); + let init_code_size_overflow = cb.is_lt(MAX_INIT_CODE_SIZE.expr(), memory_address.length()); let minimum_word_size = MemoryWordSizeGadget::construct(cb, memory_address.length()); let memory_expansion = MemoryExpansionGadget::construct(cb, [memory_address.address()]); @@ -81,7 +80,7 @@ impl ExecutionGadget for ErrorOOGCreateGadget { CREATE_GAS_PER_CODE_WORD.expr(), ); let gas_cost = GasCost::CREATE.expr() + memory_expansion.gas_cost() + code_store_gas_cost; - let insufficient_gas = LtGadget::construct(cb, cb.curr.state.gas_left.expr(), gas_cost); + let insufficient_gas = cb.is_lt(cb.curr.state.gas_left.expr(), gas_cost); cb.require_equal( "Memory address is overflow, init code size is overflow, or gas left is less than cost", diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_log.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_log.rs index 4dbb9f4a24..bf129c5088 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_log.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_log.rs @@ -55,7 +55,7 @@ impl ExecutionGadget for ErrorOOGLogGadget { cb.require_zero("is_static_call is false in LOGN", is_static_call.expr()); let topic_count = opcode.expr() - OpcodeId::LOG0.as_u8().expr(); - let is_opcode_logn = LtGadget::construct(cb, topic_count.clone(), 5.expr()); + let is_opcode_logn = cb.is_lt(topic_count.clone(), 5.expr()); cb.require_equal( "topic count in [0..5) which means opcode is Log0...Log4 ", is_opcode_logn.expr(), @@ -73,7 +73,7 @@ impl ExecutionGadget for ErrorOOGLogGadget { // Check if the amount of gas available is less than the amount of gas // required - let insufficient_gas = LtGadget::construct(cb, cb.curr.state.gas_left.expr(), gas_cost); + let insufficient_gas = cb.is_lt(cb.curr.state.gas_left.expr(), gas_cost); cb.require_equal( "Memory address is overflow or gas left is less than cost", or::expr([memory_address.overflow(), insufficient_gas.expr()]), diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_memory_copy.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_memory_copy.rs index 4a3b28ac96..697279a626 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_memory_copy.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_memory_copy.rs @@ -17,7 +17,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -39,7 +39,7 @@ pub(crate) struct ErrorOOGMemoryCopyGadget { /// Extra stack pop for `EXTCODECOPY` external_address: AccountAddress, /// Source offset - src_offset: WordCell, + src_offset: WordLoHiCell, /// Destination offset and size to copy dst_memory_addr: MemoryExpandedAddressGadget, memory_expansion: MemoryExpansionGadget, @@ -79,7 +79,7 @@ impl ExecutionGadget for ErrorOOGMemoryCopyGadget { cb.call_context_lookup_read( None, CallContextFieldTag::TxId, - Word::from_lo_unchecked(tx_id.expr()), + WordLoHi::from_lo_unchecked(tx_id.expr()), ); // Check if EXTCODECOPY external address is warm. diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs index d1df78b9ca..82040cb0ee 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs @@ -63,9 +63,9 @@ impl ExecutionGadget for ErrorOOGPrecompileGadget { }); // calculate required gas for precompile - let precompiles_required_gas = vec![ + let precompiles_required_gas = [ ( - addr_bits.value_equals(PrecompileCalls::Ecrecover), + addr_bits.value_equals(PrecompileCalls::ECRecover), GasCost::PRECOMPILE_ECRECOVER_BASE.expr(), ), // addr_bits.value_equals(PrecompileCalls::Sha256), @@ -114,8 +114,7 @@ impl ExecutionGadget for ErrorOOGPrecompileGadget { ); // gas_left < required_gas - let insufficient_gas = - LtGadget::construct(cb, cb.curr.state.gas_left.expr(), required_gas.expr()); + let insufficient_gas = cb.is_lt(cb.curr.state.gas_left.expr(), required_gas.expr()); cb.require_equal("gas_left < required_gas", insufficient_gas.expr(), 1.expr()); let restore_context = RestoreContextGadget::construct2( diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_sload_sstore.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_sload_sstore.rs index 44a6d47bf5..b0b8bc97dc 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_sload_sstore.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_sload_sstore.rs @@ -17,7 +17,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -34,14 +34,14 @@ pub(crate) struct ErrorOOGSloadSstoreGadget { opcode: Cell, tx_id: Cell, is_static: Cell, - callee_address: WordCell, - key: WordCell, - value: WordCell, - value_prev: WordCell, - original_value: WordCell, + callee_address: WordLoHiCell, + key: WordLoHiCell, + value: WordLoHiCell, + value_prev: WordLoHiCell, + original_value: WordLoHiCell, is_warm: Cell, is_sstore: PairSelectGadget, - sstore_gas_cost: SstoreGasGadget>, + sstore_gas_cost: SstoreGasGadget>, insufficient_gas_cost: LtGadget, // Constrain for SSTORE reentrancy sentry. insufficient_gas_sentry: LtGadget, @@ -81,7 +81,7 @@ impl ExecutionGadget for ErrorOOGSloadSstoreGadget { tx_id.expr(), callee_address.to_word(), key.to_word(), - Word::from_lo_unchecked(is_warm.expr()), + WordLoHi::from_lo_unchecked(is_warm.expr()), ); let sload_gas_cost = SloadGasGadget::construct(cb, is_warm.expr()); diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_static_memory.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_static_memory.rs index 1e1ced35de..948062ce7d 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_static_memory.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_static_memory.rs @@ -14,7 +14,7 @@ use crate::{ }, witness::{Block, Call, ExecStep, Transaction}, }, - util::{word::Word, Expr}, + util::{word::WordLoHi, Expr}, }; use eth_types::{evm_types::OpcodeId, Field, ToWord}; use gadgets::util::or; @@ -55,7 +55,7 @@ impl ExecutionGadget for ErrorOOGStaticMemoryGadget { ); // Check if this is an MSTORE8 - let is_mstore8 = IsEqualGadget::construct(cb, opcode.expr(), OpcodeId::MSTORE8.expr()); + let is_mstore8 = cb.is_eq(opcode.expr(), OpcodeId::MSTORE8.expr()); // pop memory_offset from stack let memory_address = MemoryExpandedAddressGadget::construct_self(cb); @@ -65,7 +65,7 @@ impl ExecutionGadget for ErrorOOGStaticMemoryGadget { cb.require_equal_word( "Memory length must be 32 for MLOAD and MSTORE, and 1 for MSTORE8", memory_address.length_word(), - Word::from_lo_unchecked(select::expr(is_mstore8.expr(), 1.expr(), 32.expr())), + WordLoHi::from_lo_unchecked(select::expr(is_mstore8.expr(), 1.expr(), 32.expr())), ); let memory_expansion = MemoryExpansionGadget::construct(cb, [memory_address.address()]); diff --git a/zkevm-circuits/src/evm_circuit/execution/error_precompile_failed.rs b/zkevm-circuits/src/evm_circuit/execution/error_precompile_failed.rs index 4945564fb1..7eb8f82813 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_precompile_failed.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_precompile_failed.rs @@ -6,18 +6,18 @@ use crate::{ constraint_builder::{ConstrainBuilderCommon, EVMConstraintBuilder}, math_gadget::IsZeroGadget, memory_gadget::{CommonMemoryAddressGadget, MemoryAddressGadget}, - sum, CachedRegion, Cell, Word, + sum, CachedRegion, Cell, }, }, table::CallContextFieldTag, util::{ - word::{Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, witness::{Block, Call, ExecStep, Transaction}, }; use bus_mapping::evm::OpcodeId; -use eth_types::{Field, U256}; +use eth_types::{Field, OpsIdentity, U256}; use halo2_proofs::{circuit::Value, plonk::Error}; #[derive(Clone, Debug)] @@ -87,14 +87,14 @@ impl ExecutionGadget for ErrorPrecompileFailedGadget { cb.stack_pop(cd_length.to_word()); cb.stack_pop(rd_offset.to_word()); cb.stack_pop(rd_length.to_word()); - cb.stack_push(Word::zero()); + cb.stack_push(WordLoHi::zero()); for (field_tag, value) in [ (CallContextFieldTag::LastCalleeId, callee_call_id.expr()), (CallContextFieldTag::LastCalleeReturnDataOffset, 0.expr()), (CallContextFieldTag::LastCalleeReturnDataLength, 0.expr()), ] { - cb.call_context_lookup_write(None, field_tag, Word::from_lo_unchecked(value)); + cb.call_context_lookup_write(None, field_tag, WordLoHi::from_lo_unchecked(value)); } let cd_address = MemoryAddressGadget::construct(cb, cd_offset, cd_length); diff --git a/zkevm-circuits/src/evm_circuit/execution/error_return_data_oo_bound.rs b/zkevm-circuits/src/evm_circuit/execution/error_return_data_oo_bound.rs index 63436d8e30..52a9839239 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_return_data_oo_bound.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_return_data_oo_bound.rs @@ -14,7 +14,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, WordExpr}, + word::{WordExpr, WordLoHi}, Expr, }, }; @@ -64,23 +64,22 @@ impl ExecutionGadget for ErrorReturnDataOutOfBoundGadget { cb.call_context_lookup_read( None, CallContextFieldTag::LastCalleeReturnDataLength, - Word::from_lo_unchecked(return_data_length.expr()), + WordLoHi::from_lo_unchecked(return_data_length.expr()), ); // Check if `data_offset` is Uint64 overflow. let data_offset_larger_u64 = sum::expr(&data_offset.limbs[N_BYTES_U64..]); - let is_data_offset_within_u64 = IsZeroGadget::construct(cb, data_offset_larger_u64); + let is_data_offset_within_u64 = cb.is_zero(data_offset_larger_u64); // Check if `remainder_end` is Uint64 overflow. let sum = AddWordsGadget::construct(cb, [data_offset, size], remainder_end.clone()); let is_end_u256_overflow = sum.carry().as_ref().unwrap(); let remainder_end_larger_u64 = sum::expr(&remainder_end.limbs[N_BYTES_U64..]); - let is_remainder_end_within_u64 = IsZeroGadget::construct(cb, remainder_end_larger_u64); + let is_remainder_end_within_u64 = cb.is_zero(remainder_end_larger_u64); // check if `remainder_end` exceeds return data length. - let is_remainder_end_exceed_len = LtGadget::construct( - cb, + let is_remainder_end_exceed_len = cb.is_lt( return_data_length.expr(), from_bytes::expr(&remainder_end.limbs[..N_BYTES_U64]), ); diff --git a/zkevm-circuits/src/evm_circuit/execution/error_write_protection.rs b/zkevm-circuits/src/evm_circuit/execution/error_write_protection.rs index 6182e413d5..531bdc9813 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_write_protection.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_write_protection.rs @@ -5,28 +5,28 @@ use crate::{ util::{ common_gadget::CommonErrorGadget, constraint_builder::{ConstrainBuilderCommon, EVMConstraintBuilder}, - math_gadget::{IsZeroGadget, IsZeroWordGadget}, + math_gadget::{IsEqualGadget, IsZeroWordGadget}, AccountAddress, CachedRegion, Cell, }, witness::{Block, Call, ExecStep, Transaction}, }, table::CallContextFieldTag, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; -use eth_types::{evm_types::OpcodeId, Field, ToAddress, U256}; +use eth_types::{evm_types::OpcodeId, Field, OpsIdentity, ToAddress, U256}; use halo2_proofs::{circuit::Value, plonk::Error}; #[derive(Clone, Debug)] pub(crate) struct ErrorWriteProtectionGadget { opcode: Cell, - is_call: IsZeroGadget, - gas: WordCell, + is_call: IsEqualGadget, + gas: WordLoHiCell, code_address: AccountAddress, - value: WordCell, - is_value_zero: IsZeroWordGadget>, + value: WordLoHiCell, + is_value_zero: IsZeroWordGadget>, common_error_gadget: CommonErrorGadget, } @@ -37,11 +37,11 @@ impl ExecutionGadget for ErrorWriteProtectionGadget { fn configure(cb: &mut EVMConstraintBuilder) -> Self { let opcode = cb.query_cell(); - let is_call = IsZeroGadget::construct(cb, opcode.expr() - OpcodeId::CALL.expr()); + let is_call = cb.is_eq(opcode.expr(), OpcodeId::CALL.expr()); let gas_word = cb.query_word_unchecked(); let code_address = cb.query_account_address(); let value = cb.query_word_unchecked(); - let is_value_zero = IsZeroWordGadget::construct(cb, &value); + let is_value_zero = cb.is_zero_word(&value); // require_in_set method will spilit into more low degree expressions if exceed // max_degree. otherwise need to do fixed lookup for these opcodes @@ -73,7 +73,7 @@ impl ExecutionGadget for ErrorWriteProtectionGadget { }); // current call context is readonly - cb.call_context_lookup_read(None, CallContextFieldTag::IsStatic, Word::one()); + cb.call_context_lookup_read(None, CallContextFieldTag::IsStatic, WordLoHi::one()); // constrain not root call as at least one previous staticcall preset. cb.require_zero( @@ -122,10 +122,11 @@ impl ExecutionGadget for ErrorWriteProtectionGadget { self.is_call.assign( region, offset, - F::from(opcode.as_u64()) - F::from(OpcodeId::CALL.as_u64()), + F::from(opcode.as_u64()), + F::from(OpcodeId::CALL.as_u64()), )?; self.is_value_zero - .assign(region, offset, Word::from(value))?; + .assign(region, offset, WordLoHi::from(value))?; self.common_error_gadget.assign( region, diff --git a/zkevm-circuits/src/evm_circuit/execution/exp.rs b/zkevm-circuits/src/evm_circuit/execution/exp.rs index 0945e2819e..24de01a70e 100644 --- a/zkevm-circuits/src/evm_circuit/execution/exp.rs +++ b/zkevm-circuits/src/evm_circuit/execution/exp.rs @@ -78,11 +78,11 @@ impl ExecutionGadget for ExponentiationGadget { // We simplify constraints depending on whether or not the exponent is 0 or 1. // In order to do this, we build some utility expressions. - let exponent_lo_is_zero = IsZeroGadget::construct(cb, exponent_lo.clone()); - let exponent_hi_is_zero = IsZeroGadget::construct(cb, exponent_hi.clone()); + let exponent_lo_is_zero = cb.is_zero(exponent_lo.clone()); + let exponent_hi_is_zero = cb.is_zero(exponent_hi.clone()); let exponent_is_zero_expr = and::expr([exponent_lo_is_zero.expr(), exponent_hi_is_zero.expr()]); - let exponent_lo_is_one = IsEqualGadget::construct(cb, exponent_lo.clone(), 1.expr()); + let exponent_lo_is_one = cb.is_eq(exponent_lo.clone(), 1.expr()); let exponent_is_one_expr = and::expr([exponent_lo_is_one.expr(), exponent_hi_is_zero.expr()]); diff --git a/zkevm-circuits/src/evm_circuit/execution/extcodecopy.rs b/zkevm-circuits/src/evm_circuit/execution/extcodecopy.rs index bb22ee2723..bb05e5237d 100644 --- a/zkevm-circuits/src/evm_circuit/execution/extcodecopy.rs +++ b/zkevm-circuits/src/evm_circuit/execution/extcodecopy.rs @@ -18,7 +18,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, table::{AccountFieldTag, CallContextFieldTag}, - util::word::{Word, Word32Cell, WordExpr}, + util::word::{Word32Cell, WordExpr, WordLoHi}, }; use bus_mapping::circuit_input_builder::CopyDataType; use eth_types::{evm_types::GasCost, Field, ToScalar}; @@ -40,7 +40,7 @@ pub(crate) struct ExtcodecopyGadget { reversion_info: ReversionInfo, is_warm: Cell, code_hash: Word32Cell, - not_exists: IsZeroWordGadget>>, + not_exists: IsZeroWordGadget>>, code_size: Cell, copy_rwc_inc: Cell, memory_expansion: MemoryExpansionGadget, @@ -91,7 +91,7 @@ impl ExecutionGadget for ExtcodecopyGadget { AccountFieldTag::CodeHash, code_hash.to_word(), ); - let not_exists = IsZeroWordGadget::construct(cb, &code_hash.to_word()); + let not_exists = cb.is_zero_word(&code_hash.to_word()); let exists = not::expr(not_exists.expr()); cb.condition(exists.expr(), |cb| { cb.bytecode_length(code_hash.to_word(), code_size.expr()); @@ -126,7 +126,7 @@ impl ExecutionGadget for ExtcodecopyGadget { cb.copy_table_lookup( code_hash.to_word(), CopyDataType::Bytecode.expr(), - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), src_addr, code_size.expr(), diff --git a/zkevm-circuits/src/evm_circuit/execution/extcodehash.rs b/zkevm-circuits/src/evm_circuit/execution/extcodehash.rs index 226e734893..99cd8b5b6a 100644 --- a/zkevm-circuits/src/evm_circuit/execution/extcodehash.rs +++ b/zkevm-circuits/src/evm_circuit/execution/extcodehash.rs @@ -14,7 +14,7 @@ use crate::{ }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{Word32Cell, WordCell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHiCell}, Expr, }, }; @@ -28,7 +28,7 @@ pub(crate) struct ExtcodehashGadget { tx_id: Cell, reversion_info: ReversionInfo, is_warm: Cell, - code_hash: WordCell, + code_hash: WordLoHiCell, } impl ExecutionGadget for ExtcodehashGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/extcodesize.rs b/zkevm-circuits/src/evm_circuit/execution/extcodesize.rs index ee6d540722..908b1e2b7b 100644 --- a/zkevm-circuits/src/evm_circuit/execution/extcodesize.rs +++ b/zkevm-circuits/src/evm_circuit/execution/extcodesize.rs @@ -16,7 +16,7 @@ use crate::{ }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{Word, Word32Cell, WordCell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -30,8 +30,8 @@ pub(crate) struct ExtcodesizeGadget { reversion_info: ReversionInfo, tx_id: Cell, is_warm: Cell, - code_hash: WordCell, - not_exists: IsZeroWordGadget>, + code_hash: WordLoHiCell, + not_exists: IsZeroWordGadget>, code_size: U64Cell, } @@ -69,7 +69,7 @@ impl ExecutionGadget for ExtcodesizeGadget { AccountFieldTag::CodeHash, code_hash.to_word(), ); - let not_exists = IsZeroWordGadget::construct(cb, &code_hash); + let not_exists = cb.is_zero_word(&code_hash); let exists = not::expr(not_exists.expr()); let code_size = cb.query_u64(); @@ -143,7 +143,7 @@ impl ExecutionGadget for ExtcodesizeGadget { let code_hash = block.get_rws(step, 5).account_codehash_pair().0; self.code_hash.assign_u256(region, offset, code_hash)?; self.not_exists - .assign(region, offset, Word::from(code_hash))?; + .assign(region, offset, WordLoHi::from(code_hash))?; let code_size = block.get_rws(step, 6).stack_value().as_u64(); self.code_size diff --git a/zkevm-circuits/src/evm_circuit/execution/gasprice.rs b/zkevm-circuits/src/evm_circuit/execution/gasprice.rs index cf01885460..53ff2ab71f 100644 --- a/zkevm-circuits/src/evm_circuit/execution/gasprice.rs +++ b/zkevm-circuits/src/evm_circuit/execution/gasprice.rs @@ -11,7 +11,7 @@ use crate::{ }, table::{CallContextFieldTag, TxContextFieldTag}, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -22,7 +22,7 @@ use halo2_proofs::{circuit::Value, plonk::Error}; #[derive(Clone, Debug)] pub(crate) struct GasPriceGadget { tx_id: Cell, - gas_price: WordCell, + gas_price: WordLoHiCell, same_context: SameContextGadget, } diff --git a/zkevm-circuits/src/evm_circuit/execution/invalid_tx.rs b/zkevm-circuits/src/evm_circuit/execution/invalid_tx.rs index 69a50a0de0..1100175592 100644 --- a/zkevm-circuits/src/evm_circuit/execution/invalid_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/invalid_tx.rs @@ -7,12 +7,12 @@ use crate::{ constraint_builder::{ConstrainBuilderCommon, EVMConstraintBuilder}, math_gadget::{IsEqualGadget, LtGadget, LtWordGadget}, tx::{BeginTxHelperGadget, EndTxHelperGadget, TxDataGadget}, - CachedRegion, Cell, StepRws, Word, + CachedRegion, Cell, StepRws, }, witness::{Block, Call, ExecStep, Transaction}, }, table::AccountFieldTag, - util::word::{Word32Cell, WordExpr}, + util::word::{Word32Cell, WordExpr, WordLoHi}, }; use eth_types::{Field, ToScalar}; use gadgets::util::{not, or, Expr, Scalar}; @@ -45,9 +45,9 @@ impl ExecutionGadget for InvalidTxGadget { cb.account_read( tx.caller_address.to_word(), AccountFieldTag::Nonce, - Word::from_lo_unchecked(account_nonce.expr()), + WordLoHi::from_lo_unchecked(account_nonce.expr()), ); - let is_nonce_match = IsEqualGadget::construct(cb, account_nonce.expr(), tx.nonce.expr()); + let is_nonce_match = cb.is_eq(account_nonce.expr(), tx.nonce.expr()); // Check if the gas limit is larger or equal to the intrinsic gas cost let insufficient_gas_limit = @@ -60,8 +60,7 @@ impl ExecutionGadget for InvalidTxGadget { AccountFieldTag::Balance, balance.to_word(), ); - let insufficient_balance = - LtWordGadget::construct(cb, &balance.to_word(), &tx.total_cost().to_word()); + let insufficient_balance = cb.is_lt_word(&balance.to_word(), &tx.total_cost().to_word()); // At least one of the invalid conditions needs to be true let invalid_tx = or::expr([ diff --git a/zkevm-circuits/src/evm_circuit/execution/is_zero.rs b/zkevm-circuits/src/evm_circuit/execution/is_zero.rs index ec8b7334e6..c2f52e4100 100644 --- a/zkevm-circuits/src/evm_circuit/execution/is_zero.rs +++ b/zkevm-circuits/src/evm_circuit/execution/is_zero.rs @@ -10,7 +10,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -21,8 +21,8 @@ use halo2_proofs::{circuit::Value, plonk::Error}; #[derive(Clone, Debug)] pub(crate) struct IsZeroGadget { same_context: SameContextGadget, - value: WordCell, - is_zero_word: math_gadget::IsZeroWordGadget>, + value: WordLoHiCell, + is_zero_word: math_gadget::IsZeroWordGadget>, } impl ExecutionGadget for IsZeroGadget { @@ -34,10 +34,10 @@ impl ExecutionGadget for IsZeroGadget { let opcode = cb.query_cell(); let value = cb.query_word_unchecked(); - let is_zero_word = math_gadget::IsZeroWordGadget::construct(cb, &value); + let is_zero_word = cb.is_zero_word(&value); cb.stack_pop(value.to_word()); - cb.stack_push(Word::from_lo_unchecked(is_zero_word.expr())); + cb.stack_push(WordLoHi::from_lo_unchecked(is_zero_word.expr())); // State transition let step_state_transition = StepStateTransition { @@ -70,7 +70,7 @@ impl ExecutionGadget for IsZeroGadget { let value = block.get_rws(step, 0).stack_value(); self.value.assign_u256(region, offset, value)?; self.is_zero_word - .assign_value(region, offset, Value::known(Word::from(value)))?; + .assign_value(region, offset, Value::known(WordLoHi::from(value)))?; Ok(()) } diff --git a/zkevm-circuits/src/evm_circuit/execution/jumpi.rs b/zkevm-circuits/src/evm_circuit/execution/jumpi.rs index 5697e8f0e2..40b9878ea0 100644 --- a/zkevm-circuits/src/evm_circuit/execution/jumpi.rs +++ b/zkevm-circuits/src/evm_circuit/execution/jumpi.rs @@ -15,7 +15,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -26,8 +26,8 @@ use halo2_proofs::{circuit::Value, plonk::Error}; pub(crate) struct JumpiGadget { same_context: SameContextGadget, dest: WordByteRangeGadget, - condition: WordCell, - is_condition_zero: IsZeroWordGadget>, + condition: WordLoHiCell, + is_condition_zero: IsZeroWordGadget>, } impl ExecutionGadget for JumpiGadget { @@ -44,7 +44,7 @@ impl ExecutionGadget for JumpiGadget { cb.stack_pop(condition.to_word()); // Determine if the jump condition is met - let is_condition_zero = IsZeroWordGadget::construct(cb, &condition); + let is_condition_zero = cb.is_zero_word(&condition); let should_jump = 1.expr() - is_condition_zero.expr(); // Lookup opcode at destination when should_jump @@ -100,8 +100,11 @@ impl ExecutionGadget for JumpiGadget { self.dest.assign(region, offset, destination)?; self.condition.assign_u256(region, offset, condition)?; - self.is_condition_zero - .assign_value(region, offset, Value::known(Word::from(condition)))?; + self.is_condition_zero.assign_value( + region, + offset, + Value::known(WordLoHi::from(condition)), + )?; Ok(()) } diff --git a/zkevm-circuits/src/evm_circuit/execution/logs.rs b/zkevm-circuits/src/evm_circuit/execution/logs.rs index 23c63bc0f2..47456bcafc 100644 --- a/zkevm-circuits/src/evm_circuit/execution/logs.rs +++ b/zkevm-circuits/src/evm_circuit/execution/logs.rs @@ -19,7 +19,7 @@ use crate::{ table::{CallContextFieldTag, TxLogFieldTag}, util::{ build_tx_log_expression, - word::{Word, Word32Cell, WordCell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -39,7 +39,7 @@ pub(crate) struct LogGadget { topics: [Word32Cell; 4], topic_selectors: [Cell; 4], - contract_address: WordCell, + contract_address: WordLoHiCell, is_static_call: Cell, is_persistent: Cell, tx_id: Cell, @@ -139,9 +139,9 @@ impl ExecutionGadget for LogGadget { let cond = memory_address.has_length() * is_persistent.expr(); cb.condition(cond.clone(), |cb| { cb.copy_table_lookup( - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), - Word::from_lo_unchecked(tx_id.expr()), + WordLoHi::from_lo_unchecked(tx_id.expr()), CopyDataType::TxLog.expr(), memory_address.offset(), memory_address.address(), diff --git a/zkevm-circuits/src/evm_circuit/execution/memory.rs b/zkevm-circuits/src/evm_circuit/execution/memory.rs index 3aa47184ff..2956730d7f 100644 --- a/zkevm-circuits/src/evm_circuit/execution/memory.rs +++ b/zkevm-circuits/src/evm_circuit/execution/memory.rs @@ -46,9 +46,9 @@ impl ExecutionGadget for MemoryGadget { let value = cb.query_word32(); // Check if this is an MLOAD - let is_mload = IsEqualGadget::construct(cb, opcode.expr(), OpcodeId::MLOAD.expr()); + let is_mload = cb.is_eq(opcode.expr(), OpcodeId::MLOAD.expr()); // Check if this is an MSTORE8 - let is_mstore8 = IsEqualGadget::construct(cb, opcode.expr(), OpcodeId::MSTORE8.expr()); + let is_mstore8 = cb.is_eq(opcode.expr(), OpcodeId::MSTORE8.expr()); // This is an MSTORE/MSTORE8 let is_store = not::expr(is_mload.expr()); // This is an MSTORE/MLOAD diff --git a/zkevm-circuits/src/evm_circuit/execution/msize.rs b/zkevm-circuits/src/evm_circuit/execution/msize.rs index 2c34f0d958..b3c2274b44 100644 --- a/zkevm-circuits/src/evm_circuit/execution/msize.rs +++ b/zkevm-circuits/src/evm_circuit/execution/msize.rs @@ -13,7 +13,7 @@ use crate::{ }, witness::{Block, Call, ExecStep, Transaction}, }, - util::{word::Word, Expr}, + util::{word::WordLoHi, Expr}, }; use bus_mapping::evm::OpcodeId; use eth_types::Field; @@ -42,7 +42,7 @@ impl ExecutionGadget for MsizeGadget { ); // Push the value on the stack - cb.stack_push(Word::from_lo_unchecked(value.expr())); + cb.stack_push(WordLoHi::from_lo_unchecked(value.expr())); // State transition let step_state_transition = StepStateTransition { diff --git a/zkevm-circuits/src/evm_circuit/execution/mul_div_mod.rs b/zkevm-circuits/src/evm_circuit/execution/mul_div_mod.rs index bef4c22c26..19bf5f2735 100644 --- a/zkevm-circuits/src/evm_circuit/execution/mul_div_mod.rs +++ b/zkevm-circuits/src/evm_circuit/execution/mul_div_mod.rs @@ -14,7 +14,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -63,15 +63,15 @@ impl ExecutionGadget for MulDivModGadget { let d = cb.query_word32(); let mul_add_words = MulAddWordsGadget::construct(cb, [&a, &b, &c, &d]); - let divisor_is_zero = IsZeroWordGadget::construct(cb, &b); - let lt_word = LtWordGadget::construct(cb, &c.to_word(), &b.to_word()); + let divisor_is_zero = cb.is_zero_word(&b); + let lt_word = cb.is_lt_word(&c.to_word(), &b.to_word()); // Pop a and b from the stack, push result on the stack // The first pop is multiplier for MUL and dividend for DIV/MOD // The second pop is multiplicand for MUL and divisor for DIV/MOD // The push is product for MUL, quotient for DIV, and residue for MOD // Note that for DIV/MOD, when divisor == 0, the push value is also 0. - cb.stack_pop(Word::select(is_mul.clone(), a.to_word(), d.to_word())); + cb.stack_pop(WordLoHi::select(is_mul.clone(), a.to_word(), d.to_word())); cb.stack_pop(b.to_word()); cb.stack_push( d.to_word() @@ -152,7 +152,8 @@ impl ExecutionGadget for MulDivModGadget { self.words[3].assign_u256(region, offset, d)?; self.mul_add_words.assign(region, offset, [a, b, c, d])?; self.lt_word.assign(region, offset, c, b)?; - self.divisor_is_zero.assign(region, offset, Word::from(b))?; + self.divisor_is_zero + .assign(region, offset, WordLoHi::from(b))?; Ok(()) } } diff --git a/zkevm-circuits/src/evm_circuit/execution/mulmod.rs b/zkevm-circuits/src/evm_circuit/execution/mulmod.rs index 13d23b4bf0..65bf39dd28 100644 --- a/zkevm-circuits/src/evm_circuit/execution/mulmod.rs +++ b/zkevm-circuits/src/evm_circuit/execution/mulmod.rs @@ -14,7 +14,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -60,18 +60,18 @@ impl ExecutionGadget for MulModGadget { let d = cb.query_word32(); let e = cb.query_word32(); - // 1. k1 * n + a_reduced == a + // 1. k1 * n + a_reduced == a let modword = ModGadget::construct(cb, [&a, &n, &a_reduced]); - // 2. a_reduced * b + 0 == d * 2^256 + e + // 2. a_reduced * b + 0 == d * 2^256 + e let mul512_left = MulAddWords512Gadget::construct(cb, [&a_reduced, &b, &d, &e], None); - // 3. k2 * n + r == d * 2^256 + e + // 3. k2 * n + r == d * 2^256 + e let mul512_right = MulAddWords512Gadget::construct(cb, [&k, &n, &d, &e], Some(&r)); // (r < n ) or n == 0 - let n_is_zero = IsZeroWordGadget::construct(cb, &n); - let lt = LtWordGadget::construct(cb, &r.to_word(), &n.to_word()); + let n_is_zero = cb.is_zero_word(&n); + let lt = cb.is_lt_word(&r.to_word(), &n.to_word()); cb.add_constraint( " (1 - (r < n) - (n==0)) ", 1.expr() - lt.expr() - n_is_zero.expr(), @@ -157,7 +157,7 @@ impl ExecutionGadget for MulModGadget { self.lt.assign(region, offset, r, n)?; - self.n_is_zero.assign(region, offset, Word::from(n))?; + self.n_is_zero.assign(region, offset, WordLoHi::from(n))?; Ok(()) } } diff --git a/zkevm-circuits/src/evm_circuit/execution/pop.rs b/zkevm-circuits/src/evm_circuit/execution/pop.rs index bb69d8f13b..59d0ac32dd 100644 --- a/zkevm-circuits/src/evm_circuit/execution/pop.rs +++ b/zkevm-circuits/src/evm_circuit/execution/pop.rs @@ -10,7 +10,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -21,7 +21,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct PopGadget { same_context: SameContextGadget, - value: WordCell, + value: WordLoHiCell, } impl ExecutionGadget for PopGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/push.rs b/zkevm-circuits/src/evm_circuit/execution/push.rs index 2948da9272..d6e95b6552 100644 --- a/zkevm-circuits/src/evm_circuit/execution/push.rs +++ b/zkevm-circuits/src/evm_circuit/execution/push.rs @@ -10,7 +10,7 @@ use crate::{ ConstrainBuilderCommon, EVMConstraintBuilder, StepStateTransition, Transition::Delta, }, - math_gadget::{IsZeroGadget, LtGadget}, + math_gadget::{IsEqualGadget, LtGadget}, not, or, select, sum, CachedRegion, Cell, }, witness::{Block, Call, ExecStep, Transaction}, @@ -27,7 +27,7 @@ use halo2_proofs::{circuit::Value, plonk::Error}; #[derive(Clone, Debug)] pub(crate) struct PushGadget { same_context: SameContextGadget, - is_push0: IsZeroGadget, + is_push0: IsEqualGadget, value: Word32Cell, is_pushed: [Cell; 32], is_padding: [Cell; 32], @@ -42,7 +42,7 @@ impl ExecutionGadget for PushGadget { fn configure(cb: &mut EVMConstraintBuilder) -> Self { let opcode = cb.query_cell(); - let is_push0 = IsZeroGadget::construct(cb, opcode.expr() - OpcodeId::PUSH0.expr()); + let is_push0 = cb.is_eq(opcode.expr(), OpcodeId::PUSH0.expr()); let value = cb.query_word32(); cb.stack_push(value.to_word()); @@ -56,8 +56,7 @@ impl ExecutionGadget for PushGadget { cb.bytecode_length(cb.curr.state.code_hash.to_word(), code_length.expr()); let num_bytes_needed = opcode.expr() - OpcodeId::PUSH0.expr(); - let is_out_of_bound = - LtGadget::construct(cb, code_length_left.expr(), num_bytes_needed.expr()); + let is_out_of_bound = cb.is_lt(code_length_left.expr(), num_bytes_needed.expr()); let num_bytes_padding = select::expr( is_out_of_bound.expr(), num_bytes_needed.expr() - code_length_left.expr(), @@ -170,7 +169,8 @@ impl ExecutionGadget for PushGadget { self.is_push0.assign( region, offset, - F::from(opcode.as_u64() - OpcodeId::PUSH0.as_u64()), + F::from(opcode.as_u64()), + OpcodeId::PUSH0.as_u64().into(), )?; let bytecode = block diff --git a/zkevm-circuits/src/evm_circuit/execution/return_revert.rs b/zkevm-circuits/src/evm_circuit/execution/return_revert.rs index 0df3467253..02a1a5854a 100644 --- a/zkevm-circuits/src/evm_circuit/execution/return_revert.rs +++ b/zkevm-circuits/src/evm_circuit/execution/return_revert.rs @@ -19,7 +19,7 @@ use crate::{ }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{Word, Word32Cell, WordCell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -55,7 +55,7 @@ pub(crate) struct ReturnRevertGadget { code_hash: Word32Cell, caller_id: Cell, - address: WordCell, + address: WordLoHiCell, reversion_info: ReversionInfo, } @@ -92,7 +92,7 @@ impl ExecutionGadget for ReturnRevertGadget { // These are globally defined because they are used across multiple cases. let copy_rw_increase = cb.query_cell(); - let copy_rw_increase_is_zero = IsZeroGadget::construct(cb, copy_rw_increase.expr()); + let copy_rw_increase_is_zero = cb.is_zero(copy_rw_increase.expr()); let memory_expansion = MemoryExpansionGadget::construct(cb, [range.address()]); @@ -137,7 +137,7 @@ impl ExecutionGadget for ReturnRevertGadget { let code_hash = cb.query_word32(); let deployed_code_rlc = cb.query_cell_phase2(); cb.copy_table_lookup( - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), code_hash.to_word(), CopyDataType::Bytecode.expr(), @@ -179,7 +179,7 @@ impl ExecutionGadget for ReturnRevertGadget { cb.call_context_lookup_read( None, CallContextFieldTag::IsPersistent, - Word::from_lo_unchecked(is_success.expr()), + WordLoHi::from_lo_unchecked(is_success.expr()), ); cb.require_step_state_transition(StepStateTransition { program_counter: To(0.expr()), @@ -218,8 +218,7 @@ impl ExecutionGadget for ReturnRevertGadget { CallContextFieldTag::ReturnDataLength, ] .map(|field_tag| cb.call_context(None, field_tag)); - let copy_length = - MinMaxGadget::construct(cb, return_data_length.expr(), range.length()); + let copy_length = cb.min_max(return_data_length.expr(), range.length()); cb.require_equal( "increase rw counter twice for each memory to memory byte copied", copy_length.min() + copy_length.min(), @@ -234,9 +233,9 @@ impl ExecutionGadget for ReturnRevertGadget { * not::expr(copy_rw_increase_is_zero.expr()), |cb| { cb.copy_table_lookup( - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), - Word::from_lo_unchecked(cb.next.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.next.state.call_id.expr()), CopyDataType::Memory.expr(), range.offset(), range.address(), diff --git a/zkevm-circuits/src/evm_circuit/execution/returndatacopy.rs b/zkevm-circuits/src/evm_circuit/execution/returndatacopy.rs index 615736859e..d84d324046 100644 --- a/zkevm-circuits/src/evm_circuit/execution/returndatacopy.rs +++ b/zkevm-circuits/src/evm_circuit/execution/returndatacopy.rs @@ -20,7 +20,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, WordExpr}, + word::{WordExpr, WordLoHi}, Expr, }, }; @@ -71,8 +71,8 @@ impl ExecutionGadget for ReturnDataCopyGadget { // 1. Pop dest_offset, offset, length from stack cb.stack_pop(dest_offset.to_word()); - cb.stack_pop(Word::from_lo_unchecked(data_offset.expr())); - cb.stack_pop(Word::from_lo_unchecked(size.expr())); + cb.stack_pop(WordLoHi::from_lo_unchecked(data_offset.expr())); + cb.stack_pop(WordLoHi::from_lo_unchecked(size.expr())); // 2. Add lookup constraint in the call context for the returndatacopy field. let last_callee_id = cb.query_cell(); @@ -81,17 +81,17 @@ impl ExecutionGadget for ReturnDataCopyGadget { cb.call_context_lookup_read( None, CallContextFieldTag::LastCalleeId, - Word::from_lo_unchecked(last_callee_id.expr()), + WordLoHi::from_lo_unchecked(last_callee_id.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::LastCalleeReturnDataOffset, - Word::from_lo_unchecked(return_data_offset.expr()), + WordLoHi::from_lo_unchecked(return_data_offset.expr()), ); cb.call_context_lookup_read( None, CallContextFieldTag::LastCalleeReturnDataLength, - Word::from_lo_unchecked(return_data_size.expr()), + WordLoHi::from_lo_unchecked(return_data_size.expr()), ); // 3. contraints for copy: copy overflow check @@ -118,9 +118,9 @@ impl ExecutionGadget for ReturnDataCopyGadget { let copy_rwc_inc = cb.query_cell(); cb.condition(dst_memory_addr.has_length(), |cb| { cb.copy_table_lookup( - Word::from_lo_unchecked(last_callee_id.expr()), + WordLoHi::from_lo_unchecked(last_callee_id.expr()), CopyDataType::Memory.expr(), - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), return_data_offset.expr() + data_offset.expr(), return_data_offset.expr() + return_data_size.expr(), diff --git a/zkevm-circuits/src/evm_circuit/execution/returndatasize.rs b/zkevm-circuits/src/evm_circuit/execution/returndatasize.rs index 14144d3aec..dfd410e684 100644 --- a/zkevm-circuits/src/evm_circuit/execution/returndatasize.rs +++ b/zkevm-circuits/src/evm_circuit/execution/returndatasize.rs @@ -11,7 +11,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -22,7 +22,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct ReturnDataSizeGadget { same_context: SameContextGadget, - return_data_size: WordCell, + return_data_size: WordLoHiCell, } impl ExecutionGadget for ReturnDataSizeGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/sar.rs b/zkevm-circuits/src/evm_circuit/execution/sar.rs index 9cfb4ac939..fd09750a16 100644 --- a/zkevm-circuits/src/evm_circuit/execution/sar.rs +++ b/zkevm-circuits/src/evm_circuit/execution/sar.rs @@ -99,8 +99,8 @@ impl ExecutionGadget for SarGadget { let p_lo = cb.query_cell(); let p_hi = cb.query_cell(); let p_top = cb.query_cell(); - let is_neg = LtGadget::construct(cb, 127.expr(), a.limbs[31].expr()); - let shf_lt256 = IsZeroGadget::construct(cb, sum::expr(&shift.limbs[1..32])); + let is_neg = cb.is_lt(127.expr(), a.limbs[31].expr()); + let shf_lt256 = cb.is_zero(sum::expr(&shift.limbs[1..32])); for idx in 0..4 { cb.require_equal( @@ -112,23 +112,23 @@ impl ExecutionGadget for SarGadget { // Constrain `a64s_lo[idx] < p_lo`. let a64s_lo_lt_p_lo = array_init(|idx| { - let lt = LtGadget::construct(cb, a64s_lo[idx].expr(), p_lo.expr()); + let lt = cb.is_lt(a64s_lo[idx].expr(), p_lo.expr()); cb.require_zero("a64s_lo[idx] < p_lo", 1.expr() - lt.expr()); lt }); // Constrain `a64s_hi[idx] < p_hi`. let a64s_hi_lt_p_hi = array_init(|idx| { - let lt = LtGadget::construct(cb, a64s_hi[idx].expr(), p_hi.expr()); + let lt = cb.is_lt(a64s_hi[idx].expr(), p_hi.expr()); cb.require_zero("a64s_hi[idx] < p_hi", 1.expr() - lt.expr()); lt }); // Merge contraints - let shf_lo_div64_eq0 = IsZeroGadget::construct(cb, shf_div64.expr()); - let shf_lo_div64_eq1 = IsEqualGadget::construct(cb, shf_div64.expr(), 1.expr()); - let shf_lo_div64_eq2 = IsEqualGadget::construct(cb, shf_div64.expr(), 2.expr()); - let shf_lo_div64_eq3 = IsEqualGadget::construct(cb, shf_div64.expr(), 3.expr()); + let shf_lo_div64_eq0 = cb.is_zero(shf_div64.expr()); + let shf_lo_div64_eq1 = cb.is_eq(shf_div64.expr(), 1.expr()); + let shf_lo_div64_eq2 = cb.is_eq(shf_div64.expr(), 2.expr()); + let shf_lo_div64_eq3 = cb.is_eq(shf_div64.expr(), 3.expr()); let shf_div64_eq0 = shf_lt256.expr() * shf_lo_div64_eq0.expr(); let shf_div64_eq1 = shf_lt256.expr() * shf_lo_div64_eq1.expr(); let shf_div64_eq2 = shf_lt256.expr() * shf_lo_div64_eq2.expr(); @@ -179,9 +179,9 @@ impl ExecutionGadget for SarGadget { ); // Shift constraint - let shf_div64_lt_4 = LtGadget::construct(cb, shf_div64.expr(), 4.expr()); + let shf_div64_lt_4 = cb.is_lt(shf_div64.expr(), 4.expr()); cb.require_equal("shf_div64 < 4", shf_div64_lt_4.expr(), 1.expr()); - let shf_mod64_lt_64 = LtGadget::construct(cb, shf_mod64.expr(), 64.expr()); + let shf_mod64_lt_64 = cb.is_lt(shf_mod64.expr(), 64.expr()); cb.require_equal("shf_mod64 < 64", shf_mod64_lt_64.expr(), 1.expr()); cb.require_equal( "shift[0] == shf_mod64 + shf_div64 * 64", diff --git a/zkevm-circuits/src/evm_circuit/execution/sdiv_smod.rs b/zkevm-circuits/src/evm_circuit/execution/sdiv_smod.rs index 02866e7cb4..b6779c420f 100644 --- a/zkevm-circuits/src/evm_circuit/execution/sdiv_smod.rs +++ b/zkevm-circuits/src/evm_circuit/execution/sdiv_smod.rs @@ -16,7 +16,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -52,13 +52,13 @@ impl ExecutionGadget for SignedDivModGadget { let divisor_abs = AbsWordGadget::construct(cb); let remainder_abs = AbsWordGadget::construct(cb); let dividend_abs = AbsWordGadget::construct(cb); - let quotient_is_zero = IsZeroWordGadget::construct(cb, quotient_abs.x()); - let divisor_is_zero = IsZeroWordGadget::construct(cb, divisor_abs.x()); - let remainder_is_zero = IsZeroWordGadget::construct(cb, remainder_abs.x()); + let quotient_is_zero = cb.is_zero_word(quotient_abs.x()); + let divisor_is_zero = cb.is_zero_word(divisor_abs.x()); + let remainder_is_zero = cb.is_zero_word(remainder_abs.x()); cb.stack_pop(dividend_abs.x().to_word()); cb.stack_pop(divisor_abs.x().to_word()); - cb.stack_push(Word::select( + cb.stack_push(WordLoHi::select( is_sdiv, quotient_abs .x() @@ -109,7 +109,7 @@ impl ExecutionGadget for SignedDivModGadget { // `sign(dividend) == sign(divisor) ^ sign(quotient)` cannot be applied // for this case. let dividend_is_signed_overflow = - LtGadget::construct(cb, 127.expr(), dividend_abs.x_abs().limbs[31].expr()); + cb.is_lt(127.expr(), dividend_abs.x_abs().limbs[31].expr()); // Constrain sign(dividend) == sign(divisor) ^ sign(quotient) when both // quotient and divisor are non-zero and dividend is not signed overflow. @@ -218,11 +218,11 @@ impl ExecutionGadget for SignedDivModGadget { u64::from(dividend_abs.to_le_bytes()[31]).into(), )?; self.quotient_is_zero - .assign(region, offset, Word::from(quotient))?; + .assign(region, offset, WordLoHi::from(quotient))?; self.divisor_is_zero - .assign(region, offset, Word::from(divisor))?; + .assign(region, offset, WordLoHi::from(divisor))?; self.remainder_is_zero - .assign(region, offset, Word::from(remainder))?; + .assign(region, offset, WordLoHi::from(remainder))?; Ok(()) } } diff --git a/zkevm-circuits/src/evm_circuit/execution/selfbalance.rs b/zkevm-circuits/src/evm_circuit/execution/selfbalance.rs index a222299ca0..f6ec95b612 100644 --- a/zkevm-circuits/src/evm_circuit/execution/selfbalance.rs +++ b/zkevm-circuits/src/evm_circuit/execution/selfbalance.rs @@ -11,7 +11,7 @@ use crate::{ }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -22,8 +22,8 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct SelfbalanceGadget { same_context: SameContextGadget, - callee_address: WordCell, - self_balance: WordCell, + callee_address: WordLoHiCell, + self_balance: WordLoHiCell, } impl ExecutionGadget for SelfbalanceGadget { diff --git a/zkevm-circuits/src/evm_circuit/execution/sha3.rs b/zkevm-circuits/src/evm_circuit/execution/sha3.rs index adffa2acbf..12cbac2ee4 100644 --- a/zkevm-circuits/src/evm_circuit/execution/sha3.rs +++ b/zkevm-circuits/src/evm_circuit/execution/sha3.rs @@ -20,7 +20,7 @@ use crate::{ }, witness::{Block, Call, ExecStep, Transaction}, }, - util::word::{Word, WordCell, WordExpr}, + util::word::{WordExpr, WordLoHi, WordLoHiCell}, }; use super::ExecutionGadget; @@ -29,7 +29,7 @@ use super::ExecutionGadget; pub(crate) struct Sha3Gadget { same_context: SameContextGadget, memory_address: MemoryAddressGadget, - sha3_digest: WordCell, + sha3_digest: WordLoHiCell, copy_rwc_inc: Cell, rlc_acc: Cell, memory_expansion: MemoryExpansionGadget, @@ -59,9 +59,9 @@ impl ExecutionGadget for Sha3Gadget { cb.condition(memory_address.has_length(), |cb| { cb.copy_table_lookup( - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::Memory.expr(), - Word::from_lo_unchecked(cb.curr.state.call_id.expr()), + WordLoHi::from_lo_unchecked(cb.curr.state.call_id.expr()), CopyDataType::RlcAcc.expr(), memory_address.offset(), memory_address.address(), diff --git a/zkevm-circuits/src/evm_circuit/execution/shl_shr.rs b/zkevm-circuits/src/evm_circuit/execution/shl_shr.rs index 60bf8622c2..5dba3de3e4 100644 --- a/zkevm-circuits/src/evm_circuit/execution/shl_shr.rs +++ b/zkevm-circuits/src/evm_circuit/execution/shl_shr.rs @@ -15,7 +15,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -69,11 +69,10 @@ impl ExecutionGadget for ShlShrGadget { let mul_add_words = MulAddWordsGadget::construct(cb, ["ient, &divisor, &remainder, ÷nd]); - let shf_lt256 = IsZeroGadget::construct(cb, sum::expr(&shift.limbs[1..32])); - let divisor_is_zero = IsZeroWordGadget::construct(cb, &divisor); - let remainder_is_zero = IsZeroWordGadget::construct(cb, &remainder); - let remainder_lt_divisor = - LtWordGadget::construct(cb, &remainder.to_word(), &divisor.to_word()); + let shf_lt256 = cb.is_zero(sum::expr(&shift.limbs[1..32])); + let divisor_is_zero = cb.is_zero_word(&divisor); + let remainder_is_zero = cb.is_zero_word(&remainder); + let remainder_lt_divisor = cb.is_lt_word(&remainder.to_word(), &divisor.to_word()); // Constrain stack pops and pushes as: // - for SHL, two pops are shift and quotient, and push is dividend. @@ -102,7 +101,7 @@ impl ExecutionGadget for ShlShrGadget { "shift == shift.cells[0] when divisor != 0", shift .to_word() - .sub_unchecked(Word::from_lo_unchecked(shift.limbs[0].expr())) + .sub_unchecked(WordLoHi::from_lo_unchecked(shift.limbs[0].expr())) .mul_selector(1.expr() - divisor_is_zero.expr()), ); @@ -180,9 +179,7 @@ impl ExecutionGadget for ShlShrGadget { let shf_lt256 = pop1 .to_le_bytes() .iter() - .fold(Some(0_u64), |acc, val| { - acc.and_then(|acc| acc.checked_add(u64::from(*val))) - }) + .try_fold(0u64, |acc, val| acc.checked_add(u64::from(*val))) .unwrap() - shf0; let divisor = if shf_lt256 == 0 { @@ -207,9 +204,9 @@ impl ExecutionGadget for ShlShrGadget { .assign(region, offset, [quotient, divisor, remainder, dividend])?; self.shf_lt256.assign(region, offset, F::from(shf_lt256))?; self.divisor_is_zero - .assign(region, offset, Word::from(divisor))?; + .assign(region, offset, WordLoHi::from(divisor))?; self.remainder_is_zero - .assign(region, offset, Word::from(remainder))?; + .assign(region, offset, WordLoHi::from(remainder))?; self.remainder_lt_divisor .assign(region, offset, remainder, divisor)?; Ok(()) diff --git a/zkevm-circuits/src/evm_circuit/execution/signed_comparator.rs b/zkevm-circuits/src/evm_circuit/execution/signed_comparator.rs index 3f910d10fa..2211fa90d5 100644 --- a/zkevm-circuits/src/evm_circuit/execution/signed_comparator.rs +++ b/zkevm-circuits/src/evm_circuit/execution/signed_comparator.rs @@ -12,7 +12,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{Word, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -51,7 +51,7 @@ impl ExecutionGadget for SignedComparatorGadget { // The Signed Comparator gadget is used for both opcodes SLT and SGT. // Depending on whether the opcode is SLT or SGT, we // swap the order in which the inputs are placed on the stack. - let is_sgt = IsEqualGadget::construct(cb, opcode.expr(), OpcodeId::SGT.expr()); + let is_sgt = cb.is_eq(opcode.expr(), OpcodeId::SGT.expr()); // Both a and b are to be treated as two's complement signed 256-bit // (32 cells) integers. This means, the first bit denotes the sign @@ -59,8 +59,8 @@ impl ExecutionGadget for SignedComparatorGadget { // number is negative if the most significant cell >= 128 // (0b10000000). a and b being in the little-endian notation, the // most-significant byte is the last byte. - let sign_check_a = LtGadget::construct(cb, a.limbs[31].expr(), 128.expr()); - let sign_check_b = LtGadget::construct(cb, b.limbs[31].expr(), 128.expr()); + let sign_check_a = cb.is_lt(a.limbs[31].expr(), 128.expr()); + let sign_check_b = cb.is_lt(b.limbs[31].expr(), 128.expr()); // sign_check_a_lt expression implies a is positive since its MSB < 2**7 // sign_check_b_lt expression implies b is positive since its MSB < 2**7 @@ -77,7 +77,7 @@ impl ExecutionGadget for SignedComparatorGadget { // b_hi) && (a_lo < b_lo))) let (a_lo, a_hi) = a.to_word().to_lo_hi(); let (b_lo, b_hi) = b.to_word().to_lo_hi(); - let lt_lo = LtGadget::construct(cb, a_lo, b_lo); + let lt_lo = cb.is_lt(a_lo, b_lo); let comparison_hi = ComparisonGadget::construct(cb, a_hi, b_hi); let a_lt_b_lo = lt_lo.expr(); let (a_lt_b_hi, a_eq_b_hi) = comparison_hi.expr(); @@ -109,9 +109,9 @@ impl ExecutionGadget for SignedComparatorGadget { let result = a_neg_b_pos.clone() + (1.expr() - a_neg_b_pos - b_neg_a_pos) * a_lt_b.expr(); // Pop a and b from the stack, push the result on the stack. - cb.stack_pop(Word::select(is_sgt.expr(), b.to_word(), a.to_word())); - cb.stack_pop(Word::select(is_sgt.expr(), a.to_word(), b.to_word())); - cb.stack_push(Word::from_lo_unchecked(result)); + cb.stack_pop(WordLoHi::select(is_sgt.expr(), b.to_word(), a.to_word())); + cb.stack_pop(WordLoHi::select(is_sgt.expr(), a.to_word(), b.to_word())); + cb.stack_push(WordLoHi::from_lo_unchecked(result)); // The read-write counter changes by three since we're reading two words // from stack and writing one. The program counter shifts only by one diff --git a/zkevm-circuits/src/evm_circuit/execution/signextend.rs b/zkevm-circuits/src/evm_circuit/execution/signextend.rs index fbf48b3d2c..faec033ad9 100644 --- a/zkevm-circuits/src/evm_circuit/execution/signextend.rs +++ b/zkevm-circuits/src/evm_circuit/execution/signextend.rs @@ -52,12 +52,11 @@ impl ExecutionGadget for SignextendGadget { // need to do any changes. So just sum all the non-LSB byte // values here and then check if it's non-zero so we can use // that as an additional condition to enable the selector. - let is_msb_sum_zero = IsZeroGadget::construct(cb, sum::expr(&index.limbs[1..32])); + let is_msb_sum_zero = cb.is_zero(sum::expr(&index.limbs[1..32])); // Check if this byte is selected looking only at the LSB of the index // word - let is_byte_selected = - array_init(|idx| IsEqualGadget::construct(cb, index.limbs[0].expr(), idx.expr())); + let is_byte_selected = array_init(|idx| cb.is_eq(index.limbs[0].expr(), idx.expr())); // We need to find the byte we have to get the sign from so we can // extend correctly. We go byte by byte and check if `idx == @@ -281,7 +280,7 @@ mod test { let pos_extend = 0u8; let neg_extend = 0xFFu8; - for (value, byte_extend) in vec![(pos_value, pos_extend), (neg_value, neg_extend)].iter() { + for (value, byte_extend) in [(pos_value, pos_extend), (neg_value, neg_extend)].iter() { for idx in 0..33 { test_ok( (idx as u64).into(), diff --git a/zkevm-circuits/src/evm_circuit/execution/sload.rs b/zkevm-circuits/src/evm_circuit/execution/sload.rs index 12ee777aa6..7a222c9b44 100644 --- a/zkevm-circuits/src/evm_circuit/execution/sload.rs +++ b/zkevm-circuits/src/evm_circuit/execution/sload.rs @@ -13,7 +13,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, WordCell, WordExpr}, + word::{WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -25,10 +25,10 @@ pub(crate) struct SloadGadget { same_context: SameContextGadget, tx_id: Cell, reversion_info: ReversionInfo, - callee_address: WordCell, - key: WordCell, - value: WordCell, - committed_value: WordCell, + callee_address: WordLoHiCell, + key: WordLoHiCell, + value: WordLoHiCell, + committed_value: WordLoHiCell, is_warm: Cell, } @@ -65,14 +65,14 @@ impl ExecutionGadget for SloadGadget { tx_id.expr(), callee_address.to_word(), key.to_word(), - Word::from_lo_unchecked(is_warm.expr()), + WordLoHi::from_lo_unchecked(is_warm.expr()), ); cb.account_storage_access_list_write( tx_id.expr(), callee_address.to_word(), key.to_word(), - Word::from_lo_unchecked(true.expr()), - Word::from_lo_unchecked(is_warm.expr()), + WordLoHi::from_lo_unchecked(true.expr()), + WordLoHi::from_lo_unchecked(is_warm.expr()), Some(&mut reversion_info), ); diff --git a/zkevm-circuits/src/evm_circuit/execution/sstore.rs b/zkevm-circuits/src/evm_circuit/execution/sstore.rs index fe1fd45f0b..ebcb7b52db 100644 --- a/zkevm-circuits/src/evm_circuit/execution/sstore.rs +++ b/zkevm-circuits/src/evm_circuit/execution/sstore.rs @@ -16,7 +16,7 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, Word32Cell, WordCell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, }; @@ -33,7 +33,7 @@ pub(crate) struct SstoreGadget { tx_id: Cell, is_static: Cell, reversion_info: ReversionInfo, - callee_address: WordCell, + callee_address: WordLoHiCell, key: Word32Cell, value: Word32Cell, value_prev: Word32Cell, @@ -88,14 +88,14 @@ impl ExecutionGadget for SstoreGadget { tx_id.expr(), callee_address.to_word(), key.to_word(), - Word::from_lo_unchecked(is_warm.expr()), + WordLoHi::from_lo_unchecked(is_warm.expr()), ); cb.account_storage_access_list_write( tx_id.expr(), callee_address.to_word(), key.to_word(), - Word::from_lo_unchecked(true.expr()), - Word::from_lo_unchecked(is_warm.expr()), + WordLoHi::from_lo_unchecked(true.expr()), + WordLoHi::from_lo_unchecked(is_warm.expr()), Some(&mut reversion_info), ); @@ -129,7 +129,7 @@ impl ExecutionGadget for SstoreGadget { ); cb.tx_refund_write( tx_id.expr(), - Word::from_lo_unchecked(tx_refund.expr()), + WordLoHi::from_lo_unchecked(tx_refund.expr()), tx_refund_prev.to_word(), Some(&mut reversion_info), ); @@ -231,12 +231,13 @@ impl ExecutionGadget for SstoreGadget { pub(crate) struct SstoreTxRefundGadget { tx_refund_old: U64Cell, tx_refund_new: Expression, - value_prev_is_zero_gadget: IsZeroWordGadget>>, - value_is_zero_gadget: IsZeroWordGadget>>, - original_is_zero_gadget: IsZeroWordGadget>>, - original_eq_value_gadget: IsEqualWordGadget>, Word>>, - prev_eq_value_gadget: IsEqualWordGadget>, Word>>, - original_eq_prev_gadget: IsEqualWordGadget>, Word>>, + value_prev_is_zero_gadget: IsZeroWordGadget>>, + value_is_zero_gadget: IsZeroWordGadget>>, + original_is_zero_gadget: IsZeroWordGadget>>, + original_eq_value_gadget: + IsEqualWordGadget>, WordLoHi>>, + prev_eq_value_gadget: IsEqualWordGadget>, WordLoHi>>, + original_eq_prev_gadget: IsEqualWordGadget>, WordLoHi>>, } impl SstoreTxRefundGadget { @@ -247,16 +248,14 @@ impl SstoreTxRefundGadget { value_prev: T, original_value: T, ) -> Self { - let value_prev_is_zero_gadget = IsZeroWordGadget::construct(cb, &value_prev.to_word()); - let value_is_zero_gadget = IsZeroWordGadget::construct(cb, &value.to_word()); - let original_is_zero_gadget = IsZeroWordGadget::construct(cb, &original_value.to_word()); - - let original_eq_value_gadget = - IsEqualWordGadget::construct(cb, &original_value.to_word(), &value.to_word()); - let prev_eq_value_gadget = - IsEqualWordGadget::construct(cb, &value_prev.to_word(), &value.to_word()); + let value_prev_is_zero_gadget = cb.is_zero_word(&value_prev.to_word()); + let value_is_zero_gadget = cb.is_zero_word(&value.to_word()); + let original_is_zero_gadget = cb.is_zero_word(&original_value.to_word()); + + let original_eq_value_gadget = cb.is_eq_word(&original_value.to_word(), &value.to_word()); + let prev_eq_value_gadget = cb.is_eq_word(&value_prev.to_word(), &value.to_word()); let original_eq_prev_gadget = - IsEqualWordGadget::construct(cb, &original_value.to_word(), &value_prev.to_word()); + cb.is_eq_word(&original_value.to_word(), &value_prev.to_word()); let value_prev_is_zero = value_prev_is_zero_gadget.expr(); let value_is_zero = value_is_zero_gadget.expr(); @@ -267,20 +266,20 @@ impl SstoreTxRefundGadget { let original_eq_prev = original_eq_prev_gadget.expr(); // (value_prev != value) && (original_value != value) && (value == - // Word::from(0)) + // WordLoHi::from(0)) let delete_slot = not::expr(prev_eq_value.clone()) * not::expr(original_is_zero.clone()) * value_is_zero; // (value_prev != value) && (original_value == value) && (original_value != - // Word::from(0)) + // WordLoHi::from(0)) let reset_existing = not::expr(prev_eq_value.clone()) * original_eq_value.clone() * not::expr(original_is_zero.clone()); // (value_prev != value) && (original_value == value) && (original_value == - // Word::from(0)) + // WordLoHi::from(0)) let reset_inexistent = not::expr(prev_eq_value.clone()) * original_eq_value * (original_is_zero); // (value_prev != value) && (original_value != value_prev) && (value_prev == - // Word::from(0)) + // WordLoHi::from(0)) let recreate_slot = not::expr(prev_eq_value) * not::expr(original_eq_prev) * (value_prev_is_zero); @@ -321,28 +320,28 @@ impl SstoreTxRefundGadget { self.tx_refund_old .assign(region, offset, Some(tx_refund_old.to_le_bytes()))?; self.value_prev_is_zero_gadget - .assign(region, offset, Word::from(value_prev))?; + .assign(region, offset, WordLoHi::from(value_prev))?; self.value_is_zero_gadget - .assign(region, offset, Word::from(value))?; + .assign(region, offset, WordLoHi::from(value))?; self.original_is_zero_gadget - .assign(region, offset, Word::from(original_value))?; + .assign(region, offset, WordLoHi::from(original_value))?; self.original_eq_value_gadget.assign( region, offset, - Word::from(original_value), - Word::from(value), + WordLoHi::from(original_value), + WordLoHi::from(value), )?; self.prev_eq_value_gadget.assign( region, offset, - Word::from(value_prev), - Word::from(value), + WordLoHi::from(value_prev), + WordLoHi::from(value), )?; self.original_eq_prev_gadget.assign( region, offset, - Word::from(original_value), - Word::from(value_prev), + WordLoHi::from(original_value), + WordLoHi::from(value_prev), )?; debug_assert_eq!( calc_expected_tx_refund(tx_refund_old, value, value_prev, original_value), diff --git a/zkevm-circuits/src/evm_circuit/execution/stop.rs b/zkevm-circuits/src/evm_circuit/execution/stop.rs index 26b35745b6..8ce8ca02ec 100644 --- a/zkevm-circuits/src/evm_circuit/execution/stop.rs +++ b/zkevm-circuits/src/evm_circuit/execution/stop.rs @@ -16,12 +16,12 @@ use crate::{ }, table::CallContextFieldTag, util::{ - word::{Word, WordExpr}, + word::{WordExpr, WordLoHi}, Expr, }, }; use bus_mapping::evm::OpcodeId; -use eth_types::Field; +use eth_types::{Field, OpsIdentity}; use halo2_proofs::{circuit::Value, plonk::Error}; #[derive(Clone, Debug)] @@ -63,7 +63,7 @@ impl ExecutionGadget for StopGadget { ); // Call ends with STOP must be successful - cb.call_context_lookup_read(None, CallContextFieldTag::IsSuccess, Word::one()); + cb.call_context_lookup_read(None, CallContextFieldTag::IsSuccess, WordLoHi::one()); let is_to_end_tx = cb.next.execution_state_selector([ExecutionState::EndTx]); cb.require_equal( diff --git a/zkevm-circuits/src/evm_circuit/execution/swap.rs b/zkevm-circuits/src/evm_circuit/execution/swap.rs index b9722f6e45..5bbd27df22 100644 --- a/zkevm-circuits/src/evm_circuit/execution/swap.rs +++ b/zkevm-circuits/src/evm_circuit/execution/swap.rs @@ -10,7 +10,7 @@ use crate::{ witness::{Block, Call, ExecStep, Transaction}, }, util::{ - word::{WordCell, WordExpr}, + word::{WordExpr, WordLoHiCell}, Expr, }, }; @@ -20,7 +20,7 @@ use halo2_proofs::plonk::Error; #[derive(Clone, Debug)] pub(crate) struct SwapGadget { same_context: SameContextGadget, - values: [WordCell; 2], + values: [WordLoHiCell; 2], } impl ExecutionGadget for SwapGadget { diff --git a/zkevm-circuits/src/evm_circuit/step.rs b/zkevm-circuits/src/evm_circuit/step.rs index 35c49fed03..85deb21ba6 100644 --- a/zkevm-circuits/src/evm_circuit/step.rs +++ b/zkevm-circuits/src/evm_circuit/step.rs @@ -14,7 +14,7 @@ use crate::{ }, util::{ cell_manager::{CMFixedWidthStrategy, CellManager}, - word::{Word, WordCell}, + word::{WordLoHi, WordLoHiCell}, Expr, }, }; @@ -29,7 +29,7 @@ use halo2_proofs::{ circuit::Value, plonk::{Advice, Column, ConstraintSystem, Error, Expression}, }; -use std::{fmt::Display, iter}; +use std::{fmt::Display, iter, marker::ConstParamTy}; use strum::IntoEnumIterator; use strum_macros::EnumIter; @@ -50,7 +50,7 @@ impl From for ExecutionState { } #[allow(non_camel_case_types, missing_docs)] -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, EnumIter)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, EnumIter, ConstParamTy)] /// All the possible execution states that the computation of EVM can arrive. /// Some states are shared by multiple opcodes. pub enum ExecutionState { @@ -751,7 +751,7 @@ pub(crate) struct StepState { /// In the case of a contract creation internal call, this denotes the hash /// of the chunk of bytes from caller's memory that represent the /// contract init code. - pub(crate) code_hash: WordCell, + pub(crate) code_hash: WordLoHiCell, /// The program counter pub(crate) program_counter: Cell, /// The stack pointer @@ -795,7 +795,7 @@ impl Step { call_id: cell_manager.query_cell(meta, CellType::StoragePhase1), is_root: cell_manager.query_cell(meta, CellType::StoragePhase1), is_create: cell_manager.query_cell(meta, CellType::StoragePhase1), - code_hash: Word::new([ + code_hash: WordLoHi::new([ cell_manager.query_cell(meta, CellType::StoragePhase1), cell_manager.query_cell(meta, CellType::StoragePhase1), ]), diff --git a/zkevm-circuits/src/evm_circuit/table.rs b/zkevm-circuits/src/evm_circuit/table.rs index aa21b4ae77..fec37c84be 100644 --- a/zkevm-circuits/src/evm_circuit/table.rs +++ b/zkevm-circuits/src/evm_circuit/table.rs @@ -3,7 +3,7 @@ use crate::{ evm_circuit::step::{ExecutionState, ResponsibleOp}, impl_expr, - util::word::Word, + util::word::WordLoHi, }; use bus_mapping::{evm::OpcodeId, precompile::PrecompileCalls}; use eth_types::Field; @@ -209,13 +209,13 @@ pub(crate) struct RwValues { /// the cell value of the [`bus_mapping::operation::Target`] field_tag: Expression, /// Storage key of two limbs - storage_key: Word>, + storage_key: WordLoHi>, /// The current storage value - value: Word>, + value: WordLoHi>, /// The previous storage value - value_prev: Word>, + value_prev: WordLoHi>, /// The initial storage value before the current transaction - init_val: Word>, + init_val: WordLoHi>, } impl RwValues { @@ -225,10 +225,10 @@ impl RwValues { id: Expression, address: Expression, field_tag: Expression, - storage_key: Word>, - value: Word>, - value_prev: Word>, - init_val: Word>, + storage_key: WordLoHi>, + value: WordLoHi>, + value_prev: WordLoHi>, + init_val: WordLoHi>, ) -> Self { Self { id, @@ -271,7 +271,7 @@ pub(crate) enum Lookup { /// field_tag is Calldata, otherwise should be set to 0. index: Expression, /// Value of the field. - value: Word>, + value: WordLoHi>, }, /// Lookup to read-write table, which contains read-write access records of /// time-aware data. @@ -291,7 +291,7 @@ pub(crate) enum Lookup { /// contract code. Bytecode { /// Hash to specify which code to read. - hash: Word>, + hash: WordLoHi>, /// Tag to specify whether its the bytecode length or byte value in the /// bytecode. tag: Expression, @@ -311,18 +311,18 @@ pub(crate) enum Lookup { /// should be set to 0. number: Expression, /// Value of the field. - value: Word>, + value: WordLoHi>, }, /// Lookup to copy table. CopyTable { /// Whether the row is the first row of the copy event. is_first: Expression, /// The source ID for the copy event. - src_id: Word>, + src_id: WordLoHi>, /// The source tag for the copy event. src_tag: Expression, /// The destination ID for the copy event. - dst_id: Word>, + dst_id: WordLoHi>, /// The destination tag for the copy event. dst_tag: Expression, /// The source address where bytes are copied from. @@ -351,7 +351,7 @@ pub(crate) enum Lookup { input_len: Expression, /// Output (hash) until this state. hash will be split into multiple expression in little /// endian. - output: Word>, + output: WordLoHi>, }, /// Lookup to exponentiation table. ExpTable { diff --git a/zkevm-circuits/src/evm_circuit/util.rs b/zkevm-circuits/src/evm_circuit/util.rs index f5202ad9f1..1b58790914 100644 --- a/zkevm-circuits/src/evm_circuit/util.rs +++ b/zkevm-circuits/src/evm_circuit/util.rs @@ -1,5 +1,5 @@ pub use crate::util::{ - word::{Word, WordExpr}, + word::{WordExpr, WordLoHi}, Challenges, Expr, }; use crate::{ @@ -145,8 +145,8 @@ impl<'r, 'b, F: Field> CachedRegion<'r, 'b, F> { .map(|r| rlc::value(le_bytes, r)) } - pub fn code_hash(&self, n: U256) -> Word> { - Word::from(n).into_value() + pub fn code_hash(&self, n: U256) -> WordLoHi> { + WordLoHi::from(n).into_value() } /// Constrains a cell to have a constant value. diff --git a/zkevm-circuits/src/evm_circuit/util/common_gadget.rs b/zkevm-circuits/src/evm_circuit/util/common_gadget.rs index 18fb9450da..0c323be986 100644 --- a/zkevm-circuits/src/evm_circuit/util/common_gadget.rs +++ b/zkevm-circuits/src/evm_circuit/util/common_gadget.rs @@ -22,13 +22,15 @@ use crate::{ }, table::{AccountFieldTag, CallContextFieldTag}, util::{ - word::{Word, Word32, Word32Cell, WordCell, WordExpr}, + word::{Word32, Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Expr, }, witness::{Block, Call, ExecStep}, }; use bus_mapping::state_db::CodeDB; -use eth_types::{evm_types::GasCost, Field, ToAddress, ToLittleEndian, ToScalar, ToWord, U256}; +use eth_types::{ + evm_types::GasCost, Field, OpsIdentity, ToAddress, ToLittleEndian, ToScalar, ToWord, U256, +}; use gadgets::util::{select, sum}; use halo2_proofs::{ circuit::Value, @@ -98,7 +100,7 @@ pub(crate) struct RestoreContextGadget { caller_id: Cell, caller_is_root: Cell, caller_is_create: Cell, - caller_code_hash: WordCell, + caller_code_hash: WordLoHiCell, caller_program_counter: Cell, caller_stack_pointer: Cell, caller_gas_left: Cell, @@ -189,7 +191,7 @@ impl RestoreContextGadget { cb.call_context_lookup_write( Some(caller_id.expr()), field_tag, - Word::from_lo_unchecked(value), + WordLoHi::from_lo_unchecked(value), ); } @@ -306,7 +308,7 @@ impl { pub(crate) fn construct( cb: &mut EVMConstraintBuilder, - address: Word>, + address: WordLoHi>, updates: Vec>, reversion_info: Option<&mut ReversionInfo>, ) -> Self { @@ -376,14 +378,14 @@ impl TransferToGadget { #[allow(clippy::too_many_arguments)] pub(crate) fn construct( cb: &mut EVMConstraintBuilder, - receiver_address: Word>, + receiver_address: WordLoHi>, receiver_exists: Expression, must_create: Expression, value: Word32Cell, mut reversion_info: Option<&mut ReversionInfo>, account_write: bool, ) -> Self { - let value_is_zero = IsZeroWordGadget::construct(cb, &value); + let value_is_zero = cb.is_zero_word(&value); if account_write { Self::create_account( cb, @@ -413,7 +415,7 @@ impl TransferToGadget { pub(crate) fn create_account( cb: &mut EVMConstraintBuilder, - receiver_address: Word>, + receiver_address: WordLoHi>, receiver_exists: Expression, must_create: Expression, value_is_zero: Expression, @@ -429,7 +431,7 @@ impl TransferToGadget { receiver_address.clone(), AccountFieldTag::CodeHash, cb.empty_code_hash(), - Word::zero(), + WordLoHi::zero(), reversion_info, ); }, @@ -451,7 +453,7 @@ impl TransferToGadget { receiver_balance, )?; self.value_is_zero - .assign_value(region, offset, Value::known(Word::from(value)))?; + .assign_value(region, offset, Value::known(WordLoHi::from(value)))?; Ok(()) } @@ -485,8 +487,8 @@ impl TransferWithGasFeeGadget { #[allow(clippy::too_many_arguments)] pub(crate) fn construct( cb: &mut EVMConstraintBuilder, - sender_address: Word>, - receiver_address: Word>, + sender_address: WordLoHi>, + receiver_address: WordLoHi>, receiver_exists: Expression, must_create: Expression, value: Word32Cell, @@ -495,7 +497,7 @@ impl TransferWithGasFeeGadget { ) -> Self { let sender_sub_fee = UpdateBalanceGadget::construct(cb, sender_address.to_word(), vec![gas_fee], None); - let value_is_zero = IsZeroWordGadget::construct(cb, &value); + let value_is_zero = cb.is_zero_word(&value); // If receiver doesn't exist, create it TransferToGadget::create_account( cb, @@ -589,7 +591,7 @@ impl TransferWithGasFeeGadget { value, )?; self.value_is_zero - .assign_value(region, offset, Value::known(Word::from(value)))?; + .assign_value(region, offset, Value::known(WordLoHi::from(value)))?; Ok(()) } } @@ -608,15 +610,15 @@ pub(crate) struct TransferGadget { impl TransferGadget { pub(crate) fn construct( cb: &mut EVMConstraintBuilder, - sender_address: Word>, - receiver_address: Word>, + sender_address: WordLoHi>, + receiver_address: WordLoHi>, receiver_exists: Expression, must_create: Expression, - // _prev_code_hash: Word>, + // _prev_code_hash: WordLoHi>, value: Word32Cell, reversion_info: &mut ReversionInfo, ) -> Self { - let value_is_zero = IsZeroWordGadget::construct(cb, &value); + let value_is_zero = cb.is_zero_word(&value); // If receiver doesn't exist, create it TransferToGadget::create_account( cb, @@ -685,7 +687,7 @@ impl TransferGadget { value, )?; self.value_is_zero - .assign_value(region, offset, Value::known(Word::from(value)))?; + .assign_value(region, offset, Value::known(WordLoHi::from(value)))?; Ok(()) } @@ -709,10 +711,10 @@ pub(crate) struct CommonCallGadget>, pub has_value: Expression, - pub callee_code_hash: WordCell, - pub is_empty_code_hash: IsEqualWordGadget, Word>>, + pub callee_code_hash: WordLoHiCell, + pub is_empty_code_hash: IsEqualWordGadget, WordLoHi>>, - pub callee_not_exists: IsZeroWordGadget>, + pub callee_not_exists: IsZeroWordGadget>, // save information is_call: Expression, @@ -765,18 +767,18 @@ impl, const IS_SUCCESS_CAL cb.stack_pop(rd_address.offset_word()); cb.stack_pop(rd_address.length_word()); cb.stack_push(if IS_SUCCESS_CALL { - Word::from_lo_unchecked(is_success.expr()) // is_success is bool + WordLoHi::from_lo_unchecked(is_success.expr()) // is_success is bool } else { - Word::zero() + WordLoHi::zero() }); // Recomposition of random linear combination to integer - let gas_is_u64 = IsZeroGadget::construct(cb, sum::expr(&gas_word.limbs[N_BYTES_GAS..])); + let gas_is_u64 = cb.is_zero(sum::expr(&gas_word.limbs[N_BYTES_GAS..])); let memory_expansion = MemoryExpansionGadget::construct(cb, [cd_address.address(), rd_address.address()]); // construct common gadget - let value_is_zero = IsZeroWordGadget::construct(cb, &value); + let value_is_zero = cb.is_zero_word(&value); let has_value = select::expr( is_delegatecall.expr() + is_staticcall.expr(), 0.expr(), @@ -789,9 +791,8 @@ impl, const IS_SUCCESS_CAL AccountFieldTag::CodeHash, callee_code_hash.to_word(), ); - let is_empty_code_hash = - IsEqualWordGadget::construct(cb, &callee_code_hash, &cb.empty_code_hash()); - let callee_not_exists = IsZeroWordGadget::construct(cb, &callee_code_hash); + let is_empty_code_hash = cb.is_eq_word(&callee_code_hash, &cb.empty_code_hash()); + let callee_not_exists = cb.is_zero_word(&callee_code_hash); Self { is_success, @@ -814,7 +815,7 @@ impl, const IS_SUCCESS_CAL } } - pub fn callee_address(&self) -> Word> { + pub fn callee_address(&self) -> WordLoHi> { self.callee_address.to_word() } @@ -881,19 +882,19 @@ impl, const IS_SUCCESS_CAL )?; self.value_is_zero - .assign(region, offset, Word::from(value))?; + .assign(region, offset, WordLoHi::from(value))?; self.callee_code_hash .assign_u256(region, offset, callee_code_hash)?; self.is_empty_code_hash.assign_value( region, offset, - Value::known(Word::from(callee_code_hash)), - Value::known(Word::from(CodeDB::empty_code_hash().to_word())), + Value::known(WordLoHi::from(callee_code_hash)), + Value::known(WordLoHi::from(CodeDB::empty_code_hash().to_word())), )?; self.callee_not_exists.assign_value( region, offset, - Value::known(Word::from(callee_code_hash)), + Value::known(WordLoHi::from(callee_code_hash)), )?; Ok(memory_expansion_gas_cost) } @@ -971,9 +972,9 @@ impl + Clone> SstoreGasGadget { value_prev: T, original_value: T, ) -> Self { - let value_eq_prev = IsEqualWordGadget::construct(cb, &value, &value_prev); - let original_eq_prev = IsEqualWordGadget::construct(cb, &original_value, &value_prev); - let original_is_zero = IsZeroWordGadget::construct(cb, &original_value); + let value_eq_prev = cb.is_eq_word(&value, &value_prev); + let original_eq_prev = cb.is_eq_word(&original_value, &value_prev); + let original_is_zero = cb.is_zero_word(&original_value); let warm_case_gas = select::expr( value_eq_prev.expr(), GasCost::WARM_ACCESS.expr(), @@ -1020,19 +1021,19 @@ impl + Clone> SstoreGasGadget { self.value_eq_prev.assign_value( region, offset, - Value::known(Word::from(value)), - Value::known(Word::from(value_prev)), + Value::known(WordLoHi::from(value)), + Value::known(WordLoHi::from(value_prev)), )?; self.original_eq_prev.assign_value( region, offset, - Value::known(Word::from(original_value)), - Value::known(Word::from(value_prev)), + Value::known(WordLoHi::from(original_value)), + Value::known(WordLoHi::from(value_prev)), )?; self.original_is_zero.assign_value( region, offset, - Value::known(Word::from(original_value)), + Value::known(WordLoHi::from(original_value)), )?; Ok(()) } @@ -1072,7 +1073,7 @@ pub(crate) fn cal_sstore_gas_cost_for_assignment( #[derive(Clone, Debug)] pub(crate) struct CommonErrorGadget { - rw_counter_end_of_reversion: WordCell, + rw_counter_end_of_reversion: WordLoHiCell, restore_context: RestoreContextGadget, } @@ -1097,7 +1098,7 @@ impl CommonErrorGadget { let rw_counter_end_of_reversion = cb.query_word_unchecked(); // rw_counter_end_of_reversion just used for read lookup, therefore skip range check // current call must be failed. - cb.call_context_lookup_read(None, CallContextFieldTag::IsSuccess, Word::zero()); + cb.call_context_lookup_read(None, CallContextFieldTag::IsSuccess, WordLoHi::zero()); cb.call_context_lookup_read( None, @@ -1191,7 +1192,7 @@ impl WordByteCapGadget { pub(crate) fn construct(cb: &mut EVMConstraintBuilder, cap: Expression) -> Self { let word = WordByteRangeGadget::construct(cb); let value = select::expr(word.overflow(), cap.expr(), word.valid_value()); - let lt_cap = LtGadget::construct(cb, value, cap); + let lt_cap = cb.is_lt(value, cap); Self { word, lt_cap } } @@ -1253,7 +1254,7 @@ impl WordByteRangeGadget { debug_assert!(VALID_BYTES < 32); let original = cb.query_word32(); - let not_overflow = IsZeroGadget::construct(cb, sum::expr(&original.limbs[VALID_BYTES..])); + let not_overflow = cb.is_zero(sum::expr(&original.limbs[VALID_BYTES..])); Self { original, @@ -1283,7 +1284,7 @@ impl WordByteRangeGadget { not::expr(self.not_overflow()) } - pub(crate) fn original(&self) -> Word> { + pub(crate) fn original(&self) -> WordLoHi> { self.original.to_word() } diff --git a/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs b/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs index 96312515dc..188fa44da7 100644 --- a/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs +++ b/zkevm-circuits/src/evm_circuit/util/constraint_builder.rs @@ -1,3 +1,10 @@ +use super::{ + math_gadget::{ + ConstantDivisionGadget, IsEqualGadget, IsEqualWordGadget, IsZeroGadget, IsZeroWordGadget, + LtGadget, LtWordGadget, MinMaxGadget, + }, + rlc, AccountAddress, CachedRegion, CellType, MemoryAddress, StoredExpression, U64Cell, +}; use crate::{ evm_circuit::{ param::STACK_CAPACITY, @@ -11,14 +18,14 @@ use crate::{ }, util::{ build_tx_log_expression, query_expression, - word::{Word, Word32, Word32Cell, WordCell, WordExpr}, + word::{Word32, Word32Cell, WordExpr, WordLoHi, WordLoHiCell}, Challenges, Expr, }, }; use bus_mapping::{ circuit_input_builder::FeatureConfig, operation::Target, state_db::EMPTY_CODE_HASH_LE, }; -use eth_types::Field; +use eth_types::{Field, OpsIdentity}; use gadgets::util::{not, sum}; use halo2_proofs::{ circuit::Value, @@ -29,10 +36,6 @@ use halo2_proofs::{ }, }; -use super::{ - rlc, AccountAddress, CachedRegion, CellType, MemoryAddress, StoredExpression, U64Cell, -}; - // Max degree allowed in all expressions passing through the ConstraintBuilder. // It aims to cap `extended_k` to 2, which allows constraint degree to 2^2+1, // but each ExecutionGadget has implicit selector degree 3, so here it only @@ -59,7 +62,7 @@ pub(crate) struct StepStateTransition { pub(crate) call_id: Transition>, pub(crate) is_root: Transition>, pub(crate) is_create: Transition>, - pub(crate) code_hash: Transition>>, + pub(crate) code_hash: Transition>>, pub(crate) program_counter: Transition>, pub(crate) stack_pointer: Transition>, pub(crate) gas_left: Transition>, @@ -164,15 +167,15 @@ pub(crate) trait ConstrainBuilderCommon { self.add_constraint(name, constraint); } - fn require_zero_word(&mut self, name: &'static str, word: Word>) { - self.require_equal_word(name, word, Word::zero()); + fn require_zero_word(&mut self, name: &'static str, word: WordLoHi>) { + self.require_equal_word(name, word, WordLoHi::zero()); } fn require_equal_word( &mut self, name: &'static str, - lhs: Word>, - rhs: Word>, + lhs: WordLoHi>, + rhs: WordLoHi>, ) { let (lhs_lo, lhs_hi) = lhs.to_lo_hi(); let (rhs_lo, rhs_hi) = rhs.to_lo_hi(); @@ -204,7 +207,8 @@ pub(crate) trait ConstrainBuilderCommon { .fold(1.expr(), |acc, item| acc * (value.clone() - item.clone())), ); } - + /// Under active development + #[allow(dead_code)] fn add_constraints(&mut self, constraints: Vec<(&'static str, Expression)>) { for (name, constraint) in constraints { self.add_constraint(name, constraint); @@ -443,8 +447,8 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { } // default query_word is 2 limbs. Each limb is not guaranteed to be 128 bits. - pub fn query_word_unchecked(&mut self) -> WordCell { - Word::new( + pub fn query_word_unchecked(&mut self) -> WordLoHiCell { + WordLoHi::new( self.query_cells(CellType::StoragePhase1, 2) .try_into() .unwrap(), @@ -511,7 +515,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { rlc::expr(&bytes, self.challenges.keccak_input()) } - pub(crate) fn empty_code_hash(&self) -> Word> { + pub(crate) fn empty_code_hash(&self) -> WordLoHi> { Word32::new(EMPTY_CODE_HASH_LE.map(|byte| byte.expr())).to_word() } @@ -581,6 +585,60 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { constrain!(log_id); } + // Math gadgets + + pub(crate) fn is_zero(&mut self, value: Expression) -> IsZeroGadget { + IsZeroGadget::construct(self, value) + } + + pub(crate) fn is_zero_word>(&mut self, value: &T) -> IsZeroWordGadget { + IsZeroWordGadget::construct(self, value) + } + + pub(crate) fn is_eq(&mut self, lhs: Expression, rhs: Expression) -> IsEqualGadget { + IsEqualGadget::construct(self, lhs, rhs) + } + + pub(crate) fn is_eq_word, T2: WordExpr>( + &mut self, + lhs: &T1, + rhs: &T2, + ) -> IsEqualWordGadget { + IsEqualWordGadget::construct(self, lhs, rhs) + } + + pub(crate) fn is_lt( + &mut self, + lhs: Expression, + rhs: Expression, + ) -> LtGadget { + LtGadget::construct(self, lhs, rhs) + } + + pub(crate) fn is_lt_word + Clone>( + &mut self, + lhs: &WordLoHi, + rhs: &WordLoHi, + ) -> LtWordGadget { + LtWordGadget::construct(self, lhs, rhs) + } + + pub(crate) fn min_max( + &mut self, + lhs: Expression, + rhs: Expression, + ) -> MinMaxGadget { + MinMaxGadget::construct(self, lhs, rhs) + } + + pub(crate) fn div_by_const( + &mut self, + numerator: Expression, + denominator: u64, + ) -> ConstantDivisionGadget { + ConstantDivisionGadget::construct(self, numerator, denominator) + } + // Fixed pub(crate) fn range_lookup(&mut self, value: Expression, range: u64) { @@ -664,7 +722,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { pub(crate) fn bytecode_lookup( &mut self, - code_hash: Word>, + code_hash: WordLoHi>, index: Expression, is_code: Expression, value: Expression, @@ -681,7 +739,11 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { ) } - pub(crate) fn bytecode_length(&mut self, code_hash: Word>, value: Expression) { + pub(crate) fn bytecode_length( + &mut self, + code_hash: WordLoHi>, + value: Expression, + ) { self.add_lookup( "Bytecode (length)", Lookup::Bytecode { @@ -704,7 +766,12 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { ) -> Cell { let cell = self.query_cell(); // lookup read, unchecked is safe - self.tx_context_lookup(id, field_tag, index, Word::from_lo_unchecked(cell.expr())); + self.tx_context_lookup( + id, + field_tag, + index, + WordLoHi::from_lo_unchecked(cell.expr()), + ); cell } pub(crate) fn tx_context_as_word32( @@ -723,7 +790,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { id: Expression, field_tag: TxContextFieldTag, index: Option>, - ) -> WordCell { + ) -> WordLoHiCell { let word = self.query_word_unchecked(); self.tx_context_lookup(id, field_tag, index, word.to_word()); word @@ -734,7 +801,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { id: Expression, field_tag: TxContextFieldTag, index: Option>, - value: Word>, + value: WordLoHi>, ) { self.add_lookup( "Tx lookup", @@ -752,7 +819,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { &mut self, tag: Expression, number: Option>, - val: Word>, + val: WordLoHi>, ) { self.add_lookup( "Block lookup", @@ -853,7 +920,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { pub(crate) fn account_access_list_write_unchecked( &mut self, tx_id: Expression, - account_address: Word>, + account_address: WordLoHi>, value: Expression, value_prev: Expression, reversion_info: Option<&mut ReversionInfo>, @@ -865,10 +932,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { tx_id, account_address.compress(), 0.expr(), - Word::zero(), - Word::from_lo_unchecked(value), - Word::from_lo_unchecked(value_prev), - Word::zero(), + WordLoHi::zero(), + WordLoHi::from_lo_unchecked(value), + WordLoHi::from_lo_unchecked(value_prev), + WordLoHi::zero(), ), reversion_info, ); @@ -877,7 +944,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { pub(crate) fn account_access_list_read( &mut self, tx_id: Expression, - account_address: Word>, + account_address: WordLoHi>, value: Expression, ) { self.rw_lookup( @@ -888,20 +955,20 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { tx_id, account_address.compress(), 0.expr(), - Word::zero(), - Word::from_lo_unchecked(value.clone()), - Word::from_lo_unchecked(value), - Word::zero(), + WordLoHi::zero(), + WordLoHi::from_lo_unchecked(value.clone()), + WordLoHi::from_lo_unchecked(value), + WordLoHi::zero(), ), ); } pub(crate) fn account_storage_access_list_write( &mut self, tx_id: Expression, - account_address: Word>, - storage_key: Word>, - value: Word>, - value_prev: Word>, + account_address: WordLoHi>, + storage_key: WordLoHi>, + value: WordLoHi>, + value_prev: WordLoHi>, reversion_info: Option<&mut ReversionInfo>, ) { self.reversible_write( @@ -914,7 +981,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { storage_key, value, value_prev, - Word::zero(), + WordLoHi::zero(), ), reversion_info, ); @@ -923,9 +990,9 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { pub(crate) fn account_storage_access_list_read( &mut self, tx_id: Expression, - account_address: Word>, - storage_key: Word>, - value: Word>, + account_address: WordLoHi>, + storage_key: WordLoHi>, + value: WordLoHi>, ) { self.rw_lookup( "TxAccessListAccountStorage read", @@ -938,14 +1005,14 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { storage_key, value.clone(), value, - Word::zero(), + WordLoHi::zero(), ), ); } // Tx Refund - pub(crate) fn tx_refund_read(&mut self, tx_id: Expression, value: Word>) { + pub(crate) fn tx_refund_read(&mut self, tx_id: Expression, value: WordLoHi>) { self.rw_lookup( "TxRefund read", false.expr(), @@ -954,10 +1021,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { tx_id, 0.expr(), 0.expr(), - Word::zero(), + WordLoHi::zero(), value.clone(), value, - Word::zero(), + WordLoHi::zero(), ), ); } @@ -965,8 +1032,8 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { pub(crate) fn tx_refund_write( &mut self, tx_id: Expression, - value: Word>, - value_prev: Word>, + value: WordLoHi>, + value_prev: WordLoHi>, reversion_info: Option<&mut ReversionInfo>, ) { self.reversible_write( @@ -976,10 +1043,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { tx_id, 0.expr(), 0.expr(), - Word::zero(), + WordLoHi::zero(), value, value_prev, - Word::zero(), + WordLoHi::zero(), ), reversion_info, ); @@ -988,9 +1055,9 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { // Account pub(crate) fn account_read( &mut self, - account_address: Word>, + account_address: WordLoHi>, field_tag: AccountFieldTag, - value: Word>, + value: WordLoHi>, ) { self.rw_lookup( "Account read", @@ -1000,20 +1067,20 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { 0.expr(), account_address.compress(), field_tag.expr(), - Word::zero(), + WordLoHi::zero(), value.clone(), value, - Word::zero(), + WordLoHi::zero(), ), ); } pub(crate) fn account_write( &mut self, - account_address: Word>, + account_address: WordLoHi>, field_tag: AccountFieldTag, - value: Word>, - value_prev: Word>, + value: WordLoHi>, + value_prev: WordLoHi>, reversion_info: Option<&mut ReversionInfo>, ) { self.reversible_write( @@ -1023,10 +1090,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { 0.expr(), account_address.compress(), field_tag.expr(), - Word::zero(), + WordLoHi::zero(), value, value_prev, - Word::zero(), + WordLoHi::zero(), ), reversion_info, ); @@ -1035,11 +1102,11 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { // Account Storage pub(crate) fn account_storage_read( &mut self, - account_address: Word>, - key: Word>, - value: Word>, + account_address: WordLoHi>, + key: WordLoHi>, + value: WordLoHi>, tx_id: Expression, - committed_value: Word>, + committed_value: WordLoHi>, ) { self.rw_lookup( "account_storage_read", @@ -1060,12 +1127,12 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { #[allow(clippy::too_many_arguments)] pub(crate) fn account_storage_write( &mut self, - account_address: Word>, - key: Word>, - value: Word>, - value_prev: Word>, + account_address: WordLoHi>, + key: WordLoHi>, + value: WordLoHi>, + value_prev: WordLoHi>, tx_id: Expression, - committed_value: Word>, + committed_value: WordLoHi>, reversion_info: Option<&mut ReversionInfo>, ) { self.reversible_write( @@ -1098,7 +1165,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { self.call_context_lookup_read( call_id, field_tag, - Word::from_lo_unchecked(cell.expr()), // lookup read, unchecked is safe + WordLoHi::from_lo_unchecked(cell.expr()), // lookup read, unchecked is safe ); cell } @@ -1107,7 +1174,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { &mut self, call_id: Option>, field_tag: CallContextFieldTag, - ) -> Word> { + ) -> WordLoHi> { let word = self.query_word_unchecked(); self.call_context_lookup_read(call_id, field_tag, word.to_word()); word @@ -1117,7 +1184,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { &mut self, call_id: Option>, field_tag: CallContextFieldTag, - value: Word>, + value: WordLoHi>, ) { self.rw_lookup( "CallContext lookup", @@ -1127,10 +1194,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { call_id.unwrap_or_else(|| self.curr.state.call_id.expr()), 0.expr(), field_tag.expr(), - Word::zero(), + WordLoHi::zero(), value, - Word::zero(), - Word::zero(), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1142,7 +1209,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { rw_counter: Expression, call_id: Option>, field_tag: CallContextFieldTag, - value: Word>, + value: WordLoHi>, ) { self.rw_lookup_with_counter( "CallContext lookup", @@ -1153,10 +1220,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { call_id.unwrap_or_else(|| self.curr.state.call_id.expr()), 0.expr(), field_tag.expr(), - Word::zero(), + WordLoHi::zero(), value, - Word::zero(), - Word::zero(), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1165,7 +1232,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { &mut self, call_id: Option>, field_tag: CallContextFieldTag, - value: Word>, + value: WordLoHi>, ) { self.rw_lookup( "CallContext lookup", @@ -1175,10 +1242,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { call_id.unwrap_or_else(|| self.curr.state.call_id.expr()), 0.expr(), field_tag.expr(), - Word::zero(), + WordLoHi::zero(), value, - Word::zero(), - Word::zero(), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1198,13 +1265,13 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { self.call_context_lookup_write( call_id.clone(), field_tag, - Word::from_lo_unchecked(cell.expr()), + WordLoHi::from_lo_unchecked(cell.expr()), ); } else { self.call_context_lookup_read( call_id.clone(), field_tag, - Word::from_lo_unchecked(cell.expr()), + WordLoHi::from_lo_unchecked(cell.expr()), ); } @@ -1237,12 +1304,12 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { } // Stack - pub(crate) fn stack_pop(&mut self, value: Word>) { + pub(crate) fn stack_pop(&mut self, value: WordLoHi>) { self.stack_lookup(false.expr(), self.stack_pointer_offset.clone(), value); self.stack_pointer_offset = self.stack_pointer_offset.clone() + self.condition_expr(); } - pub(crate) fn stack_push(&mut self, value: Word>) { + pub(crate) fn stack_push(&mut self, value: WordLoHi>) { self.stack_pointer_offset = self.stack_pointer_offset.clone() - self.condition_expr(); self.stack_lookup(true.expr(), self.stack_pointer_offset.expr(), value); } @@ -1251,7 +1318,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { &mut self, is_write: Expression, stack_pointer_offset: Expression, - value: Word>, + value: WordLoHi>, ) { self.rw_lookup( "Stack lookup", @@ -1261,10 +1328,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { self.curr.state.call_id.expr(), self.curr.state.stack_pointer.expr() + stack_pointer_offset, 0.expr(), - Word::zero(), + WordLoHi::zero(), value, - Word::zero(), - Word::zero(), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1286,11 +1353,11 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { call_id.unwrap_or_else(|| self.curr.state.call_id.expr()), memory_address, 0.expr(), - Word::zero(), + WordLoHi::zero(), // TODO assure range check since write=true also possible - Word::from_lo_unchecked(byte), - Word::zero(), - Word::zero(), + WordLoHi::from_lo_unchecked(byte), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1301,7 +1368,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { log_id: Expression, field_tag: TxLogFieldTag, index: Expression, - value: Word>, + value: WordLoHi>, ) { self.rw_lookup( "log data lookup", @@ -1311,10 +1378,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { tx_id, build_tx_log_expression(index, field_tag.expr(), log_id), 0.expr(), - Word::zero(), + WordLoHi::zero(), value, - Word::zero(), - Word::zero(), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1335,11 +1402,11 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { tx_id, 0.expr(), tag.expr(), - Word::zero(), + WordLoHi::zero(), // TODO assure range check since write=true also possible - Word::from_lo_unchecked(value), - Word::zero(), - Word::zero(), + WordLoHi::from_lo_unchecked(value), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1356,10 +1423,10 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { 0.expr(), 0.expr(), 0.expr(), - Word::zero(), - Word::zero(), - Word::zero(), - Word::zero(), + WordLoHi::zero(), + WordLoHi::zero(), + WordLoHi::zero(), + WordLoHi::zero(), ), ); } @@ -1369,9 +1436,9 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { #[allow(clippy::too_many_arguments)] pub(crate) fn copy_table_lookup( &mut self, - src_id: Word>, + src_id: WordLoHi>, src_tag: Expression, - dst_id: Word>, + dst_id: WordLoHi>, dst_tag: Expression, src_addr: Expression, src_addr_end: Expression, @@ -1451,7 +1518,7 @@ impl<'a, F: Field> EVMConstraintBuilder<'a, F> { &mut self, input_rlc: Expression, input_len: Expression, - output: Word>, + output: WordLoHi>, ) { self.add_lookup( "keccak lookup", diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/abs_word.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/abs_word.rs index 119e7d77a2..7778c33950 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/abs_word.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/abs_word.rs @@ -38,7 +38,7 @@ impl AbsWordGadget { let sum = cb.query_word32(); let (x_lo, x_hi) = x.to_word().to_lo_hi(); let (x_abs_lo, x_abs_hi) = x_abs.to_word().to_lo_hi(); - let is_neg = LtGadget::construct(cb, 127.expr(), x.limbs[31].expr()); + let is_neg = cb.is_lt(127.expr(), x.limbs[31].expr()); cb.add_constraint( "x_abs_lo == x_lo when x >= 0", diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/add_words.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/add_words.rs index 8ad2e86284..0978d32ab8 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/add_words.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/add_words.rs @@ -221,27 +221,27 @@ mod tests { #[test] fn test_addwords_0_0() { - try_test!(AddWordsTestContainer, vec![Word::from(0), Word::from(0), Word::from(0)], true); + try_test!(AddWordsTestContainer, [Word::from(0), Word::from(0), Word::from(0)], true); } #[test] fn test_addwords_1_1() { - try_test!(AddWordsTestContainer, vec![Word::from(1), Word::from(1), Word::from(2)], true); + try_test!(AddWordsTestContainer, [Word::from(1), Word::from(1), Word::from(2)], true); } #[test] fn test_addwords_1000_1000() { - try_test!(AddWordsTestContainer, vec![Word::from(1000), Word::from(1000), Word::from(2000)], true); + try_test!(AddWordsTestContainer, [Word::from(1000), Word::from(1000), Word::from(2000)], true); } #[test] fn test_addwords_to_wordmax() { - try_test!(AddWordsTestContainer, vec![Word::MAX - 1, Word::from(1), Word::MAX], true); + try_test!(AddWordsTestContainer, [Word::MAX - 1, Word::from(1), Word::MAX], true); } #[test] fn test_addwords_high_low_max() { - try_test!(AddWordsTestContainer, vec![WORD_LOW_MAX, WORD_HIGH_MAX, Word::MAX], true); + try_test!(AddWordsTestContainer, [WORD_LOW_MAX, WORD_HIGH_MAX, Word::MAX], true); } #[test] @@ -291,7 +291,7 @@ mod tests { let sum_7_low_max = U256([0xfffffffffffffff9u64, 0xffffffffffffffffu64, CARRY_HI, 0u64]); try_test!( AddWordsTestContainer, - vec![ + [ WORD_LOW_MAX, WORD_LOW_MAX, WORD_LOW_MAX, diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/byte_size.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/byte_size.rs index 1d82f26f0d..34f86127ec 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/byte_size.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/byte_size.rs @@ -86,7 +86,7 @@ impl ByteSizeGadget { region, offset, Value::known( - F::from(u64::try_from(most_significant_nonzero_byte).unwrap()) + F::from(u64::from(most_significant_nonzero_byte)) .invert() .unwrap(), ), @@ -157,18 +157,18 @@ mod tests { #[test] fn test_bytesize_0() { - try_test!(ByteSizeGadgetContainer, vec![Word::from(0)], true) + try_test!(ByteSizeGadgetContainer, [Word::from(0)], true) } #[test] fn test_bytesize_1() { - try_test!(ByteSizeGadgetContainer, vec![Word::from(1)], true) + try_test!(ByteSizeGadgetContainer, [Word::from(1)], true) } #[test] fn test_bytesize_1_neq_0() { try_test!(ByteSizeGadgetContainer, - vec![Word::from(1)], + [Word::from(1)], false ); } @@ -176,13 +176,13 @@ mod tests { #[test] fn test_bytesize_256_eq_2() { try_test!(ByteSizeGadgetContainer, - vec![Word::from(256)], + [Word::from(256)], true ); } #[test] fn test_bytesize_wordmax_eq_32() { - try_test!(ByteSizeGadgetContainer, vec![Word::MAX], true) + try_test!(ByteSizeGadgetContainer, [Word::MAX], true) } } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/cmp_words.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/cmp_words.rs index ed170d9c64..c7b3e0288e 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/cmp_words.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/cmp_words.rs @@ -80,7 +80,7 @@ impl, T2: WordExpr> CmpWordsGadget { mod tests { use super::{test_util::*, *}; use crate::{ - evm_circuit::util::constraint_builder::ConstrainBuilderCommon, util::word::WordCell, + evm_circuit::util::constraint_builder::ConstrainBuilderCommon, util::word::WordLoHiCell, }; use eth_types::Word; use halo2_proofs::{halo2curves::bn256::Fr, plonk::Error}; @@ -88,9 +88,9 @@ mod tests { #[derive(Clone)] /// CmpWordGadgetTestContainer: require(a == b if CHECK_EQ else a < b) struct CmpWordGadgetTestContainer { - cmp_gadget: CmpWordsGadget, WordCell>, - a_word: WordCell, - b_word: WordCell, + cmp_gadget: CmpWordsGadget, WordLoHiCell>, + a_word: WordLoHiCell, + b_word: WordLoHiCell, } impl MathGadgetContainer @@ -141,7 +141,7 @@ mod tests { // a == b check try_test!( CmpWordGadgetTestContainer, - vec![Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0)], true, ); } @@ -150,7 +150,7 @@ mod tests { fn test_cmpword_1_eq() { try_test!( CmpWordGadgetTestContainer, - vec![Word::from(1), Word::from(1)], + [Word::from(1), Word::from(1)], true, ); } @@ -159,7 +159,7 @@ mod tests { fn test_cmpword_wordmax_eq() { try_test!( CmpWordGadgetTestContainer, - vec![Word::MAX, Word::MAX], + [Word::MAX, Word::MAX], true, ); } @@ -168,7 +168,7 @@ mod tests { fn test_cmpword_0_neq_wordmax() { try_test!( CmpWordGadgetTestContainer, - vec![Word::from(0), Word::MAX], + [Word::from(0), Word::MAX], false, ); } @@ -178,7 +178,7 @@ mod tests { fn test_cmpword_0_lt_1() { try_test!( CmpWordGadgetTestContainer, - vec![Word::from(0), Word::from(1)], + [Word::from(0), Word::from(1)], true, ); } @@ -187,7 +187,7 @@ mod tests { fn test_cmpword_1_lt_wordmax() { try_test!( CmpWordGadgetTestContainer, - vec![Word::from(1), Word::MAX], + [Word::from(1), Word::MAX], true, ); } @@ -196,7 +196,7 @@ mod tests { fn test_cmpword_1_lt_0() { try_test!( CmpWordGadgetTestContainer, - vec![Word::from(1), Word::from(0)], + [Word::from(1), Word::from(0)], false, ); } @@ -205,7 +205,7 @@ mod tests { fn test_cmpword_lowmax_lt_highmax() { try_test!( CmpWordGadgetTestContainer, - vec![WORD_LOW_MAX, WORD_HIGH_MAX], + [WORD_LOW_MAX, WORD_HIGH_MAX], true, ); } @@ -214,7 +214,7 @@ mod tests { fn test_cmpword_highmax_lt_lowmax() { try_test!( CmpWordGadgetTestContainer, - vec![WORD_HIGH_MAX, WORD_LOW_MAX], + [WORD_HIGH_MAX, WORD_LOW_MAX], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/comparison.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/comparison.rs index 5568ec54c4..60e4e4ea5d 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/comparison.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/comparison.rs @@ -21,8 +21,8 @@ impl ComparisonGadget { lhs: Expression, rhs: Expression, ) -> Self { - let lt = LtGadget::::construct(cb, lhs, rhs); - let eq = IsZeroGadget::::construct(cb, sum::expr(<.diff_bytes())); + let lt = cb.is_lt(lhs, rhs); + let eq = cb.is_zero(sum::expr(<.diff_bytes())); Self { lt, eq } } @@ -107,7 +107,7 @@ mod tests { // a == b check try_test!( ComparisonTestContainer, - vec![Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0)], true, ); } @@ -116,7 +116,7 @@ mod tests { fn test_comparison_1_eq() { try_test!( ComparisonTestContainer, - vec![Word::from(1), Word::from(1)], + [Word::from(1), Word::from(1)], true, ); } @@ -125,7 +125,7 @@ mod tests { fn test_comparison_max_eq() { try_test!( ComparisonTestContainer, - vec![Word::from(1 << 4), Word::from(1 << 4)], + [Word::from(1 << 4), Word::from(1 << 4)], true, ); } @@ -134,7 +134,7 @@ mod tests { fn test_comparison_0_neq_max() { try_test!( ComparisonTestContainer, - vec![Word::from(0), Word::from(1 << 4)], + [Word::from(0), Word::from(1 << 4)], false, ); } @@ -144,7 +144,7 @@ mod tests { fn test_comparison_0_lt_1() { try_test!( ComparisonTestContainer, - vec![Word::from(0), Word::from(1)], + [Word::from(0), Word::from(1)], true, ); } @@ -153,7 +153,7 @@ mod tests { fn test_comparison_1_lt_max() { try_test!( ComparisonTestContainer, - vec![Word::from(1), Word::from(1 << 4)], + [Word::from(1), Word::from(1 << 4)], true, ); } @@ -162,7 +162,7 @@ mod tests { fn test_comparison_1_lt_0() { try_test!( ComparisonTestContainer, - vec![Word::from(1), Word::from(0)], + [Word::from(1), Word::from(0)], false, ); } @@ -174,13 +174,13 @@ mod tests { let half_max_hi = U256([0, u64::MAX, 0, 0]); try_test!( ComparisonTestContainer, - vec![half_max_lo, half_max_hi], + [half_max_lo, half_max_hi], true, ); try_test!( ComparisonTestContainer, - vec![half_max_hi, half_max_lo], + [half_max_hi, half_max_lo], false, ); } @@ -189,7 +189,7 @@ mod tests { fn test_comparison_overflow() { try_test!( ComparisonTestContainer, - vec![Word::from(10000), Word::from(1 << (4 + 1))], + [Word::from(10000), Word::from(1 << (4 + 1))], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/constant_division.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/constant_division.rs index dff6e51a6b..ed32eae807 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/constant_division.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/constant_division.rs @@ -154,7 +154,7 @@ mod tests { fn test_constantdivisiongadget_0div5_rem0() { try_test!( ConstantDivisionTestContainer, - vec![Word::from(0)], + [Word::from(0)], true, ); } @@ -163,7 +163,7 @@ mod tests { fn test_constantdivisiongadget_5div5_rem0() { try_test!( ConstantDivisionTestContainer, - vec![Word::from(5)], + [Word::from(5)], true, ); } @@ -172,7 +172,7 @@ mod tests { fn test_constantdivisiongadget_1div5_rem1() { try_test!( ConstantDivisionTestContainer, - vec![Word::from(1)], + [Word::from(1)], true, ); } @@ -181,7 +181,7 @@ mod tests { fn test_constantdivisiongadget_1div5_rem4() { try_test!( ConstantDivisionTestContainer, - vec![Word::from(1)], + [Word::from(1)], false, ); } @@ -190,7 +190,7 @@ mod tests { fn test_constantdivisiongadget_quotient_overflow() { try_test!( ConstantDivisionTestContainer, - vec![Word::from(1u64 << (4 * 8)) * 5 + 1], + [Word::from(1u64 << (4 * 8)) * 5 + 1], false, ); } @@ -199,7 +199,7 @@ mod tests { fn test_constantdivisiongadget_33_div16_rem17() { try_test!( ConstantDivisionTestContainer, - vec![Word::from(33)], + [Word::from(33)], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal.rs index f0ddb64048..8e26ccf089 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal.rs @@ -16,7 +16,7 @@ impl IsEqualGadget { lhs: Expression, rhs: Expression, ) -> Self { - let is_zero = IsZeroGadget::construct(cb, lhs - rhs); + let is_zero = cb.is_zero(lhs - rhs); Self { is_zero } } @@ -83,7 +83,7 @@ mod tests { fn test_isequal_0() { try_test!( IsEqualGadgetTestContainer, - vec![Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0)], true, ); } @@ -92,7 +92,7 @@ mod tests { fn test_isequal_1() { try_test!( IsEqualGadgetTestContainer, - vec![Word::from(1), Word::from(1)], + [Word::from(1), Word::from(1)], true, ); } @@ -101,7 +101,7 @@ mod tests { fn test_isequal_1000() { try_test!( IsEqualGadgetTestContainer, - vec![Word::from(1000), Word::from(1000)], + [Word::from(1000), Word::from(1000)], true, ); } @@ -110,7 +110,7 @@ mod tests { fn test_isequal_1_0() { try_test!( IsEqualGadgetTestContainer, - vec![Word::from(1), Word::from(0)], + [Word::from(1), Word::from(0)], false, ); } @@ -119,7 +119,7 @@ mod tests { fn test_isequal_0_1() { try_test!( IsEqualGadgetTestContainer, - vec![Word::from(0), Word::from(1)], + [Word::from(0), Word::from(1)], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal_word.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal_word.rs index 5109d47061..b7bb201251 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal_word.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_equal_word.rs @@ -11,16 +11,16 @@ use crate::{ evm_circuit::util::{ constraint_builder::EVMConstraintBuilder, transpose_val_ret, CachedRegion, }, - util::word::{Word, WordExpr}, + util::word::{WordExpr, WordLoHi}, }; -use super::IsZeroGadget; +use super::IsEqualGadget; /// Returns `1` when `lhs == rhs`, and returns `0` otherwise. #[derive(Clone, Debug)] pub struct IsEqualWordGadget { - is_zero_lo: IsZeroGadget, - is_zero_hi: IsZeroGadget, + is_zero_lo: IsEqualGadget, + is_zero_hi: IsEqualGadget, _marker: PhantomData<(T1, T2)>, } @@ -28,8 +28,8 @@ impl, T2: WordExpr> IsEqualWordGadget { pub(crate) fn construct(cb: &mut EVMConstraintBuilder, lhs: &T1, rhs: &T2) -> Self { let (lhs_lo, lhs_hi) = lhs.to_word().to_lo_hi(); let (rhs_lo, rhs_hi) = rhs.to_word().to_lo_hi(); - let is_zero_lo = IsZeroGadget::construct(cb, lhs_lo - rhs_lo); - let is_zero_hi = IsZeroGadget::construct(cb, lhs_hi - rhs_hi); + let is_zero_lo = cb.is_eq(lhs_lo, rhs_lo); + let is_zero_hi = cb.is_eq(lhs_hi, rhs_hi); Self { is_zero_lo, @@ -46,13 +46,13 @@ impl, T2: WordExpr> IsEqualWordGadget { &self, region: &mut CachedRegion<'_, '_, F>, offset: usize, - lhs: Word, - rhs: Word, + lhs: WordLoHi, + rhs: WordLoHi, ) -> Result { let (lhs_lo, lhs_hi) = lhs.to_lo_hi(); let (rhs_lo, rhs_hi) = rhs.to_lo_hi(); - self.is_zero_lo.assign(region, offset, lhs_lo - rhs_lo)?; - self.is_zero_hi.assign(region, offset, lhs_hi - rhs_hi)?; + self.is_zero_lo.assign(region, offset, lhs_lo, rhs_lo)?; + self.is_zero_hi.assign(region, offset, lhs_hi, rhs_hi)?; Ok(F::from(2)) } @@ -60,8 +60,8 @@ impl, T2: WordExpr> IsEqualWordGadget { &self, region: &mut CachedRegion<'_, '_, F>, offset: usize, - lhs: Value>, - rhs: Value>, + lhs: Value>, + rhs: Value>, ) -> Result, Error> { transpose_val_ret( lhs.zip(rhs) @@ -76,7 +76,7 @@ impl, T2: WordExpr> IsEqualWordGadget { lhs: eth_types::Word, rhs: eth_types::Word, ) -> Result { - self.assign(region, offset, Word::from(lhs), Word::from(rhs)) + self.assign(region, offset, WordLoHi::from(lhs), WordLoHi::from(rhs)) } } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero.rs index 5e88655313..c9fbcb4d42 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero.rs @@ -100,20 +100,16 @@ mod tests { #[test] fn test_0_is_zero() { - try_test!(IsZeroGadgetTestContainer, vec![Word::from(0)], true); + try_test!(IsZeroGadgetTestContainer, [Word::from(0)], true); } #[test] fn test_1_is_not_zero() { - try_test!(IsZeroGadgetTestContainer, vec![Word::from(1)], false); + try_test!(IsZeroGadgetTestContainer, [Word::from(1)], false); } #[test] fn test_large_num_is_not_zero() { - try_test!( - IsZeroGadgetTestContainer, - vec![Word::from(10000)], - false, - ); + try_test!(IsZeroGadgetTestContainer, [Word::from(10000)], false,); } } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero_word.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero_word.rs index f74ccf6a96..47ee7c9ce0 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero_word.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/is_zero_word.rs @@ -12,7 +12,7 @@ use crate::{ constraint_builder::{ConstrainBuilderCommon, EVMConstraintBuilder}, transpose_val_ret, CachedRegion, Cell, CellType, }, - util::word::{Word, WordExpr}, + util::word::{WordExpr, WordLoHi}, }; /// Returns `1` when `word == 0`, and returns `0` otherwise. @@ -69,7 +69,7 @@ impl> IsZeroWordGadget { &self, region: &mut CachedRegion<'_, '_, F>, offset: usize, - value: Word, + value: WordLoHi, ) -> Result { let (value_lo, value_hi) = value.to_lo_hi(); let inverse_lo = value_lo.invert().unwrap_or(F::from(0)); @@ -91,14 +91,14 @@ impl> IsZeroWordGadget { offset: usize, value: eth_types::Word, ) -> Result { - self.assign(region, offset, Word::from(value)) + self.assign(region, offset, WordLoHi::from(value)) } pub(crate) fn assign_value( &self, region: &mut CachedRegion<'_, '_, F>, offset: usize, - value: Value>, + value: Value>, ) -> Result, Error> { transpose_val_ret(value.map(|value| self.assign(region, offset, value))) } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/lt.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/lt.rs index 51366b5480..5801141d59 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/lt.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/lt.rs @@ -148,12 +148,12 @@ mod tests { fn test_lt_expect() { try_test!( LtGadgetTestContainer, - vec![Word::from(0), Word::from(1)], + [Word::from(0), Word::from(1)], true, ); try_test!( LtGadgetTestContainer, - vec![Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0)], false, ); } @@ -162,7 +162,7 @@ mod tests { fn test_lt_just_in_range() { try_test!( LtGadgetTestContainer, - vec![Word::from(1), Word::from((1u64 << (N * 8)) - 1)], + [Word::from(1), Word::from((1u64 << (N * 8)) - 1)], true, ); } @@ -171,7 +171,7 @@ mod tests { fn test_lt_out_of_range() { try_test!( LtGadgetTestContainer, - vec![Word::from(1), Word::from(2 << (N * 8))], + [Word::from(1), Word::from(2 << (N * 8))], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/lt_word.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/lt_word.rs index 37899253b8..dff46d9a57 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/lt_word.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/lt_word.rs @@ -2,7 +2,7 @@ use crate::{ evm_circuit::util::{ constraint_builder::EVMConstraintBuilder, math_gadget::*, split_u256, CachedRegion, }, - util::word::{self}, + util::word::WordLoHi, }; use eth_types::{Field, Word}; use halo2_proofs::plonk::{Error, Expression}; @@ -18,13 +18,13 @@ pub struct LtWordGadget { impl LtWordGadget { pub(crate) fn construct + Clone>( cb: &mut EVMConstraintBuilder, - lhs: &word::Word, - rhs: &word::Word, + lhs: &WordLoHi, + rhs: &WordLoHi, ) -> Self { let (lhs_lo, lhs_hi) = lhs.to_lo_hi(); let (rhs_lo, rhs_hi) = rhs.to_lo_hi(); let comparison_hi = ComparisonGadget::construct(cb, lhs_hi.expr(), rhs_hi.expr()); - let lt_lo = LtGadget::construct(cb, lhs_lo.expr(), rhs_lo.expr()); + let lt_lo = cb.is_lt(lhs_lo.expr(), rhs_lo.expr()); Self { comparison_hi, lt_lo, @@ -113,27 +113,19 @@ mod tests { fn test_ltword_expect() { try_test!( LtWordTestContainer, - vec![Word::from(0), Word::from(1)], + [Word::from(0), Word::from(1)], true, ); + try_test!(LtWordTestContainer, [Word::from(1), Word::MAX], true,); + try_test!(LtWordTestContainer, [WORD_LOW_MAX, WORD_HIGH_MAX], true,); try_test!( LtWordTestContainer, - vec![Word::from(1), Word::MAX], + [Word::from(90), WORD_LOW_MAX], true, ); try_test!( LtWordTestContainer, - vec![WORD_LOW_MAX, WORD_HIGH_MAX], - true, - ); - try_test!( - LtWordTestContainer, - vec![Word::from(90), WORD_LOW_MAX], - true, - ); - try_test!( - LtWordTestContainer, - vec![Word::from(90), WORD_HIGH_MAX], + [Word::from(90), WORD_HIGH_MAX], true, ); } @@ -142,14 +134,14 @@ mod tests { fn test_ltword_unexpect() { try_test!( LtWordTestContainer, - vec![Word::from(1), Word::from(0)], + [Word::from(1), Word::from(0)], false, ); - try_test!(LtWordTestContainer, vec![Word::MAX, Word::MAX], false,); + try_test!(LtWordTestContainer, [Word::MAX, Word::MAX], false,); try_test!( LtWordTestContainer, - vec![WORD_HIGH_MAX, WORD_LOW_MAX], + [WORD_HIGH_MAX, WORD_LOW_MAX], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/min_max.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/min_max.rs index ee6b101ab8..b2b4589bcc 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/min_max.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/min_max.rs @@ -19,7 +19,7 @@ impl MinMaxGadget { lhs: Expression, rhs: Expression, ) -> Self { - let lt = LtGadget::construct(cb, lhs.clone(), rhs.clone()); + let lt = cb.is_lt(lhs.clone(), rhs.clone()); let max = select::expr(lt.expr(), rhs.clone(), lhs.clone()); let min = select::expr(lt.expr(), lhs, rhs); @@ -110,17 +110,17 @@ mod tests { // a == b try_test!( MinMaxTestContainer, - vec![Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0)], true, ); try_test!( MinMaxTestContainer, - vec![Word::from(5), Word::from(5)], + [Word::from(5), Word::from(5)], true, ); try_test!( MinMaxTestContainer, - vec![WORD_LOW_MAX, WORD_LOW_MAX], + [WORD_LOW_MAX, WORD_LOW_MAX], true, ); } @@ -130,17 +130,17 @@ mod tests { // min == a, max == b try_test!( MinMaxTestContainer, - vec![Word::from(0), Word::from(1)], + [Word::from(0), Word::from(1)], true, ); try_test!( MinMaxTestContainer, - vec![Word::from(3), Word::from(5)], + [Word::from(3), Word::from(5)], true, ); try_test!( MinMaxTestContainer, - vec![WORD_LOW_MAX, WORD_LOW_MAX], + [WORD_LOW_MAX, WORD_LOW_MAX], true, ); } @@ -150,17 +150,17 @@ mod tests { // min == b, max == a try_test!( MinMaxTestContainer, - vec![Word::from(1), Word::from(0)], + [Word::from(1), Word::from(0)], false, ); try_test!( MinMaxTestContainer, - vec![Word::from(256), Word::from(3)], + [Word::from(256), Word::from(3)], false, ); try_test!( MinMaxTestContainer, - vec![WORD_LOW_MAX, Word::from(123456)], + [WORD_LOW_MAX, Word::from(123456)], false, ); } @@ -170,19 +170,19 @@ mod tests { // min == a, max == b try_test!( MinMaxTestContainer, - vec![Word::from(1), Word::from(0)], + [Word::from(1), Word::from(0)], true, ); try_test!( MinMaxTestContainer, - vec![Word::from(777), Word::from(44)], + [Word::from(777), Word::from(44)], true, ); try_test!( MinMaxTestContainer, - vec![WORD_LOW_MAX+1, WORD_LOW_MAX], + [WORD_LOW_MAX+1, WORD_LOW_MAX], true, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/modulo.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/modulo.rs index 4a8fa8726e..0c1ffdca6e 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/modulo.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/modulo.rs @@ -5,7 +5,7 @@ use crate::{ CachedRegion, }, util::{ - word::{self, Word32Cell, WordExpr}, + word::{Word32Cell, WordExpr, WordLoHi}, Expr, }, }; @@ -36,11 +36,11 @@ impl ModGadget { let (a, n, r) = (words[0], words[1], words[2]); let k = cb.query_word32(); let a_or_zero = cb.query_word32(); - let n_is_zero = IsZeroWordGadget::construct(cb, n); - let a_or_is_zero = IsZeroWordGadget::construct(cb, &a_or_zero); + let n_is_zero = cb.is_zero_word(n); + let a_or_is_zero = cb.is_zero_word(&a_or_zero); let mul_add_words = MulAddWordsGadget::construct(cb, [&k, n, r, &a_or_zero]); - let eq = IsEqualWordGadget::construct(cb, a, &a_or_zero); - let lt = LtWordGadget::construct(cb, &r.to_word(), &n.to_word()); + let eq = cb.is_eq_word(a, &a_or_zero); + let lt = cb.is_lt_word(&r.to_word(), &n.to_word()); // Constrain the aux variable a_or_zero to be =a or =0 if n==0: // (a == a_or_zero) ^ (n == 0 & a_or_zero == 0) cb.add_constraint( @@ -82,17 +82,17 @@ impl ModGadget { self.k.assign_u256(region, offset, k)?; self.a_or_zero.assign_u256(region, offset, a_or_zero)?; - self.n_is_zero.assign(region, offset, word::Word::from(n))?; + self.n_is_zero.assign(region, offset, WordLoHi::from(n))?; self.a_or_is_zero - .assign(region, offset, word::Word::from(a_or_zero))?; + .assign(region, offset, WordLoHi::from(a_or_zero))?; self.mul_add_words .assign(region, offset, [k, n, r, a_or_zero])?; self.lt.assign(region, offset, r, n)?; self.eq.assign_value( region, offset, - Value::known(word::Word::from(a)), - Value::known(word::Word::from(a_or_zero)), + Value::known(WordLoHi::from(a)), + Value::known(WordLoHi::from(a_or_zero)), )?; Ok(()) @@ -156,37 +156,37 @@ mod tests { fn test_mod_n_expected_rem() { try_test!( ModGadgetTestContainer, - vec![Word::from(0), Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0), Word::from(0)], true, ); try_test!( ModGadgetTestContainer, - vec![Word::from(1), Word::from(0), Word::from(0)], + [Word::from(1), Word::from(0), Word::from(0)], true, ); try_test!( ModGadgetTestContainer, - vec![Word::from(548), Word::from(50), Word::from(48)], + [Word::from(548), Word::from(50), Word::from(48)], true, ); try_test!( ModGadgetTestContainer, - vec![Word::from(30), Word::from(50), Word::from(30)], + [Word::from(30), Word::from(50), Word::from(30)], true, ); try_test!( ModGadgetTestContainer, - vec![WORD_LOW_MAX, Word::from(1024), Word::from(1023)], + [WORD_LOW_MAX, Word::from(1024), Word::from(1023)], true, ); try_test!( ModGadgetTestContainer, - vec![WORD_HIGH_MAX, Word::from(1024), Word::from(0)], + [WORD_HIGH_MAX, Word::from(1024), Word::from(0)], true, ); try_test!( ModGadgetTestContainer, - vec![WORD_CELL_MAX, Word::from(2), Word::from(0)], + [WORD_CELL_MAX, Word::from(2), Word::from(0)], true, ); } @@ -203,7 +203,7 @@ mod tests { // ModGadget, the statement would be invalid in the ModGadget. try_test!( ModGadgetTestContainer, - vec![ + [ Word::from(2), Word::from(3), Word::from(0), @@ -214,27 +214,27 @@ mod tests { ); try_test!( ModGadgetTestContainer, - vec![Word::from(1), Word::from(1), Word::from(1)], + [Word::from(1), Word::from(1), Word::from(1)], false, ); try_test!( ModGadgetTestContainer, - vec![Word::from(46), Word::from(50), Word::from(48)], + [Word::from(46), Word::from(50), Word::from(48)], false, ); try_test!( ModGadgetTestContainer, - vec![WORD_LOW_MAX, Word::from(999999), Word::from(888888)], + [WORD_LOW_MAX, Word::from(999999), Word::from(888888)], false, ); try_test!( ModGadgetTestContainer, - vec![WORD_CELL_MAX, Word::from(999999999), Word::from(666666666)], + [WORD_CELL_MAX, Word::from(999999999), Word::from(666666666)], false, ); try_test!( ModGadgetTestContainer, - vec![WORD_HIGH_MAX, Word::from(999999), Word::from(777777)], + [WORD_HIGH_MAX, Word::from(999999), Word::from(777777)], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words.rs index 85b9ee0b7c..b526e6380e 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words.rs @@ -4,7 +4,7 @@ use crate::{ from_bytes, pow_of_two_expr, split_u256, split_u256_limb64, CachedRegion, Cell, }, util::{ - word::{Word, Word32Cell, Word4, WordExpr}, + word::{Word32Cell, Word4, WordExpr, WordLoHi}, Expr, }, }; @@ -68,8 +68,8 @@ impl MulAddWordsGadget { b_limbs.push(word4_b.limbs[i].expr()); } - let word_c: Word> = c.to_word(); - let word_d: Word> = d.to_word(); + let word_c: WordLoHi> = c.to_word(); + let word_d: WordLoHi> = d.to_word(); let t0 = a_limbs[0].clone() * b_limbs[0].clone(); let t1 = a_limbs[0].clone() * b_limbs[1].clone() + a_limbs[1].clone() * b_limbs[0].clone(); @@ -211,7 +211,7 @@ mod tests { // 0 * 0 + 0 == 0 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(0), Word::from(0), Word::from(0), @@ -223,7 +223,7 @@ mod tests { // 1 * 0 + 0 == 0 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(1), Word::from(0), Word::from(0), @@ -235,7 +235,7 @@ mod tests { // 1 * 1 + 0 == 1 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(1), Word::from(1), Word::from(0), @@ -247,7 +247,7 @@ mod tests { // 1 * 1 + 1 == 2 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(1), Word::from(1), Word::from(1), @@ -259,7 +259,7 @@ mod tests { // 100 * 54 + 98 == 5498 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(100), Word::from(54), Word::from(98), @@ -271,7 +271,7 @@ mod tests { // 100 * 54 + low_max == low_max + 5400 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(100), Word::from(54), WORD_LOW_MAX, @@ -283,7 +283,7 @@ mod tests { // 100 * 54 + high_max == high_max + 5400 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(100), Word::from(54), WORD_HIGH_MAX, @@ -299,7 +299,7 @@ mod tests { // high_max + low_max + 1 == 0 with overflow 1 try_test!( MulAddGadgetContainer, - vec![ + [ WORD_LOW_MAX + 1, Word::from(1), WORD_HIGH_MAX, @@ -318,7 +318,7 @@ mod tests { // overflow == 73786976294838206460 + ((1<<64)-1)*((1<<64)-1)*6 try_test!( MulAddGadgetContainer, - vec![ + [ Word::MAX, Word::MAX, Word::MAX, @@ -334,7 +334,7 @@ mod tests { // 10 * 1 + 1 != 3 try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(10), Word::from(1), Word::from(1), @@ -347,7 +347,7 @@ mod tests { // 1 * 1 + 1 != word_max, no underflow try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(1), Word::from(1), Word::from(1), @@ -360,7 +360,7 @@ mod tests { // 100 * 54 + high_max == high_max + 5400, no overflow try_test!( MulAddGadgetContainer, - vec![ + [ Word::from(100), Word::from(54), WORD_HIGH_MAX, @@ -373,7 +373,7 @@ mod tests { // (low_max + 1) * 1 + high_max == 0 with overflow 1 try_test!( MulAddGadgetContainer, - vec![ + [ WORD_LOW_MAX + 1, Word::from(1), WORD_HIGH_MAX, diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words512.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words512.rs index c4becb836e..fed7c98d87 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words512.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_add_words512.rs @@ -4,7 +4,7 @@ use crate::{ from_bytes, pow_of_two_expr, split_u256, split_u256_limb64, CachedRegion, Cell, }, util::{ - word::{self, Word4, WordExpr}, + word::{Word32Cell, Word4, WordExpr}, Expr, }, }; @@ -57,8 +57,8 @@ impl MulAddWords512Gadget { /// Addend is the optional c. pub(crate) fn construct( cb: &mut EVMConstraintBuilder, - words: [&word::Word32Cell; 4], - addend: Option<&word::Word32Cell>, + words: [&Word32Cell; 4], + addend: Option<&Word32Cell>, ) -> Self { let carry_0 = cb.query_bytes(); let carry_1 = cb.query_bytes(); @@ -207,11 +207,11 @@ mod tests { /// MulAddWords512GadgetContainer: require(a * b + c == d * 2**256 + e) struct MulAddWords512GadgetContainer { math_gadget: MulAddWords512Gadget, - a: word::Word32Cell, - b: word::Word32Cell, - d: word::Word32Cell, - e: word::Word32Cell, - addend: word::Word32Cell, + a: Word32Cell, + b: Word32Cell, + d: Word32Cell, + e: Word32Cell, + addend: Word32Cell, } impl MathGadgetContainer for MulAddWords512GadgetContainer { @@ -258,7 +258,7 @@ mod tests { // 0 * 0 + 0 == 0 * 2**256 + 0 try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(0), Word::from(0), Word::from(0), @@ -270,7 +270,7 @@ mod tests { // 1 * 0 + 0 == 0 * 2**256 + 0 try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(1), Word::from(0), Word::from(0), @@ -282,7 +282,7 @@ mod tests { // 1 * 1 + 0 == 0 * 2**256 + 1 try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(1), Word::from(1), Word::from(0), @@ -294,7 +294,7 @@ mod tests { // 100 * 54 + 0 == 0 * 2**256 + 5400 try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(100), Word::from(54), Word::from(0), @@ -306,7 +306,7 @@ mod tests { // 100 * 54 + max == 1 * 2**256 + 5400 try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(100), Word::from(54), Word::from(1), @@ -318,7 +318,7 @@ mod tests { // 100 * 54 + low_max == 0 * 2**256 + 5400 + low_max try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(100), Word::from(54), Word::from(0), @@ -330,7 +330,7 @@ mod tests { // 100 * 54 + high_max == 0 * 2**256 + 5400 + high_max try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(100), Word::from(54), Word::from(0), @@ -346,7 +346,7 @@ mod tests { // 10 * 1 + 0 != 1 * 2**256 + 3 try_test!( MulAddWords512GadgetContainer, - vec![ + [ Word::from(10), Word::from(1), Word::from(1), diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_word_u64.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_word_u64.rs index 220235a002..ec3d6e69aa 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_word_u64.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/mul_word_u64.rs @@ -142,43 +142,43 @@ mod tests { // 0 * 0 = 0 try_test!( MulWordByU64TestContainer, - vec![Word::from(0), Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0), Word::from(0)], true, ); // max * 0 = 0 try_test!( MulWordByU64TestContainer, - vec![Word::MAX, Word::from(0), Word::from(0)], + [Word::MAX, Word::from(0), Word::from(0)], true, ); // 1 * 1 = 1 try_test!( MulWordByU64TestContainer, - vec![Word::from(1), Word::from(1), Word::from(1)], + [Word::from(1), Word::from(1), Word::from(1)], true, ); // max * 1 = max try_test!( MulWordByU64TestContainer, - vec![Word::MAX, Word::from(1), Word::MAX], + [Word::MAX, Word::from(1), Word::MAX], true, ); // 2 * 2 = 4 try_test!( MulWordByU64TestContainer, - vec![Word::from(2), Word::from(2), Word::from(4)], + [Word::from(2), Word::from(2), Word::from(4)], true, ); // 22222 * 500 = 11111000 try_test!( MulWordByU64TestContainer, - vec![Word::from(22222), Word::from(500), Word::from(11111000)], + [Word::from(22222), Word::from(500), Word::from(11111000)], true, ); // low_max * 2 = low_max << 1 try_test!( MulWordByU64TestContainer, - vec![WORD_LOW_MAX, Word::from(2), WORD_LOW_MAX << 1], + [WORD_LOW_MAX, Word::from(2), WORD_LOW_MAX << 1], true, ); } @@ -187,13 +187,13 @@ mod tests { fn test_mulwordu64_unexpect() { try_test!( MulWordByU64TestContainer, - vec![Word::MAX, Word::from(1), Word::from(1)], + [Word::MAX, Word::from(1), Word::from(1)], false, ); // high_max * 2 = overflow try_test!( MulWordByU64TestContainer, - vec![WORD_HIGH_MAX, Word::from(2), WORD_HIGH_MAX << 1], + [WORD_HIGH_MAX, Word::from(2), WORD_HIGH_MAX << 1], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/pair_select.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/pair_select.rs index 5282aecded..90a562965d 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/pair_select.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/pair_select.rs @@ -128,12 +128,12 @@ mod tests { fn test_pairselect_eq() { try_test!( PairSelectionTestContainer, - vec![Word::from(0), Word::from(0), Word::from(0)], + [Word::from(0), Word::from(0), Word::from(0)], true, ); try_test!( PairSelectionTestContainer, - vec![Word::from(2898), Word::from(2898), Word::from(2898)], + [Word::from(2898), Word::from(2898), Word::from(2898)], true, ); } @@ -142,17 +142,17 @@ mod tests { fn test_pairselect_expect_a_and_a() { try_test!( PairSelectionTestContainer, - vec![Word::from(0), Word::from(0), Word::from(1)], + [Word::from(0), Word::from(0), Word::from(1)], true, ); try_test!( PairSelectionTestContainer, - vec![Word::from(2898), Word::from(2898), Word::from(1)], + [Word::from(2898), Word::from(2898), Word::from(1)], true, ); try_test!( PairSelectionTestContainer, - vec![WORD_LOW_MAX, WORD_LOW_MAX, Word::from(1)], + [WORD_LOW_MAX, WORD_LOW_MAX, Word::from(1)], true, ); } @@ -161,12 +161,12 @@ mod tests { fn test_pairselect_expect_a_but_b() { try_test!( PairSelectionTestContainer, - vec![Word::from(0), Word::from(1), Word::from(0)], + [Word::from(0), Word::from(1), Word::from(0)], false, ); try_test!( PairSelectionTestContainer, - vec![Word::from(2989), Word::from(1), Word::from(2989)], + [Word::from(2989), Word::from(1), Word::from(2989)], false, ); } @@ -175,12 +175,12 @@ mod tests { fn test_pairselect_expect_b_and_b() { try_test!( PairSelectionTestContainer, - vec![Word::from(0), Word::from(1), Word::from(0)], + [Word::from(0), Word::from(1), Word::from(0)], true, ); try_test!( PairSelectionTestContainer, - vec![Word::from(2989), Word::from(1), Word::from(2989)], + [Word::from(2989), Word::from(1), Word::from(2989)], true, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/range_check.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/range_check.rs index 989011c68a..abf282f66c 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/range_check.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/range_check.rs @@ -87,13 +87,13 @@ mod tests { #[test] fn test_rangecheck_just_in_range() { - try_test!(RangeCheckTestContainer, vec![Word::from(0)], true); + try_test!(RangeCheckTestContainer,[Word::from(0)], true); - try_test!(RangeCheckTestContainer, vec![Word::from(1)], true); + try_test!(RangeCheckTestContainer,[Word::from(1)], true); // max - 1 try_test!( RangeCheckTestContainer, - vec![Word::from((1u64 << 32) - 1)], + [Word::from((1u64 << 32) - 1)], true, ); } @@ -102,7 +102,7 @@ mod tests { fn test_rangecheck_out_of_range() { try_test!( RangeCheckTestContainer, - vec![Word::from(1u64 << 32)], + [Word::from(1u64 << 32)], false, ); } diff --git a/zkevm-circuits/src/evm_circuit/util/math_gadget/rlp.rs b/zkevm-circuits/src/evm_circuit/util/math_gadget/rlp.rs index 4b6419b881..d6a8cff542 100644 --- a/zkevm-circuits/src/evm_circuit/util/math_gadget/rlp.rs +++ b/zkevm-circuits/src/evm_circuit/util/math_gadget/rlp.rs @@ -1,7 +1,3 @@ -use crate::{ - evm_circuit::util::rlc, - util::word::{Word32Cell, WordExpr}, -}; use eth_types::{Address, Field, ToScalar, Word}; use gadgets::util::{and, expr_from_bytes, not, select, sum, Expr}; use halo2_proofs::{ @@ -14,10 +10,10 @@ use crate::{ param::{N_BYTES_U64, N_BYTES_WORD}, util::{ constraint_builder::{ConstrainBuilderCommon, EVMConstraintBuilder}, - AccountAddress, CachedRegion, Cell, RandomLinearCombination, + rlc, AccountAddress, CachedRegion, Cell, RandomLinearCombination, }, }, - util::word, + util::word::{Word32Cell, WordExpr, WordLoHi}, }; use super::IsZeroGadget; @@ -52,7 +48,7 @@ impl RlpU64Gadget { .zip(&is_most_significant_byte) .map(|(byte, indicator)| byte.expr() * indicator.expr()), ); - let most_significant_byte_is_zero = IsZeroGadget::construct(cb, most_significant_byte); + let most_significant_byte_is_zero = cb.is_zero(most_significant_byte); let is_lt_128 = cb.query_bool(); let value = expr_from_bytes(&value_rlc.cells); @@ -260,7 +256,7 @@ impl ContractCreateGadget { } /// Caller address' value. - pub(crate) fn caller_address(&self) -> word::Word> { + pub(crate) fn caller_address(&self) -> WordLoHi> { self.caller_address.to_word() } @@ -270,7 +266,7 @@ impl ContractCreateGadget { } /// Code hash word RLC. - pub(crate) fn code_hash(&self) -> word::Word> { + pub(crate) fn code_hash(&self) -> WordLoHi> { self.code_hash.to_word() } @@ -287,7 +283,7 @@ impl ContractCreateGadget { ) } - pub(crate) fn salt(&self) -> word::Word> { + pub(crate) fn salt(&self) -> WordLoHi> { self.salt.to_word() } @@ -513,7 +509,7 @@ mod test { }; try_test!( ContractCreateGadgetContainer, - vec![ + [ caller_address.to_word(), Word::from(caller_nonce), rlp_len, diff --git a/zkevm-circuits/src/evm_circuit/util/memory_gadget.rs b/zkevm-circuits/src/evm_circuit/util/memory_gadget.rs index d9bf830820..bbd2bbcfac 100644 --- a/zkevm-circuits/src/evm_circuit/util/memory_gadget.rs +++ b/zkevm-circuits/src/evm_circuit/util/memory_gadget.rs @@ -14,7 +14,7 @@ use crate::{ }, }, util::{ - word::{Word, WordCell}, + word::{WordLoHi, WordLoHiCell}, Expr, }, }; @@ -55,10 +55,10 @@ pub(crate) trait CommonMemoryAddressGadget { ) -> Result; /// Return original word of memory offset. - fn offset_word(&self) -> Word>; + fn offset_word(&self) -> WordLoHi>; /// Return original word of memory length. - fn length_word(&self) -> Word>; + fn length_word(&self) -> WordLoHi>; /// Return valid memory length of Uint64. fn length(&self) -> Expression; @@ -74,7 +74,7 @@ pub(crate) trait CommonMemoryAddressGadget { #[derive(Clone, Debug)] pub(crate) struct MemoryAddressGadget { memory_offset_bytes: MemoryAddress, - memory_offset: WordCell, + memory_offset: WordLoHiCell, memory_length: MemoryAddress, memory_length_is_zero: IsZeroGadget, } @@ -82,17 +82,17 @@ pub(crate) struct MemoryAddressGadget { impl MemoryAddressGadget { pub(crate) fn construct( cb: &mut EVMConstraintBuilder, - memory_offset: WordCell, + memory_offset: WordLoHiCell, memory_length: MemoryAddress, ) -> Self { - let memory_length_is_zero = IsZeroGadget::construct(cb, memory_length.sum_expr()); + let memory_length_is_zero = cb.is_zero(memory_length.sum_expr()); let memory_offset_bytes = cb.query_memory_address(); let has_length = 1.expr() - memory_length_is_zero.expr(); cb.condition(has_length, |cb| { cb.require_equal_word( "Offset decomposition into 5 bytes", - Word::from_lo_unchecked(memory_offset_bytes.expr()), + WordLoHi::from_lo_unchecked(memory_offset_bytes.expr()), memory_offset.to_word(), ); }); @@ -157,11 +157,11 @@ impl CommonMemoryAddressGadget for MemoryAddressGadget { }) } - fn offset_word(&self) -> Word> { + fn offset_word(&self) -> WordLoHi> { self.memory_offset.to_word() } - fn length_word(&self) -> Word> { + fn length_word(&self) -> WordLoHi> { self.memory_length.to_word() } @@ -196,16 +196,15 @@ impl CommonMemoryAddressGadget for MemoryExpandedAddressGadget { let length = cb.query_word32(); let sum = cb.query_word32(); - let sum_lt_cap = LtGadget::construct( - cb, + let sum_lt_cap = cb.is_lt( from_bytes::expr(&sum.limbs[..N_BYTES_U64]), (MAX_EXPANDED_MEMORY_ADDRESS + 1).expr(), ); let sum_overflow_hi = sum::expr(&sum.limbs[N_BYTES_U64..]); - let sum_within_u64 = IsZeroGadget::construct(cb, sum_overflow_hi); + let sum_within_u64 = cb.is_zero(sum_overflow_hi); - let length_is_zero = IsZeroGadget::construct(cb, sum::expr(&length.limbs)); + let length_is_zero = cb.is_zero(sum::expr(&length.limbs)); let offset_length_sum = AddWordsGadget::construct(cb, [offset, length], sum); Self { @@ -260,12 +259,12 @@ impl CommonMemoryAddressGadget for MemoryExpandedAddressGadget { Ok(address) } - fn offset_word(&self) -> Word> { + fn offset_word(&self) -> WordLoHi> { let addends = self.offset_length_sum.addends(); addends[0].to_word() } - fn length_word(&self) -> Word> { + fn length_word(&self) -> WordLoHi> { let addends = self.offset_length_sum.addends(); addends[1].to_word() } @@ -340,7 +339,7 @@ pub(crate) struct MemoryWordSizeGadget { impl MemoryWordSizeGadget { pub(crate) fn construct(cb: &mut EVMConstraintBuilder, address: Expression) -> Self { - let memory_word_size = ConstantDivisionGadget::construct(cb, address + 31.expr(), 32); + let memory_word_size = cb.div_by_const(address + 31.expr(), 32); Self { memory_word_size } } @@ -613,7 +612,7 @@ impl let is_empty = not::expr(&selectors[0]); let cap = select::expr(is_empty.expr(), 0.expr(), MAX_BYTES.expr()); let signed_len = addr_end - addr_start; - let min_gadget = MinMaxGadget::construct(cb, cap, signed_len); + let min_gadget = cb.min_max(cap, signed_len); // If we claim that the buffer is empty, we prove that the end is at or before the start. // buffer_len = max(0, signed_len) = 0 @@ -802,7 +801,7 @@ mod test { // buffer len = data len try_test!( BufferReaderGadgetTestContainer, - vec![ + [ Word::from(0), Word::from(2), Word::from(256), @@ -813,7 +812,7 @@ mod test { // buffer len > data len try_test!( BufferReaderGadgetTestContainer, - vec![ + [ Word::from(0), Word::from(2), Word::from(256), @@ -827,7 +826,7 @@ mod test { // buffer len < data len try_test!( BufferReaderGadgetTestContainer, - vec![ + [ Word::from(0), Word::from(1), Word::from(256), @@ -838,7 +837,7 @@ mod test { // buffer len <= 0 try_test!( BufferReaderGadgetTestContainer, - vec![ + [ Word::from(1), Word::from(0), Word::from(256), @@ -849,7 +848,7 @@ mod test { // empty buffer try_test!( BufferReaderGadgetTestContainer, - vec![ + [ Word::from(0), Word::from(0), Word::from(256), @@ -860,7 +859,7 @@ mod test { // MAX_BYTES < buffer size try_test!( BufferReaderGadgetTestContainer, - vec![ + [ Word::from(0), Word::from(31), Word::from(256), diff --git a/zkevm-circuits/src/evm_circuit/util/tx.rs b/zkevm-circuits/src/evm_circuit/util/tx.rs index d3987300ed..d99b029ffd 100644 --- a/zkevm-circuits/src/evm_circuit/util/tx.rs +++ b/zkevm-circuits/src/evm_circuit/util/tx.rs @@ -9,12 +9,12 @@ use crate::{ math_gadget::{ AddWordsGadget, ConstantDivisionGadget, IsEqualGadget, MulWordByU64Gadget, }, - CachedRegion, Cell, Word, + CachedRegion, Cell, }, witness::{Block, Transaction}, }, table::{CallContextFieldTag, TxContextFieldTag, TxReceiptFieldTag}, - util::word::{Word32Cell, WordCell}, + util::word::{Word32Cell, WordLoHi, WordLoHiCell}, }; use bus_mapping::operation::Target; use eth_types::{evm_types::GasCost, Field}; @@ -42,7 +42,7 @@ impl BeginTxHelperGadget { cb.call_context_lookup_write( Some(call_id.expr()), CallContextFieldTag::TxId, - Word::from_lo_unchecked(tx_id.expr()), + WordLoHi::from_lo_unchecked(tx_id.expr()), ); // rwc_delta += 1 // Add first BeginTx step constraint to have id == 1 @@ -81,7 +81,7 @@ impl EndTxHelperGadget { gas_used: Expression, num_rw: Expression, ) -> Self { - let is_first_tx = IsEqualGadget::construct(cb, tx_id.expr(), 1.expr()); + let is_first_tx = cb.is_eq(tx_id.expr(), 1.expr()); // Constrain tx receipt fields cb.tx_receipt_lookup( @@ -133,7 +133,7 @@ impl EndTxHelperGadget { Some(next_step_rwc), CallContextFieldTag::TxId, // tx_id has been lookup and range_check above - Word::from_lo_unchecked(tx_id.expr() + 1.expr()), + WordLoHi::from_lo_unchecked(tx_id.expr() + 1.expr()), ); // minus 1.expr() because `call_context_lookup_write_with_counter` do not bump // rwc @@ -196,8 +196,8 @@ impl EndTxHelperGadget { #[derive(Clone, Debug)] pub(crate) struct TxDataGadget { pub(crate) nonce: Cell, - pub(crate) caller_address: WordCell, - pub(crate) callee_address: WordCell, + pub(crate) caller_address: WordLoHiCell, + pub(crate) callee_address: WordLoHiCell, pub(crate) is_create: Cell, pub(crate) gas: Cell, pub(crate) call_data_length: Cell, @@ -240,8 +240,7 @@ impl TxDataGadget { // Calculate transaction gas fee let mul_gas_fee_by_gas = MulWordByU64Gadget::construct(cb, gas_price.clone(), gas.expr()); - let call_data_word_length = - ConstantDivisionGadget::construct(cb, call_data_length.expr() + 31.expr(), 32); + let call_data_word_length = cb.div_by_const(call_data_length.expr() + 31.expr(), 32); let (cost_sum, gas_mul_gas_price_plus_value) = if calculate_total_cost { let cost_sum = cb.query_word32(); diff --git a/zkevm-circuits/src/exp_circuit.rs b/zkevm-circuits/src/exp_circuit.rs index 80a8173385..5251308dcd 100644 --- a/zkevm-circuits/src/exp_circuit.rs +++ b/zkevm-circuits/src/exp_circuit.rs @@ -490,7 +490,7 @@ impl ExpCircuit { Self { exp_events, max_exp_rows, - _marker: PhantomData::default(), + _marker: PhantomData, } } } diff --git a/zkevm-circuits/src/instance.rs b/zkevm-circuits/src/instance.rs index fd3f67510b..a1ecc1cf92 100644 --- a/zkevm-circuits/src/instance.rs +++ b/zkevm-circuits/src/instance.rs @@ -7,7 +7,7 @@ use std::{iter, ops::Deref}; use eth_types::{geth_types::Transaction, Address, ToBigEndian, Word, H256}; use itertools::Itertools; -use crate::{util::word, witness::Block}; +use crate::{util::word::WordLoHi, witness::Block}; pub(super) const ZERO_BYTE_GAS_COST: u64 = 4; pub(super) const NONZERO_BYTE_GAS_COST: u64 = 16; @@ -289,11 +289,11 @@ impl PublicData { max_txs: usize, max_withdrawals: usize, max_calldata: usize, - ) -> word::Word { + ) -> WordLoHi { let mut keccak = Keccak::default(); keccak.update(&self.get_pi_bytes(max_txs, max_withdrawals, max_calldata)); let digest = keccak.digest(); - word::Word::from(Word::from_big_endian(&digest)) + WordLoHi::from(Word::from_big_endian(&digest)) } } diff --git a/zkevm-circuits/src/keccak_circuit.rs b/zkevm-circuits/src/keccak_circuit.rs index 64a4a27aa5..b02544fec5 100644 --- a/zkevm-circuits/src/keccak_circuit.rs +++ b/zkevm-circuits/src/keccak_circuit.rs @@ -32,7 +32,7 @@ use crate::{ table::{KeccakTable, LookupTable}, util::{ cell_manager::{CMFixedHeightStrategy, Cell, CellManager, CellType}, - word::{self, WordExpr}, + word::{Word32, WordExpr}, Challenges, SubCircuit, SubCircuitConfig, }, witness, @@ -580,7 +580,7 @@ impl SubCircuitConfig for KeccakCircuitConfig { cb.condition(start_new_hash, |cb| { cb.require_equal_word( "output check", - word::Word32::new(hash_bytes_le.try_into().expect("32 limbs")).to_word(), + Word32::new(hash_bytes_le.try_into().expect("32 limbs")).to_word(), hash_word.map(|col| meta.query_advice(col, Rotation::cur())), ); }); diff --git a/zkevm-circuits/src/keccak_circuit/keccak_packed_multi.rs b/zkevm-circuits/src/keccak_circuit/keccak_packed_multi.rs index 7d90ebc8d2..26a4aea374 100644 --- a/zkevm-circuits/src/keccak_circuit/keccak_packed_multi.rs +++ b/zkevm-circuits/src/keccak_circuit/keccak_packed_multi.rs @@ -1,7 +1,7 @@ use super::{param::*, util::*, DEFAULT_CELL_TYPE}; use crate::util::{ cell_manager::{CMFixedHeightStrategy, Cell, CellManager}, - word::Word, + word::WordLoHi, Challenges, }; use eth_types::Field; @@ -81,7 +81,7 @@ pub(crate) struct KeccakRow { pub(crate) cell_values: Vec, pub(crate) length: usize, pub(crate) data_rlc: Value, - pub(crate) hash: Word>, + pub(crate) hash: WordLoHi>, } /// Part @@ -562,7 +562,7 @@ pub(crate) fn keccak( let mut cell_managers = Vec::new(); let mut regions = Vec::new(); - let mut hash = Word::default(); + let mut hash = WordLoHi::default(); let mut round_lengths = Vec::new(); let mut round_data_rlcs = Vec::new(); for round in 0..NUM_ROUNDS + 1 { @@ -795,13 +795,13 @@ pub(crate) fn keccak( .rev() .collect::>(); - let word: Word> = Word::from(eth_types::Word::from_little_endian( + let word: WordLoHi> = WordLoHi::from(eth_types::Word::from_little_endian( hash_bytes_le.as_slice(), )) .map(Value::known); word } else { - Word::default().into_value() + WordLoHi::default().into_value() }; // The words to squeeze out @@ -888,7 +888,7 @@ pub(crate) fn multi_keccak( is_final: false, length: 0usize, data_rlc: Value::known(F::ZERO), - hash: Word::default().into_value(), + hash: WordLoHi::default().into_value(), cell_values: Vec::new(), }); } diff --git a/zkevm-circuits/src/keccak_circuit/test.rs b/zkevm-circuits/src/keccak_circuit/test.rs index aeb57474b4..90e163b1e9 100644 --- a/zkevm-circuits/src/keccak_circuit/test.rs +++ b/zkevm-circuits/src/keccak_circuit/test.rs @@ -1,7 +1,7 @@ use super::*; use crate::{ evm_circuit::util::rlc, - util::{unusable_rows, word::Word}, + util::{unusable_rows, word::WordLoHi}, }; use bus_mapping::state_db::EMPTY_CODE_HASH_LE; use eth_types::{Field, H256, U256}; @@ -86,7 +86,7 @@ fn verify(k: u32, inputs: Vec>, digests: Vec, success: for (input, digest, hash) in izip!(&inputs, &digests, &hash_lookup_table) { let len = F::from(input.len() as u64); let digest_slice: [u8; 32] = hex::decode(digest).unwrap().try_into().unwrap(); - let (lo, hi): (F, F) = Word::from(H256::from(digest_slice)).to_lo_hi(); + let (lo, hi): (F, F) = WordLoHi::from(H256::from(digest_slice)).to_lo_hi(); let expected = (rlc_input(input), len, lo, hi); @@ -95,7 +95,8 @@ fn verify(k: u32, inputs: Vec>, digests: Vec, success: assert_eq!(hash.2, expected.2); assert_eq!(hash.3, expected.3); } - let (lo, hi) = Word::from(U256::from_little_endian(EMPTY_CODE_HASH_LE.as_slice())).to_lo_hi(); + let (lo, hi) = + WordLoHi::from(U256::from_little_endian(EMPTY_CODE_HASH_LE.as_slice())).to_lo_hi(); // Check that other digests are the digest of the empty message. let empty_hash = (F::ZERO, F::ZERO, lo, hi); diff --git a/zkevm-circuits/src/mpt_circuit.rs b/zkevm-circuits/src/mpt_circuit.rs index dfc557452e..8f4dfbbc9f 100644 --- a/zkevm-circuits/src/mpt_circuit.rs +++ b/zkevm-circuits/src/mpt_circuit.rs @@ -10,7 +10,7 @@ use halo2_proofs::{ poly::Rotation, }; -use std::{convert::TryInto, env::var, marker::PhantomData}; +use std::{convert::TryInto, env::var, io::Read, marker::PhantomData}; mod account_leaf; mod branch; @@ -359,10 +359,10 @@ impl MPTConfig { } let cell_columns = [rlp_cm.columns(), state_cm.columns()].concat(); - println!("max expression degree: {}", meta.degree()); - println!("num lookups: {}", meta.lookups().len()); - println!("num advices: {}", meta.num_advice_columns()); - println!("num fixed: {}", meta.num_fixed_columns()); + log::info!("max expression degree: {}", meta.degree()); + log::info!("num lookups: {}", meta.lookups().len()); + log::info!("num advices: {}", meta.num_advice_columns()); + log::info!("num fixed: {}", meta.num_fixed_columns()); // cb.base.print_stats(); MPTConfig { @@ -733,11 +733,9 @@ impl Circuit for MPTCircuit { } } -/// Loads an MPT proof from disk -pub fn load_proof(path: &str) -> Vec { - let file = std::fs::File::open(path); - let reader = std::io::BufReader::new(file.unwrap()); - let mut nodes: Vec = serde_json::from_reader(reader).unwrap(); +/// Loads an MPT proof from reader +pub fn load_proof(reader: R) -> Result, serde_json::Error> { + let mut nodes: Vec = serde_json::from_reader(reader)?; // Add the address and the key to the list of values in the Account and Storage nodes for node in nodes.iter_mut() { @@ -754,7 +752,14 @@ pub fn load_proof(path: &str) -> Vec { .push([vec![160], storage.key.to_vec()].concat().into()); } } - nodes + Ok(nodes) +} + +/// Loads an MPT proof from disk +pub fn load_proof_from_file(path: &str) -> Vec { + let file = std::fs::File::open(path); + let reader = std::io::BufReader::new(file.unwrap()); + load_proof(reader).unwrap() } #[cfg(test)] @@ -782,7 +787,7 @@ mod tests { let mut parts = path.to_str().unwrap().split('-'); parts.next(); - let nodes = load_proof(path.to_str().unwrap()); + let nodes = load_proof_from_file(path.to_str().unwrap()); let num_rows: usize = nodes.iter().map(|node| node.values.len()).sum(); let mut keccak_data = vec![]; diff --git a/zkevm-circuits/src/mpt_circuit/account_leaf.rs b/zkevm-circuits/src/mpt_circuit/account_leaf.rs index 2b16ff34c7..35d27bc4c6 100644 --- a/zkevm-circuits/src/mpt_circuit/account_leaf.rs +++ b/zkevm-circuits/src/mpt_circuit/account_leaf.rs @@ -1,4 +1,4 @@ -use eth_types::{Field, U256}; +use eth_types::{Field, OpsIdentity, U256}; use gadgets::util::{pow, Scalar}; use halo2_proofs::{ circuit::Value, @@ -30,7 +30,7 @@ use crate::{ MPTConfig, MPTContext, MptMemory, RlpItemType, }, table::MPTProofType, - util::word::{self, Word}, + util::word::WordLoHi, witness::MptUpdateRow, }; @@ -149,10 +149,10 @@ impl AccountLeafConfig { require!(config.main_data.is_below_account => false); let mut key_rlc = vec![0.expr(); 2]; - let mut nonce = vec![Word::zero(); 2]; - let mut balance = vec![Word::zero(); 2]; - let mut storage = vec![Word::zero(); 2]; - let mut codehash = vec![Word::zero(); 2]; + let mut nonce = vec![WordLoHi::zero(); 2]; + let mut balance = vec![WordLoHi::zero(); 2]; + let mut storage = vec![WordLoHi::zero(); 2]; + let mut codehash = vec![WordLoHi::zero(); 2]; let mut leaf_no_key_rlc = vec![0.expr(); 2]; let mut leaf_no_key_rlc_mult = vec![0.expr(); 2]; let mut value_list_num_bytes = vec![0.expr(); 2]; @@ -292,7 +292,7 @@ impl AccountLeafConfig { ifx! {parent_data[is_s.idx()].is_root.expr() => { // If leaf is placeholder and the parent is root (no branch above leaf) and the proof is NonExistingStorageProof, // the trie needs to be empty. - let empty_hash = Word::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); + let empty_hash = WordLoHi::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); let hash = parent_data[is_s.idx()].hash.expr(); require!(hash.lo() => Expression::Constant(empty_hash.lo())); require!(hash.hi() => Expression::Constant(empty_hash.hi())); @@ -467,11 +467,11 @@ impl AccountLeafConfig { &mut cb.base, address.clone(), proof_type.clone(), - Word::zero(), + WordLoHi::zero(), config.main_data.new_root.expr(), config.main_data.old_root.expr(), - Word::>::new([new_value_lo, new_value_hi]), - Word::>::new([old_value_lo.clone(), old_value_hi.clone()]), + WordLoHi::>::new([new_value_lo, new_value_hi]), + WordLoHi::>::new([old_value_lo.clone(), old_value_hi.clone()]), ); } elsex { // Non-existing proof doesn't have the value set to 0 in the case of a wrong leaf - we set it to 0 @@ -481,11 +481,11 @@ impl AccountLeafConfig { &mut cb.base, address.clone(), proof_type.clone(), - Word::zero(), + WordLoHi::zero(), config.main_data.new_root.expr(), config.main_data.old_root.expr(), - Word::zero(), - Word::zero(), + WordLoHi::zero(), + WordLoHi::zero(), ); }}; } elsex { @@ -499,11 +499,11 @@ impl AccountLeafConfig { &mut cb.base, address, proof_type, - Word::zero(), + WordLoHi::zero(), config.main_data.new_root.expr(), config.main_data.old_root.expr(), - Word::zero(), - Word::>::new([old_value_lo, old_value_hi]), + WordLoHi::zero(), + WordLoHi::>::new([old_value_lo, old_value_hi]), ); }}; }); @@ -554,10 +554,10 @@ impl AccountLeafConfig { // Key let mut key_rlc = vec![0.scalar(); 2]; - let mut nonce = vec![Word::zero_f(); 2]; - let mut balance = vec![Word::zero_f(); 2]; - let mut storage = vec![Word::zero_f(); 2]; - let mut codehash = vec![Word::zero_f(); 2]; + let mut nonce = vec![WordLoHi::zero(); 2]; + let mut balance = vec![WordLoHi::zero(); 2]; + let mut storage = vec![WordLoHi::zero(); 2]; + let mut codehash = vec![WordLoHi::zero(); 2]; let mut key_data = vec![KeyDataWitness::default(); 2]; let mut parent_data = vec![ParentDataWitness::default(); 2]; for is_s in [true, false] { @@ -727,11 +727,11 @@ impl AccountLeafConfig { } else if is_codehash_mod { (MPTProofType::CodeHashChanged, codehash) } else if is_account_delete_mod { - (MPTProofType::AccountDestructed, vec![Word::zero_f(); 2]) + (MPTProofType::AccountDestructed, vec![WordLoHi::zero(); 2]) } else if is_non_existing_proof { - (MPTProofType::AccountDoesNotExist, vec![Word::zero_f(); 2]) + (MPTProofType::AccountDoesNotExist, vec![WordLoHi::zero(); 2]) } else { - (MPTProofType::Disabled, vec![Word::zero_f(); 2]) + (MPTProofType::Disabled, vec![WordLoHi::zero(); 2]) }; if account.is_mod_extension[0] || account.is_mod_extension[1] { @@ -746,10 +746,10 @@ impl AccountLeafConfig { let mut new_value = value[false.idx()]; let mut old_value = value[true.idx()]; if parent_data[false.idx()].is_placeholder { - new_value = word::Word::zero_f(); + new_value = WordLoHi::zero(); } else if is_non_existing_proof { - new_value = word::Word::zero_f(); - old_value = word::Word::zero_f(); + new_value = WordLoHi::zero(); + old_value = WordLoHi::zero(); } mpt_config.mpt_table.assign_cached( region, @@ -758,7 +758,7 @@ impl AccountLeafConfig { address: Value::known(from_bytes::value( &account.address.iter().cloned().rev().collect::>(), )), - storage_key: word::Word::zero_f().into_value(), + storage_key: WordLoHi::zero().into_value(), proof_type: Value::known(proof_type.scalar()), new_root: main_data.new_root.into_value(), old_root: main_data.old_root.into_value(), diff --git a/zkevm-circuits/src/mpt_circuit/branch.rs b/zkevm-circuits/src/mpt_circuit/branch.rs index 5909eb0c8a..56ba3e8312 100644 --- a/zkevm-circuits/src/mpt_circuit/branch.rs +++ b/zkevm-circuits/src/mpt_circuit/branch.rs @@ -1,4 +1,4 @@ -use eth_types::Field; +use eth_types::{Field, OpsIdentity}; use gadgets::util::Scalar; use halo2_proofs::plonk::{Error, Expression, VirtualCells}; @@ -13,7 +13,7 @@ use crate::{ circuit, circuit_tools::{ cached_region::CachedRegion, - cell_manager::{Cell, WordCell}, + cell_manager::{Cell, WordLoHiCell}, constraint_builder::RLCChainableRev, gadgets::LtGadget, }, @@ -22,7 +22,7 @@ use crate::{ param::{HASH_WIDTH, RLP_NIL}, MPTConfig, MptMemory, RlpItemType, }, - util::word::{self, Word}, + util::word::WordLoHi, }; #[derive(Clone, Debug)] @@ -33,7 +33,7 @@ pub(crate) struct BranchState { pub(crate) key_mult_post_drifted: Expression, pub(crate) num_nibbles: Expression, pub(crate) is_key_odd: Expression, - pub(crate) mod_word: [Word>; 2], + pub(crate) mod_word: [WordLoHi>; 2], pub(crate) mod_rlc: [Expression; 2], } @@ -42,7 +42,7 @@ pub(crate) struct BranchGadget { rlp_list: [RLPListDataGadget; 2], is_modified: [Cell; ARITY], is_drifted: [Cell; ARITY], - mod_word: [WordCell; 2], + mod_word: [WordLoHiCell; 2], mod_rlc: [Cell; 2], is_not_hashed: [LtGadget; 2], @@ -57,7 +57,7 @@ impl BranchGadget { cb: &mut MPTConstraintBuilder, ctx: MPTContext, is_placeholder: &[Cell; 2], - parent_hash: &[word::Word>; 2], + parent_hash: &[WordLoHi>; 2], parent_rlc: &[Expression; 2], is_root: &[Expression; 2], key_rlc: Expression, @@ -299,7 +299,7 @@ impl BranchGadget { is_key_odd: &mut bool, node: &Node, rlp_values: &[RLPItemWitness], - ) -> Result<(F, F, F, [word::Word; 2], [F; 2]), Error> { + ) -> Result<(F, F, F, [WordLoHi; 2], [F; 2]), Error> { let branch = &node.extension_branch.clone().unwrap().branch; for is_s in [true, false] { @@ -351,7 +351,7 @@ impl BranchGadget { let key_mult_post_branch = *key_mult * mult; // Set the branch we'll take - let mut mod_node_hash_word = [word::Word::zero_f(); 2]; + let mut mod_node_hash_word = [WordLoHi::zero(); 2]; let mut mod_node_hash_rlc = [0.scalar(); 2]; for is_s in [true, false] { ( diff --git a/zkevm-circuits/src/mpt_circuit/extension.rs b/zkevm-circuits/src/mpt_circuit/extension.rs index 4663bdea09..6552eeeb71 100644 --- a/zkevm-circuits/src/mpt_circuit/extension.rs +++ b/zkevm-circuits/src/mpt_circuit/extension.rs @@ -1,4 +1,4 @@ -use eth_types::Field; +use eth_types::{Field, OpsIdentity}; use gadgets::util::{pow, Scalar}; use halo2_proofs::plonk::{Error, Expression, VirtualCells}; @@ -22,7 +22,7 @@ use crate::{ param::HASH_WIDTH, FixedTableTag, MPTConfig, MptMemory, RlpItemType, }, - util::word::Word, + util::word::WordLoHi, }; #[derive(Clone, Debug)] @@ -32,7 +32,7 @@ pub(crate) struct ExtState { pub(crate) num_nibbles: Expression, pub(crate) is_key_odd: Expression, - pub(crate) branch_rlp_word: [Word>; 2], + pub(crate) branch_rlp_word: [WordLoHi>; 2], pub(crate) branch_rlp_rlc: [Expression; 2], } @@ -100,7 +100,7 @@ impl ExtensionGadget { require!((FixedTableTag::ExtOddKey.expr(), first_byte, config.is_key_part_odd.expr()) =>> @FIXED); let mut branch_rlp_rlc = vec![0.expr(); 2]; - let mut branch_rlp_word = vec![Word::zero(); 2]; + let mut branch_rlp_word = vec![WordLoHi::zero(); 2]; for is_s in [true, false] { // In C we have the key nibbles, we check below only for S. if is_s { diff --git a/zkevm-circuits/src/mpt_circuit/extension_branch.rs b/zkevm-circuits/src/mpt_circuit/extension_branch.rs index 50301fd4f8..920136e550 100644 --- a/zkevm-circuits/src/mpt_circuit/extension_branch.rs +++ b/zkevm-circuits/src/mpt_circuit/extension_branch.rs @@ -1,4 +1,4 @@ -use eth_types::Field; +use eth_types::{Field, OpsIdentity}; use gadgets::util::Scalar; use halo2_proofs::plonk::{Error, Expression, VirtualCells}; @@ -17,7 +17,7 @@ use crate::{ helpers::{key_memory, parent_memory, Indexable, KeyData, ParentData}, MPTConfig, MptMemory, }, - util::word::Word, + util::word::WordLoHi, }; #[derive(Clone, Debug, Default)] @@ -114,8 +114,8 @@ impl ExtensionBranchConfig { ) }}; let parent_word = [ - Word::>::new([parent_word_s_lo, parent_word_s_hi]), - Word::>::new([parent_word_c_lo, parent_word_c_hi]), + WordLoHi::>::new([parent_word_s_lo, parent_word_s_hi]), + WordLoHi::>::new([parent_word_c_lo, parent_word_c_hi]), ]; let parent_rlc = [parent_rlc_s, parent_rlc_c]; let is_root = [is_root_s, is_root_c]; @@ -158,7 +158,7 @@ impl ExtensionBranchConfig { branch.mod_rlc[is_s.idx()].expr(), false.expr(), false.expr(), - Word::zero(), + WordLoHi::zero(), ); } elsex { // For the placeholder branch / extension node the values did not change, we reuse @@ -291,7 +291,7 @@ impl ExtensionBranchConfig { mod_node_hash_rlc[is_s.idx()], false, false, - Word::zero_f(), + WordLoHi::zero(), )?; } else { KeyData::witness_store( diff --git a/zkevm-circuits/src/mpt_circuit/helpers.rs b/zkevm-circuits/src/mpt_circuit/helpers.rs index ffdd697504..b780b47a63 100644 --- a/zkevm-circuits/src/mpt_circuit/helpers.rs +++ b/zkevm-circuits/src/mpt_circuit/helpers.rs @@ -2,7 +2,7 @@ use crate::{ assign, circuit, circuit_tools::{ cached_region::{CachedRegion, ChallengeSet}, - cell_manager::{Cell, CellManager, CellType, WordCell}, + cell_manager::{Cell, CellManager, CellType, WordLoHiCell}, constraint_builder::{ ConstraintBuilder, RLCChainable, RLCChainableRev, RLCChainableValue, RLCable, }, @@ -22,12 +22,9 @@ use crate::{ rlp_gadgets::{get_ext_odd_nibble, get_terminal_odd_nibble}, }, table::LookupTable, - util::{ - word::{self, Word}, - Challenges, Expr, - }, + util::{word::WordLoHi, Challenges, Expr}, }; -use eth_types::{Field, Word as U256}; +use eth_types::{Field, OpsIdentity, Word as U256}; use gadgets::util::{not, or, pow, xor, Scalar}; use halo2_proofs::{ circuit::Value, @@ -557,20 +554,20 @@ impl KeyData { #[derive(Clone, Debug, Default)] pub(crate) struct ParentData { - pub(crate) hash: WordCell, + pub(crate) hash: WordLoHiCell, pub(crate) rlc: Cell, pub(crate) is_root: Cell, pub(crate) is_placeholder: Cell, - pub(crate) drifted_parent_hash: WordCell, + pub(crate) drifted_parent_hash: WordLoHiCell, } #[derive(Clone, Debug, Default)] pub(crate) struct ParentDataWitness { - pub(crate) hash: word::Word, + pub(crate) hash: WordLoHi, pub(crate) rlc: F, pub(crate) is_root: bool, pub(crate) is_placeholder: bool, - pub(crate) drifted_parent_hash: word::Word, + pub(crate) drifted_parent_hash: WordLoHi, } impl ParentData { @@ -607,11 +604,11 @@ impl ParentData { pub(crate) fn store>( cb: &mut MPTConstraintBuilder, memory: &mut MB, - hash: word::Word>, + hash: WordLoHi>, rlc: Expression, is_root: Expression, is_placeholder: Expression, - drifted_parent_hash: word::Word>, + drifted_parent_hash: WordLoHi>, ) { memory.store( &mut cb.base, @@ -632,11 +629,11 @@ impl ParentData { _region: &mut CachedRegion<'_, '_, F>, offset: usize, memory: &mut MB, - hash: word::Word, + hash: WordLoHi, rlc: F, force_hashed: bool, is_placeholder: bool, - drifted_parent_hash: word::Word, + drifted_parent_hash: WordLoHi, ) -> Result<(), Error> { memory.witness_store( offset, @@ -675,11 +672,11 @@ impl ParentData { .assign(region, offset, values[6])?; Ok(ParentDataWitness { - hash: word::Word::new([values[0], values[1]]), + hash: WordLoHi::new([values[0], values[1]]), rlc: values[2], is_root: values[3] == 1.scalar(), is_placeholder: values[4] == 1.scalar(), - drifted_parent_hash: word::Word::new([values[5], values[6]]), + drifted_parent_hash: WordLoHi::new([values[5], values[6]]), }) } } @@ -689,8 +686,8 @@ pub(crate) struct MainData { pub(crate) proof_type: Cell, pub(crate) is_below_account: Cell, pub(crate) address: Cell, - pub(crate) new_root: WordCell, - pub(crate) old_root: WordCell, + pub(crate) new_root: WordLoHiCell, + pub(crate) old_root: WordLoHiCell, } #[derive(Clone, Debug, Default)] @@ -698,8 +695,8 @@ pub(crate) struct MainDataWitness { pub(crate) proof_type: usize, pub(crate) is_below_account: bool, pub(crate) address: F, - pub(crate) new_root: word::Word, - pub(crate) old_root: word::Word, + pub(crate) new_root: WordLoHi, + pub(crate) old_root: WordLoHi, } impl MainData { @@ -749,8 +746,8 @@ impl MainData { proof_type: usize, is_below_account: bool, address: F, - new_root: word::Word, - old_root: word::Word, + new_root: WordLoHi, + old_root: WordLoHi, ) -> Result<(), Error> { let values = [ proof_type.scalar(), @@ -787,8 +784,8 @@ impl MainData { proof_type: values[0].get_lower_32() as usize, is_below_account: values[1] == 1.scalar(), address: values[2], - new_root: word::Word::new([values[3], values[4]]), - old_root: word::Word::new([values[5], values[6]]), + new_root: WordLoHi::new([values[3], values[4]]), + old_root: WordLoHi::new([values[5], values[6]]), }) } } @@ -992,7 +989,7 @@ impl MPTConstraintBuilder { } // default query_word is 2 limbs. Each limb is not guaranteed to be 128 bits. - pub(crate) fn query_word_unchecked(&mut self) -> WordCell { + pub(crate) fn query_word_unchecked(&mut self) -> WordLoHiCell { self.base.query_word_unchecked() } @@ -1069,20 +1066,20 @@ pub struct IsPlaceholderLeafGadget { impl IsPlaceholderLeafGadget { pub(crate) fn construct( cb: &mut MPTConstraintBuilder, - parent_word: Word>, + parent_word: WordLoHi>, ) -> Self { circuit!([meta, cb.base], { - let empty_hash = Word::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); + let empty_hash = WordLoHi::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); let is_empty_trie = IsEqualWordGadget::construct( &mut cb.base, &parent_word, - &Word::>::new([ + &WordLoHi::>::new([ Expression::Constant(empty_hash.lo()), Expression::Constant(empty_hash.hi()), ]), ); let is_nil_in_branch_at_mod_index = - IsEqualWordGadget::construct(&mut cb.base, &parent_word, &Word::zero()); + IsEqualWordGadget::construct(&mut cb.base, &parent_word, &WordLoHi::zero()); Self { is_empty_trie, @@ -1102,16 +1099,16 @@ impl IsPlaceholderLeafGadget { &self, region: &mut CachedRegion<'_, '_, F>, offset: usize, - hash: Word, + hash: WordLoHi, ) -> Result<(), Error> { - let empty_hash = Word::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); + let empty_hash = WordLoHi::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); self.is_empty_trie .assign(region, offset, hash, empty_hash)?; self.is_nil_in_branch_at_mod_index.assign( region, offset, hash, - Word::::from(U256::zero()), + WordLoHi::::from(U256::zero()), )?; Ok(()) } @@ -1309,7 +1306,7 @@ pub struct MainRLPGadget { mult_diff: Cell, hash_rlc: Cell, rlc_rlp: Cell, - word: WordCell, + word: WordLoHiCell, tag: Cell, max_len: Cell, is_rlp: Cell, @@ -1342,7 +1339,7 @@ impl MainRLPGadget { ensure_minimal_rlp: cb.query_cell(), keccak_r: Some(cb.keccak_r.expr()), }; - let all_bytes = vec![vec![config.rlp_byte.clone()], config.bytes.clone()].concat(); + let all_bytes = [vec![config.rlp_byte.clone()], config.bytes.clone()].concat(); // Decode the RLP item config.rlp = @@ -1587,7 +1584,7 @@ impl MainRLPGadget { .collect(), is_short: Some(self.rlp.value.is_short.rot(meta, rot)), is_long: Some(self.rlp.value.is_long.rot(meta, rot)), - word: Some(Word::new([ + word: Some(WordLoHi::new([ self.word.lo().rot(meta, rot), self.word.hi().rot(meta, rot), ])), @@ -1635,7 +1632,7 @@ pub struct RLPItemView { rlc_rlp: Option>, is_short: Option>, is_long: Option>, - word: Option>>, + word: Option>>, } impl RLPItemView { @@ -1685,7 +1682,7 @@ impl RLPItemView { not::expr(self.is_short() + self.is_long()) } - pub(crate) fn word(&self) -> Word> { + pub(crate) fn word(&self) -> WordLoHi> { assert!(self.can_use_word); self.word.clone().unwrap() } diff --git a/zkevm-circuits/src/mpt_circuit/mod_extension.rs b/zkevm-circuits/src/mpt_circuit/mod_extension.rs index e5c2721048..c1ea30addd 100644 --- a/zkevm-circuits/src/mpt_circuit/mod_extension.rs +++ b/zkevm-circuits/src/mpt_circuit/mod_extension.rs @@ -100,8 +100,8 @@ impl ModExtensionGadget { (parent_data[1].hash.lo().expr(), parent_data[1].hash.hi().expr(), parent_data[1].drifted_parent_hash.lo().expr(), parent_data[1].drifted_parent_hash.hi().expr()) }}; - let parent_data_lo = vec![lo_s, lo_c]; - let parent_data_hi = vec![hi_s, hi_c]; + let parent_data_lo = [lo_s, lo_c]; + let parent_data_hi = [hi_s, hi_c]; let ( parent_data_rlc, key_rlc_before, @@ -139,7 +139,7 @@ impl ModExtensionGadget { for is_s in [true, false] { config.is_key_part_odd[is_s.idx()] = cb.query_cell(); - let items = vec![ + let items = [ key_items[is_s.idx()].clone(), key_nibbles[is_s.idx()].clone(), ]; diff --git a/zkevm-circuits/src/mpt_circuit/rlp_gadgets.rs b/zkevm-circuits/src/mpt_circuit/rlp_gadgets.rs index d86f0b1c02..b1218c7994 100644 --- a/zkevm-circuits/src/mpt_circuit/rlp_gadgets.rs +++ b/zkevm-circuits/src/mpt_circuit/rlp_gadgets.rs @@ -12,7 +12,7 @@ use crate::{ param::{RLP_LIST_LONG, RLP_LIST_SHORT, RLP_SHORT}, FixedTableTag, }, - util::{word, Expr}, + util::{word::WordLoHi, Expr}, }; use eth_types::Field; use gadgets::util::{not, pow, Scalar}; @@ -833,8 +833,8 @@ impl RLPItemWitness { } } - pub(crate) fn word(&self) -> word::Word { - // word::Word::from(Word::from_big_endian(&self.bytes[1..33])) + pub(crate) fn word(&self) -> WordLoHi { + // WordLoHi::from(WordLoHi::from_big_endian(&self.bytes[1..33])) let (lo, hi) = if self.is_string() { if self.is_short() { let lo: F = self.bytes[0].scalar(); @@ -890,6 +890,6 @@ impl RLPItemWitness { ); (lo, hi) }; - word::Word::new([lo, hi]) + WordLoHi::new([lo, hi]) } } diff --git a/zkevm-circuits/src/mpt_circuit/start.rs b/zkevm-circuits/src/mpt_circuit/start.rs index ae9d1ab40b..37ee126e36 100644 --- a/zkevm-circuits/src/mpt_circuit/start.rs +++ b/zkevm-circuits/src/mpt_circuit/start.rs @@ -13,9 +13,9 @@ use crate::{ }, MPTConfig, MPTContext, MptMemory, RlpItemType, }, - util::word::Word, + util::word::WordLoHi, }; -use eth_types::Field; +use eth_types::{Field, OpsIdentity}; use gadgets::util::Scalar; use halo2_proofs::plonk::{Error, VirtualCells}; @@ -40,7 +40,7 @@ impl StartConfig { config.proof_type = cb.query_cell(); - let mut root = vec![Word::zero(); 2]; + let mut root = vec![WordLoHi::zero(); 2]; for is_s in [true, false] { root[is_s.idx()] = root_items[is_s.idx()].word(); } @@ -96,7 +96,7 @@ impl StartConfig { self.proof_type .assign(region, offset, start.proof_type.scalar())?; - let mut root = vec![Word::zero_f(); 2]; + let mut root = [WordLoHi::zero(); 2]; for is_s in [true, false] { root[is_s.idx()] = rlp_values[is_s.idx()].word(); } diff --git a/zkevm-circuits/src/mpt_circuit/storage_leaf.rs b/zkevm-circuits/src/mpt_circuit/storage_leaf.rs index 83ada89e27..6a698a8195 100644 --- a/zkevm-circuits/src/mpt_circuit/storage_leaf.rs +++ b/zkevm-circuits/src/mpt_circuit/storage_leaf.rs @@ -1,4 +1,4 @@ -use eth_types::{Field, U256}; +use eth_types::{Field, OpsIdentity, U256}; use gadgets::util::Scalar; use halo2_proofs::{ circuit::Value, @@ -24,7 +24,7 @@ use crate::{ MPTConfig, MPTContext, MptMemory, RlpItemType, }, table::MPTProofType, - util::word::{self, Word}, + util::word::WordLoHi, witness::MptUpdateRow, }; @@ -104,7 +104,7 @@ impl StorageLeafConfig { require!(config.main_data.is_below_account => true); let mut key_rlc = vec![0.expr(); 2]; - let mut value_word = vec![Word::zero(); 2]; + let mut value_word = vec![WordLoHi::zero(); 2]; let mut value_rlp_rlc = vec![0.expr(); 2]; let mut value_rlp_rlc_mult = vec![0.expr(); 2]; @@ -168,7 +168,7 @@ impl StorageLeafConfig { require!(config.rlp_value[is_s.idx()].num_bytes() => value_item[is_s.idx()].num_bytes() + 1.expr()); (value.lo(), value.hi(), value_rlp_rlc, rlp_value_rlc_mult.1 * value_item[is_s.idx()].mult()) }}; - value_word[is_s.idx()] = Word::>::new([value_lo, value_hi]); + value_word[is_s.idx()] = WordLoHi::>::new([value_lo, value_hi]); let leaf_rlc = rlp_key.rlc2(&cb.keccak_r).rlc_chain_rev(( value_rlp_rlc[is_s.idx()].expr(), @@ -191,7 +191,7 @@ impl StorageLeafConfig { // Placeholder leaves default to value `0`. ifx! {is_placeholder_leaf => { - require!(value_word[is_s.idx()] => Word::zero()); + require!(value_word[is_s.idx()] => WordLoHi::>::zero()); }} // Make sure the RLP encoding is correct. @@ -223,7 +223,7 @@ impl StorageLeafConfig { ifx! {parent_data[is_s.idx()].is_root.expr() => { // If leaf is placeholder and the parent is root (no branch above leaf) and the proof is NonExistingStorageProof, // the trie needs to be empty. - let empty_hash = Word::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); + let empty_hash = WordLoHi::::from(U256::from_big_endian(&EMPTY_TRIE_HASH)); let hash = parent_data[is_s.idx()].hash.expr(); require!(hash.lo() => Expression::Constant(empty_hash.lo())); require!(hash.hi() => Expression::Constant(empty_hash.hi())); @@ -246,11 +246,11 @@ impl StorageLeafConfig { ParentData::store( cb, &mut ctx.memory[parent_memory(is_s)], - word::Word::zero(), + WordLoHi::zero(), 0.expr(), true.expr(), false.expr(), - word::Word::zero(), + WordLoHi::zero(), ); } @@ -377,8 +377,8 @@ impl StorageLeafConfig { address_item.word(), config.main_data.new_root.expr(), config.main_data.old_root.expr(), - Word::>::new([0.expr(), 0.expr()]), - Word::>::new([0.expr(), 0.expr()]), + WordLoHi::>::new([0.expr(), 0.expr()]), + WordLoHi::>::new([0.expr(), 0.expr()]), ); }}; } elsex { @@ -395,7 +395,7 @@ impl StorageLeafConfig { address_item.word(), config.main_data.new_root.expr(), config.main_data.old_root.expr(), - Word::zero(), + WordLoHi::zero(), value_word[true.idx()].clone(), ); }}; @@ -436,7 +436,7 @@ impl StorageLeafConfig { let mut key_data = vec![KeyDataWitness::default(); 2]; let mut parent_data = vec![ParentDataWitness::default(); 2]; let mut key_rlc = vec![0.scalar(); 2]; - let mut value_word = vec![Word::zero_f(); 2]; + let mut value_word = [WordLoHi::zero(); 2]; for is_s in [true, false] { self.is_mod_extension[is_s.idx()].assign( region, @@ -504,7 +504,7 @@ impl StorageLeafConfig { &storage.value_rlp_bytes[is_s.idx()], )?; value_word[is_s.idx()] = if value_witness.is_short() { - Word::::new([value_witness.rlc_value(region.key_r), 0.scalar()]) + WordLoHi::::new([value_witness.rlc_value(region.key_r), 0.scalar()]) } else { value_item[is_s.idx()].word() }; @@ -513,11 +513,11 @@ impl StorageLeafConfig { region, offset, &mut memory[parent_memory(is_s)], - word::Word::::new([F::ZERO, F::ZERO]), + WordLoHi::::new([F::ZERO, F::ZERO]), F::ZERO, true, false, - word::Word::::new([F::ZERO, F::ZERO]), + WordLoHi::::new([F::ZERO, F::ZERO]), )?; self.is_placeholder_leaf[is_s.idx()].assign( @@ -571,8 +571,8 @@ impl StorageLeafConfig { MPTProofType::Disabled as usize, false, F::ZERO, - Word::new([F::ZERO, F::ZERO]), - Word::new([F::ZERO, F::ZERO]), + WordLoHi::new([F::ZERO, F::ZERO]), + WordLoHi::new([F::ZERO, F::ZERO]), )?; // Put the data in the lookup table @@ -596,10 +596,10 @@ impl StorageLeafConfig { let mut new_value = value_word[false.idx()]; let mut old_value = value_word[true.idx()]; if parent_data[false.idx()].is_placeholder { - new_value = word::Word::zero_f(); + new_value = WordLoHi::zero(); } else if is_non_existing_proof { - new_value = word::Word::zero_f(); - old_value = word::Word::zero_f(); + new_value = WordLoHi::zero(); + old_value = WordLoHi::zero(); } mpt_config.mpt_table.assign_cached( region, diff --git a/zkevm-circuits/src/pi_circuit.rs b/zkevm-circuits/src/pi_circuit.rs index 89e6ae5051..1c9f700202 100644 --- a/zkevm-circuits/src/pi_circuit.rs +++ b/zkevm-circuits/src/pi_circuit.rs @@ -33,7 +33,7 @@ use crate::{ }, table::{BlockTable, KeccakTable, LookupTable, TxFieldTag, TxTable, WdTable}, tx_circuit::TX_LEN, - util::{word::Word, Challenges, SubCircuit, SubCircuitConfig}, + util::{word::WordLoHi, Challenges, SubCircuit, SubCircuitConfig}, witness, }; use gadgets::{ @@ -402,8 +402,8 @@ impl SubCircuitConfig for PiCircuitConfig { let default_calldata_row_constraint4 = tx_id_is_zero_config.expr() * gas_cost.expr(); // if tx_id != 0 then - // 1. tx_id_next == tx_id: idx_next == idx + 1, gas_cost_next == gas_cost + - // gas_next, is_final == false; + // 1. tx_id_next == tx_id: idx_next == idx + 1, gas_cost_next == gas_cost + gas_next, + // is_final == false; // 2. tx_id_next == tx_id + 1 + x (where x is in [0, 2^16)): idx_next == 0, // gas_cost_next == gas_next, is_final == true; // 3. tx_id_next == 0: is_final == true, idx_next == 0, gas_cost_next == 0; @@ -617,7 +617,7 @@ impl PiCircuitConfig { offset, || Value::known(F::ZERO), )?; - Word::default().into_value().assign_advice( + WordLoHi::default().into_value().assign_advice( region, || "tx_value", self.tx_table.value, @@ -698,7 +698,7 @@ impl PiCircuitConfig { F::ZERO }; let tag = F::from(tag as u64); - let tx_value = Word::new([ + let tx_value = WordLoHi::new([ from_bytes::value( &tx_value_bytes_le[..min(N_BYTES_HALF_WORD, tx_value_bytes_le.len())], ), @@ -811,7 +811,7 @@ impl PiCircuitConfig { let tx_id_diff_inv = tx_id_diff.invert().unwrap_or(F::ZERO); let tag = F::from(TxFieldTag::CallData as u64); let index = F::from(index as u64); - let tx_value: Word> = Word::from(tx_value_byte).into_value(); + let tx_value: WordLoHi> = WordLoHi::from(tx_value_byte).into_value(); let tx_value_inv = tx_value.map(|t| t.map(|x| x.invert().unwrap_or(F::ZERO))); let is_final = if is_final { F::ONE } else { F::ZERO }; @@ -910,7 +910,7 @@ impl PiCircuitConfig { offset, || Value::known(F::from(wd.validator_id)), )?; - let address_assigned_cell = Word::::from(wd.address).into_value().assign_advice( + let address_assigned_cell = WordLoHi::::from(wd.address).into_value().assign_advice( region, || "address", self.wd_table.address, @@ -1095,7 +1095,7 @@ impl PiCircuitConfig { Ok(( rpi_bytes_keccakrlc_cells[0].clone(), - Word::new( + WordLoHi::new( (0..2) // padding rpi_value_lc_cells to 2 limbs if less then 2 .map(|i| rpi_value_lc_cells.get(i).unwrap_or(&zero_cell).clone()) .collect_vec() @@ -1123,7 +1123,7 @@ impl PiCircuitConfig { let mut block_copy_cells = vec![]; // coinbase - let block_value = Word::from(block_values.coinbase) + let block_value = WordLoHi::from(block_values.coinbase) .into_value() .assign_advice( region, @@ -1150,7 +1150,7 @@ impl PiCircuitConfig { *block_table_offset += 1; // gas_limit - let block_value = Word::from(block_values.gas_limit) + let block_value = WordLoHi::from(block_values.gas_limit) .into_value() .assign_advice( region, @@ -1171,12 +1171,14 @@ impl PiCircuitConfig { *block_table_offset += 1; // number - let block_value = Word::from(block_values.number).into_value().assign_advice( - region, - || "number", - self.block_table.value, - *block_table_offset, - )?; + let block_value = WordLoHi::from(block_values.number) + .into_value() + .assign_advice( + region, + || "number", + self.block_table.value, + *block_table_offset, + )?; let (_, word) = self.assign_raw_bytes( region, &block_values.number.to_le_bytes(), @@ -1190,7 +1192,7 @@ impl PiCircuitConfig { *block_table_offset += 1; // timestamp - let block_value = Word::from(block_values.timestamp) + let block_value = WordLoHi::from(block_values.timestamp) .into_value() .assign_advice( region, @@ -1211,7 +1213,7 @@ impl PiCircuitConfig { *block_table_offset += 1; // difficulty - let block_value = Word::from(block_values.difficulty) + let block_value = WordLoHi::from(block_values.difficulty) .into_value() .assign_advice( region, @@ -1232,7 +1234,7 @@ impl PiCircuitConfig { *block_table_offset += 1; // base_fee - let block_value = Word::from(block_values.base_fee) + let block_value = WordLoHi::from(block_values.base_fee) .into_value() .assign_advice( region, @@ -1253,7 +1255,7 @@ impl PiCircuitConfig { *block_table_offset += 1; // chain_id - let block_value = Word::from(block_values.chain_id) + let block_value = WordLoHi::from(block_values.chain_id) .into_value() .assign_advice( region, @@ -1274,7 +1276,7 @@ impl PiCircuitConfig { *block_table_offset += 1; // withdrawals_root - let block_value = Word::from(block_values.withdrawals_root) + let block_value = WordLoHi::from(block_values.withdrawals_root) .into_value() .assign_advice( region, @@ -1295,7 +1297,7 @@ impl PiCircuitConfig { *block_table_offset += 1; for prev_hash in block_values.history_hashes { - let block_value = Word::from(prev_hash).into_value().assign_advice( + let block_value = WordLoHi::from(prev_hash).into_value().assign_advice( region, || "prev_hash", self.block_table.value, @@ -1402,8 +1404,8 @@ impl PiCircuitConfig { fn assign_rpi_digest_word( &self, region: &mut Region<'_, F>, - digest_word: Word, - ) -> Result>, Error> { + digest_word: WordLoHi, + ) -> Result>, Error> { let lo_assigned_cell = region.assign_advice( || "rpi_digest_bytes_limbs_lo", self.rpi_digest_bytes_limbs, @@ -1416,7 +1418,7 @@ impl PiCircuitConfig { 1, || digest_word.into_value().hi(), )?; - Ok(Word::new([lo_assigned_cell, hi_assigned_cell])) + Ok(WordLoHi::new([lo_assigned_cell, hi_assigned_cell])) } } @@ -1562,7 +1564,7 @@ impl SubCircuit for PiCircuit { let mut block_table_offset = 0; // assign empty row in block table - let zero_word = Word::default().into_value().assign_advice( + let zero_word = WordLoHi::default().into_value().assign_advice( &mut region, || "zero", config.block_table.value, @@ -1619,7 +1621,7 @@ impl SubCircuit for PiCircuit { // Add empty row // assign first tx_value empty row, and to obtain zero cell via hi() part. // we use hi() part to copy-constrains other tx_table value `hi` cells. - let zero_cell = Word::default() + let zero_cell = WordLoHi::default() .into_value() .assign_advice(&mut region, || "tx_value", config.tx_table.value, 0)? .hi(); diff --git a/zkevm-circuits/src/pi_circuit/param.rs b/zkevm-circuits/src/pi_circuit/param.rs index fff7391e76..044e63c92e 100644 --- a/zkevm-circuits/src/pi_circuit/param.rs +++ b/zkevm-circuits/src/pi_circuit/param.rs @@ -1,10 +1,10 @@ use halo2_proofs::circuit::AssignedCell; -use crate::util::word::Word; +use crate::util::word::WordLoHi; /// Fixed by the spec pub(super) const BYTE_POW_BASE: u64 = 256; pub(super) const EMPTY_TX_ROW_COUNT: usize = 1; pub(super) const N_BYTES_ONE: usize = 1; -pub(super) type AssignedByteCells = (AssignedCell, Word>); +pub(super) type AssignedByteCells = (AssignedCell, WordLoHi>); diff --git a/zkevm-circuits/src/state_circuit.rs b/zkevm-circuits/src/state_circuit.rs index d48d836b77..81825492f4 100644 --- a/zkevm-circuits/src/state_circuit.rs +++ b/zkevm-circuits/src/state_circuit.rs @@ -19,7 +19,7 @@ use self::{ }; use crate::{ table::{AccountFieldTag, LookupTable, MPTProofType, MptTable, RwTable, UXTable}, - util::{word, Challenges, Expr, SubCircuit, SubCircuitConfig}, + util::{word::WordLoHi, Challenges, Expr, SubCircuit, SubCircuitConfig}, witness::{self, MptUpdates, Rw, RwMap}, }; use constraint_builder::{ConstraintBuilder, Queries}; @@ -56,14 +56,14 @@ pub struct StateCircuitConfig { // Assigned value at the start of the block. For Rw::Account and // Rw::AccountStorage rows this is the committed value in the MPT, for // others, it is 0. - initial_value: word::Word>, + initial_value: WordLoHi>, // For Rw::AccountStorage, identify non-existing if both committed value and // new value are zero. Will do lookup for MPTProofType::StorageDoesNotExist if // non-existing, otherwise do lookup for MPTProofType::StorageChanged. is_non_exist: BatchedIsZeroConfig, // Intermediary witness used to reduce mpt lookup expression degree mpt_proof_type: Column, - state_root: word::Word>, + state_root: WordLoHi>, lexicographic_ordering: LexicographicOrderingConfig, not_first_access: Column, lookups: LookupsConfig, @@ -118,7 +118,7 @@ impl SubCircuitConfig for StateCircuitConfig { [rw_table.storage_key.lo(), rw_table.storage_key.hi()], lookups, ); - let initial_value = word::Word::new([meta.advice_column(), meta.advice_column()]); + let initial_value = WordLoHi::new([meta.advice_column(), meta.advice_column()]); let is_non_exist = BatchedIsZeroChip::configure( meta, @@ -134,7 +134,7 @@ impl SubCircuitConfig for StateCircuitConfig { }, ); let mpt_proof_type = meta.advice_column_in(SecondPhase); - let state_root = word::Word::new([meta.advice_column(), meta.advice_column()]); + let state_root = WordLoHi::new([meta.advice_column(), meta.advice_column()]); let sort_keys = SortKeysConfig { tag, @@ -168,7 +168,7 @@ impl SubCircuitConfig for StateCircuitConfig { lookups, rw_table, mpt_table, - _marker: PhantomData::default(), + _marker: PhantomData, }; let mut constraint_builder = ConstraintBuilder::new(); @@ -283,7 +283,7 @@ impl StateCircuitConfig { } // The initial value can be determined from the mpt updates or is 0. - let initial_value = word::Word::::from( + let initial_value = WordLoHi::::from( updates .get(row) .map(|u| u.value_assignments().1) @@ -305,8 +305,8 @@ impl StateCircuitConfig { .unwrap_or_default(); let value = row.value_assignment(); ( - word::Word::::from(committed_value), - word::Word::::from(value), + WordLoHi::::from(committed_value), + WordLoHi::::from(value), ) }; @@ -353,9 +353,12 @@ impl StateCircuitConfig { // State root assignment is at previous row (offset - 1) because the state root // changes on the last access row. if offset != 0 { - word::Word::::from(state_root) - .into_value() - .assign_advice(region, || "state root", self.state_root, offset - 1)?; + WordLoHi::::from(state_root).into_value().assign_advice( + region, + || "state root", + self.state_root, + offset - 1, + )?; } if offset == rows_len - 1 { @@ -368,9 +371,12 @@ impl StateCircuitConfig { new_root }; } - word::Word::::from(state_root) - .into_value() - .assign_advice(region, || "last row state_root", self.state_root, offset)?; + WordLoHi::::from(state_root).into_value().assign_advice( + region, + || "last row state_root", + self.state_root, + offset, + )?; } } @@ -441,7 +447,7 @@ impl StateCircuit { n_rows, #[cfg(test)] overrides: HashMap::new(), - _marker: PhantomData::default(), + _marker: PhantomData, } } } @@ -529,8 +535,8 @@ fn queries(meta: &mut VirtualCells<'_, F>, c: &StateCircuitConfig) assert_eq!(mpt_update_table_expressions.len(), 12); let meta_query_word = - |metap: &mut VirtualCells<'_, F>, word_column: word::Word>, at: Rotation| { - word::Word::new([ + |metap: &mut VirtualCells<'_, F>, word_column: WordLoHi>, at: Rotation| { + WordLoHi::new([ metap.query_advice(word_column.lo(), at), metap.query_advice(word_column.hi(), at), ]) @@ -557,24 +563,24 @@ fn queries(meta: &mut VirtualCells<'_, F>, c: &StateCircuitConfig) // TODO: clean this up mpt_update_table: MptUpdateTableQueries { address: mpt_update_table_expressions[0].clone(), - storage_key: word::Word::new([ + storage_key: WordLoHi::new([ mpt_update_table_expressions[1].clone(), mpt_update_table_expressions[2].clone(), ]), proof_type: mpt_update_table_expressions[3].clone(), - new_root: word::Word::new([ + new_root: WordLoHi::new([ mpt_update_table_expressions[4].clone(), mpt_update_table_expressions[5].clone(), ]), - old_root: word::Word::new([ + old_root: WordLoHi::new([ mpt_update_table_expressions[6].clone(), mpt_update_table_expressions[7].clone(), ]), - new_value: word::Word::new([ + new_value: WordLoHi::new([ mpt_update_table_expressions[8].clone(), mpt_update_table_expressions[9].clone(), ]), - old_value: word::Word::new([ + old_value: WordLoHi::new([ mpt_update_table_expressions[10].clone(), mpt_update_table_expressions[11].clone(), ]), diff --git a/zkevm-circuits/src/state_circuit/constraint_builder.rs b/zkevm-circuits/src/state_circuit/constraint_builder.rs index 1fb866cc0e..f2abbd6faf 100644 --- a/zkevm-circuits/src/state_circuit/constraint_builder.rs +++ b/zkevm-circuits/src/state_circuit/constraint_builder.rs @@ -11,6 +11,7 @@ use eth_types::Field; use gadgets::binary_number::BinaryNumberConfig; use halo2_proofs::plonk::Expression; use strum::IntoEnumIterator; +use word::WordLoHi; #[derive(Clone)] pub struct RwTableQueries { @@ -23,21 +24,21 @@ pub struct RwTableQueries { pub address: Expression, pub prev_address: Expression, pub field_tag: Expression, - pub storage_key: word::Word>, - pub value: word::Word>, - pub value_prev: word::Word>, // meta.query(value, Rotation::prev()) - pub value_prev_column: word::Word>, // meta.query(prev_value, Rotation::cur()) + pub storage_key: WordLoHi>, + pub value: WordLoHi>, + pub value_prev: WordLoHi>, // meta.query(value, Rotation::prev()) + pub value_prev_column: WordLoHi>, // meta.query(prev_value, Rotation::cur()) } #[derive(Clone)] pub struct MptUpdateTableQueries { pub address: Expression, - pub storage_key: word::Word>, + pub storage_key: WordLoHi>, pub proof_type: Expression, - pub new_root: word::Word>, - pub old_root: word::Word>, - pub new_value: word::Word>, - pub old_value: word::Word>, + pub new_root: WordLoHi>, + pub old_root: WordLoHi>, + pub new_value: WordLoHi>, + pub old_value: WordLoHi>, } #[derive(Clone)] @@ -52,16 +53,16 @@ pub struct Queries { pub is_tag_and_id_unchanged: Expression, pub address: MpiQueries, pub storage_key: MpiQueries, - pub initial_value: word::Word>, - pub initial_value_prev: word::Word>, + pub initial_value: WordLoHi>, + pub initial_value_prev: WordLoHi>, pub is_non_exist: Expression, pub mpt_proof_type: Expression, pub lookups: LookupsQueries, pub first_different_limb: [Expression; 4], pub not_first_access: Expression, pub last_access: Expression, - pub state_root: word::Word>, - pub state_root_prev: word::Word>, + pub state_root: WordLoHi>, + pub state_root_prev: WordLoHi>, } type Constraint = (&'static str, Expression); @@ -82,7 +83,7 @@ impl LookupBuilder { self.0.push((e1.clone(), e2.clone())); self } - fn add_word(mut self, e1: &word::Word>, e2: &word::Word>) -> Self { + fn add_word(mut self, e1: &WordLoHi>, e2: &WordLoHi>) -> Self { self.0.push((e1.lo(), e2.lo())); self.0.push((e1.hi(), e2.hi())); self @@ -532,7 +533,7 @@ impl ConstraintBuilder { self.constraints.push((name, self.condition.clone() * e)); } - fn require_word_zero(&mut self, name: &'static str, e: word::Word>) { + fn require_word_zero(&mut self, name: &'static str, e: WordLoHi>) { let (lo, hi) = e.into_lo_hi(); self.constraints.push((name, self.condition.clone() * hi)); self.constraints.push((name, self.condition.clone() * lo)); @@ -545,8 +546,8 @@ impl ConstraintBuilder { fn require_word_equal( &mut self, name: &'static str, - left: word::Word>, - right: word::Word>, + left: WordLoHi>, + right: WordLoHi>, ) { let (left_lo, left_hi) = left.into_lo_hi(); let (right_lo, right_hi) = right.into_lo_hi(); @@ -558,7 +559,7 @@ impl ConstraintBuilder { self.require_zero(name, e.clone() * (1.expr() - e)) } - fn require_word_boolean(&mut self, name: &'static str, e: word::Word>) { + fn require_word_boolean(&mut self, name: &'static str, e: WordLoHi>) { let (lo, hi) = e.into_lo_hi(); self.require_zero(name, hi); self.require_zero(name, lo.clone() * (1.expr() - lo)); @@ -606,15 +607,15 @@ impl Queries { self.rw_table.field_tag.clone() } - fn value(&self) -> word::Word> { + fn value(&self) -> WordLoHi> { self.rw_table.value.clone() } - fn initial_value(&self) -> word::Word> { + fn initial_value(&self) -> WordLoHi> { self.initial_value.clone() } - fn initial_value_prev(&self) -> word::Word> { + fn initial_value_prev(&self) -> WordLoHi> { self.initial_value_prev.clone() } @@ -646,15 +647,15 @@ impl Queries { self.last_access.clone() } - fn state_root(&self) -> word::Word> { + fn state_root(&self) -> WordLoHi> { self.state_root.clone() } - fn state_root_prev(&self) -> word::Word> { + fn state_root_prev(&self) -> WordLoHi> { self.state_root_prev.clone() } - fn value_prev_column(&self) -> word::Word> { + fn value_prev_column(&self) -> WordLoHi> { self.rw_table.value_prev_column.clone() } } diff --git a/zkevm-circuits/src/state_circuit/lexicographic_ordering.rs b/zkevm-circuits/src/state_circuit/lexicographic_ordering.rs index 062a85cb00..4d90c23dae 100644 --- a/zkevm-circuits/src/state_circuit/lexicographic_ordering.rs +++ b/zkevm-circuits/src/state_circuit/lexicographic_ordering.rs @@ -38,10 +38,8 @@ use strum_macros::EnumIter; // 1. limb_difference fits into 16 bits. // 2. limb_difference is not zero because its inverse exists. -// 3. RLC of the pairwise limb differences before the first_different_limb is -// zero. -// 4. limb_difference equals the difference of the limbs at -// first_different_limb. +// 3. RLC of the pairwise limb differences before the first_different_limb is zero. +// 4. limb_difference equals the difference of the limbs at first_different_limb. #[derive(Clone, Copy, Debug, EnumIter)] pub enum LimbIndex { @@ -312,7 +310,7 @@ fn rlc_limb_differences( ) -> Vec> { let mut result = vec![]; let mut partial_sum = 0u64.expr(); - let powers_of_randomness = once(1.expr()).chain(powers_of_randomness.into_iter()); + let powers_of_randomness = once(1.expr()).chain(powers_of_randomness); for ((cur_limb, prev_limb), power_of_randomness) in cur .be_limbs() .iter() diff --git a/zkevm-circuits/src/state_circuit/lookups.rs b/zkevm-circuits/src/state_circuit/lookups.rs index 41b45a3fb1..697be10c5f 100644 --- a/zkevm-circuits/src/state_circuit/lookups.rs +++ b/zkevm-circuits/src/state_circuit/lookups.rs @@ -31,7 +31,6 @@ impl Config { vec![exp] .into_iter() .zip_eq(self.u16_table.table_exprs(meta)) - .map(|(exp, table_expr)| (exp, table_expr)) .collect() }); } diff --git a/zkevm-circuits/src/state_circuit/test.rs b/zkevm-circuits/src/state_circuit/test.rs index f0a81c9fc8..e072443f88 100644 --- a/zkevm-circuits/src/state_circuit/test.rs +++ b/zkevm-circuits/src/state_circuit/test.rs @@ -929,7 +929,7 @@ fn variadic_size_check() { updates, overrides: HashMap::default(), n_rows: N_ROWS, - _marker: std::marker::PhantomData::default(), + _marker: std::marker::PhantomData, }; let power_of_randomness = circuit.instance(); let prover1 = MockProver::::run(17, &circuit, power_of_randomness).unwrap(); @@ -957,7 +957,7 @@ fn variadic_size_check() { updates, overrides: HashMap::default(), n_rows: N_ROWS, - _marker: std::marker::PhantomData::default(), + _marker: std::marker::PhantomData, }; let power_of_randomness = circuit.instance(); let prover2 = MockProver::::run(17, &circuit, power_of_randomness).unwrap(); @@ -997,7 +997,7 @@ fn prover(rows: Vec, overrides: HashMap<(AdviceColumn, isize), Fr>) -> MockP updates, overrides, n_rows: N_ROWS, - _marker: std::marker::PhantomData::default(), + _marker: std::marker::PhantomData, }; let instance = circuit.instance(); diff --git a/zkevm-circuits/src/table.rs b/zkevm-circuits/src/table.rs index 6db3668519..fb0be4aefd 100644 --- a/zkevm-circuits/src/table.rs +++ b/zkevm-circuits/src/table.rs @@ -4,11 +4,7 @@ use crate::{ copy_circuit::util::number_or_hash_to_word, evm_circuit::util::rlc, impl_expr, - util::{ - build_tx_log_address, keccak, - word::{self, Word}, - Challenges, - }, + util::{build_tx_log_address, keccak, word::WordLoHi, Challenges}, witness::{Block, BlockContext, MptUpdateRow, MptUpdates, Rw, RwMap, RwRow, Transaction}, }; use bus_mapping::circuit_input_builder::{CopyDataType, CopyEvent, CopyStep}; diff --git a/zkevm-circuits/src/table/block_table.rs b/zkevm-circuits/src/table/block_table.rs index b697ff42f3..0d7cc0dfce 100644 --- a/zkevm-circuits/src/table/block_table.rs +++ b/zkevm-circuits/src/table/block_table.rs @@ -36,7 +36,7 @@ pub struct BlockTable { /// Index pub index: Column, /// Value - pub value: word::Word>, + pub value: WordLoHi>, } impl BlockTable { @@ -45,7 +45,7 @@ impl BlockTable { Self { tag: meta.fixed_column(), index: meta.fixed_column(), - value: word::Word::new([meta.advice_column(), meta.advice_column()]), + value: WordLoHi::new([meta.advice_column(), meta.advice_column()]), } } @@ -75,7 +75,7 @@ impl BlockTable { || row[1], )?; - word::Word::new([row[2], row[3]]).assign_advice( + WordLoHi::new([row[2], row[3]]).assign_advice( &mut region, || format!("block table value {}", offset), self.value, diff --git a/zkevm-circuits/src/table/bytecode_table.rs b/zkevm-circuits/src/table/bytecode_table.rs index 3599180297..f433a2a777 100644 --- a/zkevm-circuits/src/table/bytecode_table.rs +++ b/zkevm-circuits/src/table/bytecode_table.rs @@ -1,5 +1,4 @@ use super::*; -use crate::util; use bus_mapping::state_db::CodeDB; /// Tag to identify the field in a Bytecode Table row @@ -16,7 +15,7 @@ impl_expr!(BytecodeFieldTag); #[derive(Clone, Debug)] pub struct BytecodeTable { /// Code Hash - pub code_hash: word::Word>, + pub code_hash: WordLoHi>, /// Tag pub tag: Column, /// Index @@ -31,7 +30,7 @@ impl BytecodeTable { /// Construct a new BytecodeTable pub fn construct(meta: &mut ConstraintSystem) -> Self { let [tag, index, is_code, value] = array::from_fn(|_| meta.advice_column()); - let code_hash = word::Word::new([meta.advice_column(), meta.advice_column()]); + let code_hash = WordLoHi::new([meta.advice_column(), meta.advice_column()]); Self { code_hash, tag, @@ -66,7 +65,7 @@ impl BytecodeTable { >::advice_columns(self); for bytecode in bytecodes.clone().into_iter() { let rows = { - let code_hash = util::word::Word::from(bytecode.hash()); + let code_hash = WordLoHi::from(bytecode.hash()); std::iter::once([ code_hash.lo(), code_hash.hi(), diff --git a/zkevm-circuits/src/table/copy_table.rs b/zkevm-circuits/src/table/copy_table.rs index 9fc4dab9a8..cbd9cbbdb2 100644 --- a/zkevm-circuits/src/table/copy_table.rs +++ b/zkevm-circuits/src/table/copy_table.rs @@ -14,7 +14,7 @@ pub struct CopyTable { /// 1. Call ID/Caller ID for CopyDataType::Memory /// 2. The hi/lo limbs of bytecode hash for CopyDataType::Bytecode /// 3. Transaction ID for CopyDataType::TxCalldata, CopyDataType::TxLog - pub id: word::Word>, + pub id: WordLoHi>, /// The source/destination address for this copy step. Can be memory /// address, byte index in the bytecode, tx call data, and tx log data. pub addr: Column, @@ -45,7 +45,7 @@ impl CopyTable { pub fn construct(meta: &mut ConstraintSystem, q_enable: Column) -> Self { Self { is_first: meta.advice_column(), - id: word::Word::new([meta.advice_column(), meta.advice_column()]), + id: WordLoHi::new([meta.advice_column(), meta.advice_column()]), q_enable, tag: BinaryNumberChip::configure(meta, q_enable, None), addr: meta.advice_column(), diff --git a/zkevm-circuits/src/table/keccak_table.rs b/zkevm-circuits/src/table/keccak_table.rs index 7f36be98a1..6957a09e98 100644 --- a/zkevm-circuits/src/table/keccak_table.rs +++ b/zkevm-circuits/src/table/keccak_table.rs @@ -10,7 +10,7 @@ pub struct KeccakTable { /// Byte array input length pub input_len: Column, /// Output hash word - pub output: word::Word>, + pub output: WordLoHi>, } impl LookupTable for KeccakTable { @@ -42,7 +42,7 @@ impl KeccakTable { is_enabled: meta.advice_column(), input_rlc: meta.advice_column_in(SecondPhase), input_len: meta.advice_column(), - output: word::Word::new([meta.advice_column(), meta.advice_column()]), + output: WordLoHi::new([meta.advice_column(), meta.advice_column()]), } } @@ -55,7 +55,7 @@ impl KeccakTable { .keccak_input() .map(|challenge| rlc::value(input.iter().rev(), challenge)); let input_len = F::from(input.len() as u64); - let output = word::Word::from(keccak(input)); + let output = WordLoHi::from(keccak(input)); vec![[ Value::known(F::ONE), @@ -130,7 +130,7 @@ impl KeccakTable { &self, value_rlc: Column, length: Column, - code_hash: Word>, + code_hash: WordLoHi>, ) -> Vec<(Column, Column)> { vec![ (value_rlc, self.input_rlc), diff --git a/zkevm-circuits/src/table/mpt_table.rs b/zkevm-circuits/src/table/mpt_table.rs index 87a30a5cba..2e24e0fef7 100644 --- a/zkevm-circuits/src/table/mpt_table.rs +++ b/zkevm-circuits/src/table/mpt_table.rs @@ -46,17 +46,17 @@ pub struct MptTable { /// Account address pub address: Column, /// Storage address - pub storage_key: word::Word>, + pub storage_key: WordLoHi>, /// Proof type pub proof_type: Column, /// New MPT root - pub new_root: word::Word>, + pub new_root: WordLoHi>, /// Previous MPT root - pub old_root: word::Word>, + pub old_root: WordLoHi>, /// New value - pub new_value: word::Word>, + pub new_value: WordLoHi>, /// Old value - pub old_value: word::Word>, + pub old_value: WordLoHi>, } impl LookupTable for MptTable { @@ -103,12 +103,12 @@ impl MptTable { pub(crate) fn construct(meta: &mut ConstraintSystem) -> Self { Self { address: meta.advice_column(), - storage_key: word::Word::new([meta.advice_column(), meta.advice_column()]), + storage_key: WordLoHi::new([meta.advice_column(), meta.advice_column()]), proof_type: meta.advice_column(), - new_root: word::Word::new([meta.advice_column(), meta.advice_column()]), - old_root: word::Word::new([meta.advice_column(), meta.advice_column()]), - new_value: word::Word::new([meta.advice_column(), meta.advice_column()]), - old_value: word::Word::new([meta.advice_column(), meta.advice_column()]), + new_root: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + old_root: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + new_value: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + old_value: WordLoHi::new([meta.advice_column(), meta.advice_column()]), } } @@ -119,11 +119,11 @@ impl MptTable { cb: &mut ConstraintBuilder, address: Expression, proof_type: Expression, - storage_key: word::Word>, - new_root: word::Word>, - old_root: word::Word>, - new_value: word::Word>, - old_value: word::Word>, + storage_key: WordLoHi>, + new_root: WordLoHi>, + old_root: WordLoHi>, + new_value: WordLoHi>, + old_value: WordLoHi>, ) { circuit!([meta, cb], { require!(a!(self.address) => address); diff --git a/zkevm-circuits/src/table/rw_table.rs b/zkevm-circuits/src/table/rw_table.rs index ddf1a83a27..6ade04d386 100644 --- a/zkevm-circuits/src/table/rw_table.rs +++ b/zkevm-circuits/src/table/rw_table.rs @@ -17,13 +17,13 @@ pub struct RwTable { /// Key3 (FieldTag) pub field_tag: Column, /// Key3 (StorageKey) - pub storage_key: word::Word>, + pub storage_key: WordLoHi>, /// Value - pub value: word::Word>, + pub value: WordLoHi>, /// Value Previous - pub value_prev: word::Word>, + pub value_prev: WordLoHi>, /// InitVal (Committed Value) - pub init_val: word::Word>, + pub init_val: WordLoHi>, } impl LookupTable for RwTable { @@ -75,10 +75,10 @@ impl RwTable { id: meta.advice_column(), address: meta.advice_column(), field_tag: meta.advice_column(), - storage_key: word::Word::new([meta.advice_column(), meta.advice_column()]), - value: word::Word::new([meta.advice_column(), meta.advice_column()]), - value_prev: word::Word::new([meta.advice_column(), meta.advice_column()]), - init_val: word::Word::new([meta.advice_column(), meta.advice_column()]), + storage_key: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + value: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + value_prev: WordLoHi::new([meta.advice_column(), meta.advice_column()]), + init_val: WordLoHi::new([meta.advice_column(), meta.advice_column()]), } } fn assign( diff --git a/zkevm-circuits/src/table/tx_table.rs b/zkevm-circuits/src/table/tx_table.rs index 0c36548579..4237fc0c6a 100644 --- a/zkevm-circuits/src/table/tx_table.rs +++ b/zkevm-circuits/src/table/tx_table.rs @@ -69,7 +69,7 @@ pub struct TxTable { /// Index for Tag = CallData pub index: Column, /// Value - pub value: word::Word>, + pub value: WordLoHi>, } impl TxTable { @@ -79,7 +79,7 @@ impl TxTable { tx_id: meta.advice_column(), tag: meta.fixed_column(), index: meta.advice_column(), - value: word::Word::new([meta.advice_column(), meta.advice_column()]), + value: WordLoHi::new([meta.advice_column(), meta.advice_column()]), } } @@ -158,30 +158,24 @@ impl TxTable { .collect(); for tx in txs.iter().chain(padding_txs.iter()) { let tx_id = Value::known(F::from(tx.id)); - let tx_data = vec![ - ( - TxContextFieldTag::Nonce, - word::Word::from(tx.nonce.as_u64()), - ), - (TxContextFieldTag::Gas, word::Word::from(tx.gas())), - (TxContextFieldTag::GasPrice, word::Word::from(tx.gas_price)), - (TxContextFieldTag::CallerAddress, word::Word::from(tx.from)), + let tx_data = [ + (TxContextFieldTag::Nonce, WordLoHi::from(tx.nonce.as_u64())), + (TxContextFieldTag::Gas, WordLoHi::from(tx.gas())), + (TxContextFieldTag::GasPrice, WordLoHi::from(tx.gas_price)), + (TxContextFieldTag::CallerAddress, WordLoHi::from(tx.from)), ( TxContextFieldTag::CalleeAddress, - word::Word::from(tx.to_or_contract_addr()), - ), - ( - TxContextFieldTag::IsCreate, - word::Word::from(tx.is_create()), + WordLoHi::from(tx.to_or_contract_addr()), ), - (TxContextFieldTag::Value, word::Word::from(tx.value)), + (TxContextFieldTag::IsCreate, WordLoHi::from(tx.is_create())), + (TxContextFieldTag::Value, WordLoHi::from(tx.value)), ( TxContextFieldTag::CallDataLength, - word::Word::from(tx.call_data.len() as u64), + WordLoHi::from(tx.call_data.len() as u64), ), ( TxContextFieldTag::CallDataGasCost, - word::Word::from(tx.call_data_gas_cost()), + WordLoHi::from(tx.call_data_gas_cost()), ), ] .iter() diff --git a/zkevm-circuits/src/table/wd_table.rs b/zkevm-circuits/src/table/wd_table.rs index 93c8d293cd..622e37a1f2 100644 --- a/zkevm-circuits/src/table/wd_table.rs +++ b/zkevm-circuits/src/table/wd_table.rs @@ -10,7 +10,7 @@ pub struct WdTable { /// validator id pub validator_id: Column, /// withdrawal address - pub address: Word>, + pub address: WordLoHi>, /// validator withdrawal amount in Gwei pub amount: Column, } @@ -21,7 +21,7 @@ impl WdTable { Self { id: meta.advice_column(), validator_id: meta.advice_column(), - address: Word::new([meta.advice_column(), meta.advice_column()]), + address: WordLoHi::new([meta.advice_column(), meta.advice_column()]), amount: meta.advice_column(), } } @@ -78,7 +78,7 @@ impl WdTable { .chain(padding_withdrawals.iter()) .enumerate() { - let address_word = Word::from(wd.address); + let address_word = WordLoHi::from(wd.address); let row = [ Value::known(F::from(wd.id)), Value::known(F::from(wd.validator_id)), diff --git a/zkevm-circuits/src/tx_circuit.rs b/zkevm-circuits/src/tx_circuit.rs index a13020f5af..4ea61edfcc 100644 --- a/zkevm-circuits/src/tx_circuit.rs +++ b/zkevm-circuits/src/tx_circuit.rs @@ -15,7 +15,7 @@ pub use dev::TxCircuit as TestTxCircuit; use crate::{ table::{KeccakTable, TxFieldTag, TxTable}, - util::{word::Word, Challenges, SubCircuit, SubCircuitConfig}, + util::{word::WordLoHi, Challenges, SubCircuit, SubCircuitConfig}, witness, }; use eth_types::{geth_types::Transaction, sign_types::SignData, Field}; @@ -41,7 +41,7 @@ pub struct TxCircuitConfig { tx_id: Column, tag: Column, index: Column, - value: Word>, + value: WordLoHi>, sign_verify: SignVerifyConfig, _marker: PhantomData, } @@ -103,8 +103,8 @@ impl TxCircuitConfig { tx_id: usize, tag: TxFieldTag, index: usize, - value: Word>, - ) -> Result>, Error> { + value: WordLoHi>, + ) -> Result>, Error> { region.assign_advice( || "tx_id", self.tx_id, @@ -186,7 +186,7 @@ impl TxCircuit { 0, TxFieldTag::Null, 0, - Word::default().into_value(), + WordLoHi::default().into_value(), )?; offset += 1; // Assign all Tx fields except for call data @@ -201,27 +201,33 @@ impl TxCircuit { for (tag, value) in [ ( TxFieldTag::Nonce, - Word::from(tx.nonce.as_u64()).into_value(), + WordLoHi::from(tx.nonce.as_u64()).into_value(), + ), + (TxFieldTag::Gas, WordLoHi::from(tx.gas()).into_value()), + ( + TxFieldTag::GasPrice, + WordLoHi::from(tx.gas_price).into_value(), + ), + ( + TxFieldTag::CallerAddress, + WordLoHi::from(tx.from).into_value(), ), - (TxFieldTag::Gas, Word::from(tx.gas()).into_value()), - (TxFieldTag::GasPrice, Word::from(tx.gas_price).into_value()), - (TxFieldTag::CallerAddress, Word::from(tx.from).into_value()), ( TxFieldTag::CalleeAddress, - Word::from(tx.to_or_zero()).into_value(), + WordLoHi::from(tx.to_or_zero()).into_value(), ), ( TxFieldTag::IsCreate, - Word::from(tx.is_create() as u64).into_value(), + WordLoHi::from(tx.is_create() as u64).into_value(), ), - (TxFieldTag::Value, Word::from(tx.value).into_value()), + (TxFieldTag::Value, WordLoHi::from(tx.value).into_value()), ( TxFieldTag::CallDataLength, - Word::from(tx.call_data.0.len() as u64).into_value(), + WordLoHi::from(tx.call_data.0.len() as u64).into_value(), ), ( TxFieldTag::CallDataGasCost, - Word::from(tx.call_data_gas_cost()).into_value(), + WordLoHi::from(tx.call_data_gas_cost()).into_value(), ), ( TxFieldTag::TxSignHash, @@ -271,7 +277,7 @@ impl TxCircuit { i + 1, // tx_id TxFieldTag::CallData, index, - Word::from(*byte as u64).into_value(), + WordLoHi::from(*byte as u64).into_value(), )?; offset += 1; calldata_count += 1; @@ -284,7 +290,7 @@ impl TxCircuit { 0, // tx_id TxFieldTag::CallData, 0, - Word::default().into_value(), + WordLoHi::default().into_value(), )?; offset += 1; } diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 6937cd93f2..15587021c6 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -10,7 +10,7 @@ use crate::{ util::{from_bytes, not, rlc}, }, table::KeccakTable, - util::{word::Word, Challenges, Expr}, + util::{word::WordLoHi, Challenges, Expr}, }; use ecc::{maingate, EccConfig, GeneralEccChip}; use ecdsa::ecdsa::{AssignedEcdsaSig, AssignedPublicKey, EcdsaChip}; @@ -105,7 +105,7 @@ impl Default for SignVerifyChip { aux_generator: Secp256k1Affine::default(), window_size: 4, max_verif: 0, - _marker: PhantomData::default(), + _marker: PhantomData, } } } @@ -292,8 +292,8 @@ pub(crate) struct AssignedECDSA { #[derive(Debug)] pub(crate) struct AssignedSignatureVerify { - pub(crate) address: Word>, - pub(crate) msg_hash: Word>, + pub(crate) address: WordLoHi>, + pub(crate) msg_hash: WordLoHi>, } // Return an array of bytes that corresponds to the little endian representation @@ -452,7 +452,7 @@ impl SignVerifyChip { ctx: &mut RegionCtx, is_address_zero: &AssignedCell, pk_rlc: &AssignedCell, - pk_hash: &Word>, + pk_hash: &WordLoHi>, ) -> Result<(), Error> { let copy = |ctx: &mut RegionCtx, name, column, assigned: &AssignedCell| { let copied = ctx.assign_advice(|| name, column, assigned.value().copied())?; @@ -560,8 +560,8 @@ impl SignVerifyChip { )?; ( - Word::new([address_cell_lo, address_cell_hi]), - Word::new([pk_hash_cell_lo, pk_hash_cell_hi]), + WordLoHi::new([address_cell_lo, address_cell_hi]), + WordLoHi::new([pk_hash_cell_lo, pk_hash_cell_hi]), ) }; @@ -595,7 +595,7 @@ impl SignVerifyChip { |_, _| Ok(()), )?; - Word::new([msg_hash_cell_lo, msg_hash_cell_hi]) + WordLoHi::new([msg_hash_cell_lo, msg_hash_cell_hi]) }; let pk_rlc = { diff --git a/zkevm-circuits/src/util/int_decomposition.rs b/zkevm-circuits/src/util/int_decomposition.rs index 8f0950537d..90ad08f355 100644 --- a/zkevm-circuits/src/util/int_decomposition.rs +++ b/zkevm-circuits/src/util/int_decomposition.rs @@ -12,7 +12,7 @@ use crate::evm_circuit::{ util::{rlc, CachedRegion, Cell}, }; -use super::word::{Word, WordExpr}; +use super::word::{WordExpr, WordLoHi}; #[derive(Clone, Debug)] /// IntDecomposition decompose integer into byte limbs @@ -89,7 +89,7 @@ impl Expr for IntDecomposition { } impl WordExpr for IntDecomposition { - fn to_word(&self) -> Word> { + fn to_word(&self) -> WordLoHi> { let exprs = self .limbs .clone() @@ -97,7 +97,7 @@ impl WordExpr for IntDecomposition>>(); - Word::new( + WordLoHi::new( (0..2) .map(|id| exprs.get(id).unwrap_or(&0.expr()).clone()) .collect_vec() diff --git a/zkevm-circuits/src/util/word.rs b/zkevm-circuits/src/util/word.rs index 98a31fa87a..c2e3e381a8 100644 --- a/zkevm-circuits/src/util/word.rs +++ b/zkevm-circuits/src/util/word.rs @@ -4,7 +4,7 @@ // limb is 256/4 = 64 bits use bus_mapping::state_db::CodeDB; -use eth_types::{Field, ToLittleEndian, H160, H256}; +use eth_types::{Field, OpsIdentity, ToLittleEndian, H160, H256}; use gadgets::util::{not, or, Expr}; use halo2_proofs::{ circuit::{AssignedCell, Region, Value}, @@ -35,7 +35,7 @@ pub(crate) type Word4 = WordLimbs; pub(crate) type Word32 = WordLimbs; -pub(crate) type WordCell = Word>; +pub(crate) type WordLoHiCell = WordLoHi>; pub(crate) type Word32Cell = Word32>; @@ -79,7 +79,7 @@ impl Default for WordLimbs { /// Get the word expression pub trait WordExpr { /// Get the word expression - fn to_word(&self) -> Word>; + fn to_word(&self) -> WordLoHi>; } impl WordLimbs, N> { @@ -186,8 +186,8 @@ impl WordLimbs, N> { } impl WordExpr for WordLimbs, N> { - fn to_word(&self) -> Word> { - Word(self.word_expr().to_word_n()) + fn to_word(&self) -> WordLoHi> { + WordLoHi(self.word_expr().to_word_n()) } } @@ -200,9 +200,9 @@ impl WordLimbs { /// `Word`, special alias for Word2. #[derive(Clone, Debug, Copy, Default)] -pub struct Word(Word2); +pub struct WordLoHi(Word2); -impl Word { +impl WordLoHi { /// Construct the word from 2 limbs pub fn new(limbs: [T; 2]) -> Self { Self(WordLimbs::::new(limbs)) @@ -230,19 +230,19 @@ impl Word { (lo, hi) } - /// Wrap `Word` into `Word` - pub fn into_value(self) -> Word> { + /// Wrap `Word` into `WordLoHi` + pub fn into_value(self) -> WordLoHi> { let [lo, hi] = self.0.limbs; - Word::new([Value::known(lo), Value::known(hi)]) + WordLoHi::new([Value::known(lo), Value::known(hi)]) } /// Map the word to other types - pub fn map(&self, mut func: impl FnMut(T) -> T2) -> Word { - Word(WordLimbs::::new([func(self.lo()), func(self.hi())])) + pub fn map(&self, mut func: impl FnMut(T) -> T2) -> WordLoHi { + WordLoHi(WordLimbs::::new([func(self.lo()), func(self.hi())])) } } -impl std::ops::Deref for Word { +impl std::ops::Deref for WordLoHi { type Target = WordLimbs; fn deref(&self) -> &Self::Target { @@ -250,24 +250,35 @@ impl std::ops::Deref for Word { } } -impl PartialEq for Word { +impl PartialEq for WordLoHi { fn eq(&self, other: &Self) -> bool { self.lo() == other.lo() && self.hi() == other.hi() } } -impl From for Word { +impl From for WordLoHi { /// Construct the word from u256 fn from(value: eth_types::Word) -> Self { let bytes = value.to_le_bytes(); - Word::new([ + WordLoHi::new([ from_bytes::value(&bytes[..N_BYTES_HALF_WORD]), from_bytes::value(&bytes[N_BYTES_HALF_WORD..]), ]) } } -impl From for Word { +impl> OpsIdentity for WordLoHi { + /// output type + type Output = WordLoHi; + fn zero() -> Self::Output { + WordLoHi::new([T::zero(), T::zero()]) + } + fn one() -> Self::Output { + WordLoHi::new([T::one(), T::zero()]) + } +} + +impl From for WordLoHi { /// Construct the word from H256 fn from(h: H256) -> Self { let le_bytes = { @@ -275,55 +286,55 @@ impl From for Word { b.reverse(); b }; - Word::new([ + WordLoHi::new([ from_bytes::value(&le_bytes[..N_BYTES_HALF_WORD]), from_bytes::value(&le_bytes[N_BYTES_HALF_WORD..]), ]) } } -impl From for Word { +impl From for WordLoHi { /// Construct the word from u64 fn from(value: u64) -> Self { let bytes = value.to_le_bytes(); - Word::new([from_bytes::value(&bytes), F::from(0)]) + WordLoHi::new([from_bytes::value(&bytes), F::from(0)]) } } -impl From for Word { +impl From for WordLoHi { /// Construct the word from u8 fn from(value: u8) -> Self { - Word::new([F::from(value as u64), F::from(0)]) + WordLoHi::new([F::from(value as u64), F::from(0)]) } } -impl From for Word { +impl From for WordLoHi { fn from(value: bool) -> Self { - Word::new([F::from(value as u64), F::from(0)]) + WordLoHi::new([F::from(value as u64), F::from(0)]) } } -impl From for Word { +impl From for WordLoHi { /// Construct the word from h160 fn from(value: H160) -> Self { let mut bytes = *value.as_fixed_bytes(); bytes.reverse(); - Word::new([ + WordLoHi::new([ from_bytes::value(&bytes[..N_BYTES_HALF_WORD]), from_bytes::value(&bytes[N_BYTES_HALF_WORD..]), ]) } } -impl Word> { +impl WordLoHi> { /// Assign advice pub fn assign_advice( &self, region: &mut Region<'_, F>, annotation: A, - column: Word>, + column: WordLoHi>, offset: usize, - ) -> Result>, Error> + ) -> Result>, Error> where A: Fn() -> AR, AR: Into, @@ -332,38 +343,28 @@ impl Word> { let lo = region.assign_advice(|| &annotation, column.lo(), offset, || self.lo())?; let hi = region.assign_advice(|| &annotation, column.hi(), offset, || self.hi())?; - Ok(Word::new([lo, hi])) + Ok(WordLoHi::new([lo, hi])) } } -impl Word> { +impl WordLoHi> { /// Query advice of Word of columns advice pub fn query_advice( &self, meta: &mut VirtualCells, at: Rotation, - ) -> Word> { + ) -> WordLoHi> { self.0.query_advice(meta, at).to_word() } } -impl + Clone> WordExpr for Word { - fn to_word(&self) -> Word> { +impl + Clone> WordExpr for WordLoHi { + fn to_word(&self) -> WordLoHi> { self.map(|limb| limb.expr()) } } -impl Word { - /// zero word - pub fn zero_f() -> Self { - Self::new([F::ZERO, F::ZERO]) - } - - /// one word - pub fn one_f() -> Self { - Self::new([F::ONE, F::ZERO]) - } - +impl WordLoHi { /// Convert address (h160) to single field element. /// This method is Address specific pub fn compress_f(&self) -> F { @@ -371,31 +372,22 @@ impl Word { } } -impl Word> { +impl WordLoHi> { /// create word from lo limb with hi limb as 0. caller need to guaranteed to be 128 bits. pub fn from_lo_unchecked(lo: Expression) -> Self { Self::new([lo, 0.expr()]) } - /// zero word - pub fn zero() -> Self { - Self::new([0.expr(), 0.expr()]) - } - - /// one word - pub fn one() -> Self { - Self::new([1.expr(), 0.expr()]) - } /// select based on selector. Here assume selector is 1/0 therefore no overflow check pub fn select + Clone>( selector: T, - when_true: Word, - when_false: Word, - ) -> Word> { + when_true: WordLoHi, + when_false: WordLoHi, + ) -> WordLoHi> { let (true_lo, true_hi) = when_true.to_lo_hi(); let (false_lo, false_hi) = when_false.to_lo_hi(); - Word::new([ + WordLoHi::new([ selector.expr() * true_lo.expr() + (1.expr() - selector.expr()) * false_lo.expr(), selector.expr() * true_hi.expr() + (1.expr() - selector.expr()) * false_hi.expr(), ]) @@ -403,22 +395,22 @@ impl Word> { /// Assume selector is 1/0 therefore no overflow check pub fn mul_selector(&self, selector: Expression) -> Self { - Word::new([self.lo() * selector.clone(), self.hi() * selector]) + WordLoHi::new([self.lo() * selector.clone(), self.hi() * selector]) } /// No overflow check on lo/hi limbs pub fn add_unchecked(self, rhs: Self) -> Self { - Word::new([self.lo() + rhs.lo(), self.hi() + rhs.hi()]) + WordLoHi::new([self.lo() + rhs.lo(), self.hi() + rhs.hi()]) } /// No underflow check on lo/hi limbs pub fn sub_unchecked(self, rhs: Self) -> Self { - Word::new([self.lo() - rhs.lo(), self.hi() - rhs.hi()]) + WordLoHi::new([self.lo() - rhs.lo(), self.hi() - rhs.hi()]) } /// No overflow check on lo/hi limbs pub fn mul_unchecked(self, rhs: Self) -> Self { - Word::new([self.lo() * rhs.lo(), self.hi() * rhs.hi()]) + WordLoHi::new([self.lo() * rhs.lo(), self.hi() * rhs.hi()]) } /// Convert address (h160) to single expression. @@ -462,14 +454,14 @@ impl WordLimbs, N1> { } impl WordExpr for WordLimbs, N1> { - fn to_word(&self) -> Word> { - Word(self.to_word_n()) + fn to_word(&self) -> WordLoHi> { + WordLoHi(self.to_word_n()) } } -/// Return the hash of the empty code as a `Word>` in little-endian. -pub fn empty_code_hash_word_value() -> Word> { - Word::from(CodeDB::empty_code_hash()).into_value() +/// Return the hash of the empty code as a `WordLoHi>` in little-endian. +pub fn empty_code_hash_word_value() -> WordLoHi> { + WordLoHi::from(CodeDB::empty_code_hash()).into_value() } // TODO unittest diff --git a/zkevm-circuits/src/witness/block.rs b/zkevm-circuits/src/witness/block.rs index 0be6c2f6d5..507e8e370c 100644 --- a/zkevm-circuits/src/witness/block.rs +++ b/zkevm-circuits/src/witness/block.rs @@ -4,7 +4,7 @@ use crate::{ exp_circuit::param::OFFSET_INCREMENT, instance::public_data_convert, table::BlockContextFieldTag, - util::{log2_ceil, word, SubCircuit}, + util::{log2_ceil, word::WordLoHi, SubCircuit}, }; use bus_mapping::{ circuit_input_builder::{ @@ -211,8 +211,8 @@ impl BlockContext { [ Value::known(F::from(BlockContextFieldTag::Coinbase as u64)), Value::known(F::ZERO), - Value::known(word::Word::from(self.coinbase).lo()), - Value::known(word::Word::from(self.coinbase).hi()), + Value::known(WordLoHi::from(self.coinbase).lo()), + Value::known(WordLoHi::from(self.coinbase).hi()), ], [ Value::known(F::from(BlockContextFieldTag::Timestamp as u64)), @@ -229,8 +229,8 @@ impl BlockContext { [ Value::known(F::from(BlockContextFieldTag::Difficulty as u64)), Value::known(F::ZERO), - Value::known(word::Word::from(self.difficulty).lo()), - Value::known(word::Word::from(self.difficulty).hi()), + Value::known(WordLoHi::from(self.difficulty).lo()), + Value::known(WordLoHi::from(self.difficulty).hi()), ], [ Value::known(F::from(BlockContextFieldTag::GasLimit as u64)), @@ -241,20 +241,20 @@ impl BlockContext { [ Value::known(F::from(BlockContextFieldTag::BaseFee as u64)), Value::known(F::ZERO), - Value::known(word::Word::from(self.base_fee).lo()), - Value::known(word::Word::from(self.base_fee).hi()), + Value::known(WordLoHi::from(self.base_fee).lo()), + Value::known(WordLoHi::from(self.base_fee).hi()), ], [ Value::known(F::from(BlockContextFieldTag::ChainId as u64)), Value::known(F::ZERO), - Value::known(word::Word::from(self.chain_id).lo()), - Value::known(word::Word::from(self.chain_id).hi()), + Value::known(WordLoHi::from(self.chain_id).lo()), + Value::known(WordLoHi::from(self.chain_id).hi()), ], [ Value::known(F::from(BlockContextFieldTag::WithdrawalRoot as u64)), Value::known(F::ZERO), - Value::known(word::Word::from(self.withdrawals_root).lo()), - Value::known(word::Word::from(self.withdrawals_root).hi()), + Value::known(WordLoHi::from(self.withdrawals_root).lo()), + Value::known(WordLoHi::from(self.withdrawals_root).hi()), ], ], { @@ -266,8 +266,8 @@ impl BlockContext { [ Value::known(F::from(BlockContextFieldTag::BlockHash as u64)), Value::known((self.number - len_history + idx).to_scalar().unwrap()), - Value::known(word::Word::from(*hash).lo()), - Value::known(word::Word::from(*hash).hi()), + Value::known(WordLoHi::from(*hash).lo()), + Value::known(WordLoHi::from(*hash).hi()), ] }) .collect() diff --git a/zkevm-circuits/src/witness/mpt.rs b/zkevm-circuits/src/witness/mpt.rs index df7b1ddebb..f2005ddb76 100644 --- a/zkevm-circuits/src/witness/mpt.rs +++ b/zkevm-circuits/src/witness/mpt.rs @@ -1,7 +1,7 @@ use crate::{ evm_circuit::witness::Rw, table::{AccountFieldTag, MPTProofType}, - util::word, + util::word::WordLoHi, }; use eth_types::{Address, Field, ToScalar, Word}; use halo2_proofs::circuit::Value; @@ -45,12 +45,12 @@ pub struct MptUpdates { #[derive(Default, Clone, Copy, Debug)] pub struct MptUpdateRow { pub(crate) address: F, - pub(crate) storage_key: word::Word, + pub(crate) storage_key: WordLoHi, pub(crate) proof_type: F, - pub(crate) new_root: word::Word, - pub(crate) old_root: word::Word, - pub(crate) new_value: word::Word, - pub(crate) old_value: word::Word, + pub(crate) new_root: WordLoHi, + pub(crate) old_root: WordLoHi, + pub(crate) new_value: WordLoHi, + pub(crate) old_value: WordLoHi, } impl MptUpdates { @@ -101,12 +101,12 @@ impl MptUpdates { let (new_value, old_value) = update.value_assignments(); MptUpdateRow { address: Value::known(update.key.address().to_scalar().unwrap()), - storage_key: word::Word::::from(update.key.storage_key()).into_value(), + storage_key: WordLoHi::::from(update.key.storage_key()).into_value(), proof_type: Value::known(update.proof_type()), - new_root: word::Word::::from(new_root).into_value(), - old_root: word::Word::::from(old_root).into_value(), - new_value: word::Word::::from(new_value).into_value(), - old_value: word::Word::::from(old_value).into_value(), + new_root: WordLoHi::::from(new_root).into_value(), + old_root: WordLoHi::::from(old_root).into_value(), + new_value: WordLoHi::::from(new_value).into_value(), + old_value: WordLoHi::::from(old_value).into_value(), } }) .collect() diff --git a/zkevm-circuits/src/witness/rw.rs b/zkevm-circuits/src/witness/rw.rs index 6399c3baef..7c83101b49 100644 --- a/zkevm-circuits/src/witness/rw.rs +++ b/zkevm-circuits/src/witness/rw.rs @@ -11,7 +11,7 @@ use itertools::Itertools; use crate::{ table::{AccountFieldTag, CallContextFieldTag, TxLogFieldTag, TxReceiptFieldTag}, - util::{build_tx_log_address, word}, + util::{build_tx_log_address, word::WordLoHi}, }; use super::MptUpdates; @@ -133,7 +133,7 @@ impl RwMap { .collect(); let padding_length = Self::padding_len(rows.len(), target_len); let padding = (1..=padding_length).map(|rw_counter| Rw::Start { rw_counter }); - (padding.chain(rows.into_iter()).collect(), padding_length) + (padding.chain(rows).collect(), padding_length) } /// Build Rws for assignment pub fn table_assignments(&self) -> Vec { @@ -267,10 +267,10 @@ pub struct RwRow { pub(crate) id: F, pub(crate) address: F, pub(crate) field_tag: F, - pub(crate) storage_key: word::Word, - pub(crate) value: word::Word, - pub(crate) value_prev: word::Word, - pub(crate) init_val: word::Word, + pub(crate) storage_key: WordLoHi, + pub(crate) value: WordLoHi, + pub(crate) value_prev: WordLoHi, + pub(crate) init_val: WordLoHi, } impl RwRow { @@ -311,9 +311,9 @@ impl RwRow> { }); inner.unwrap() }; - let unwrap_w = |f: word::Word>| { + let unwrap_w = |f: WordLoHi>| { let (lo, hi) = f.into_lo_hi(); - word::Word::new([unwrap_f(lo), unwrap_f(hi)]) + WordLoHi::new([unwrap_f(lo), unwrap_f(hi)]) }; RwRow { @@ -462,11 +462,11 @@ impl Rw { id: Value::known(F::from(self.id().unwrap_or_default() as u64)), address: Value::known(self.address().unwrap_or_default().to_scalar().unwrap()), field_tag: Value::known(F::from(self.field_tag().unwrap_or_default())), - storage_key: word::Word::from(self.storage_key().unwrap_or_default()).into_value(), - value: word::Word::from(self.value_assignment()).into_value(), - value_prev: word::Word::from(self.value_prev_assignment().unwrap_or_default()) + storage_key: WordLoHi::from(self.storage_key().unwrap_or_default()).into_value(), + value: WordLoHi::from(self.value_assignment()).into_value(), + value_prev: WordLoHi::from(self.value_prev_assignment().unwrap_or_default()) .into_value(), - init_val: word::Word::from(self.committed_value_assignment().unwrap_or_default()) + init_val: WordLoHi::from(self.committed_value_assignment().unwrap_or_default()) .into_value(), } }