diff --git a/.github/workflows/nancy.yml b/.github/workflows/nancy.yml deleted file mode 100644 index b769191297..0000000000 --- a/.github/workflows/nancy.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Go Nancy - -on: - # Scan changed files in PRs (diff-aware scanning): - pull_request: {} - # Scan on-demand through GitHub Actions interface: - workflow_dispatch: {} - # Scan mainline branches and report all findings: - push: - branches: ["master", "develop"] - -jobs: - build: - strategy: - matrix: - go-version: [1.21.x] - os: [ubuntu-latest] - runs-on: ${{ matrix.os }} - steps: - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - - - name: Set up Go 1.x in order to write go.list file - uses: actions/setup-go@v2 - with: - go-version: ${{ matrix.go-version }} - - - name: Go mod tidy - run: go mod tidy - - - name: WriteGoList - run: go list -json -deps ./... > go.list - - - name: Nancy - uses: sonatype-nexus-community/nancy-github-action@main - with: - nancyCommand: sleuth --loud diff --git a/.nancy-ignore b/.nancy-ignore index 062a7015a1..0b64e763db 100644 --- a/.nancy-ignore +++ b/.nancy-ignore @@ -1 +1,2 @@ CVE-2024-34478 # "CWE-754: Improper Check for Unusual or Exceptional Conditions." This vulnerability is BTC only, BSC does not have the issue. +CVE-2024-6104 # "CWE-532: Information Exposure Through Log Files" This is caused by the vulnerabilities go-retryablehttp@v0.7.4, it is only used in cmd devp2p, impact is limited. will upgrade to v0.7.7 later diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 026883ef23..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,1083 +0,0 @@ -# Changelog - -## v1.4.11 - -### BUGFIX -* [\#2534](https://github.com/bnb-chain/bsc/pull/2534) fix: nil pointer when clear simulating bid -* [\#2535](https://github.com/bnb-chain/bsc/pull/2535) upgrade: add HaberFix hardfork - - -## v1.4.10 -### FEATURE -NA - -### IMPROVEMENT -* [\#2512](https://github.com/bnb-chain/bsc/pull/2512) feat: add mev helper params and func -* [\#2508](https://github.com/bnb-chain/bsc/pull/2508) perf: speedup pbss trienode read -* [\#2509](https://github.com/bnb-chain/bsc/pull/2509) perf: optimize chain commit performance for multi-database -* [\#2451](https://github.com/bnb-chain/bsc/pull/2451) core/forkchoice: improve stability when inturn block not generate - -### BUGFIX -* [\#2518](https://github.com/bnb-chain/bsc/pull/2518) fix: remove zero gasprice check for BSC -* [\#2519](https://github.com/bnb-chain/bsc/pull/2519) UT: random failure of TestSnapSyncWithBlobs -* [\#2515](https://github.com/bnb-chain/bsc/pull/2515) fix getBlobSidecars by ethclient -* [\#2525](https://github.com/bnb-chain/bsc/pull/2525) fix: ensure empty withdrawals after cancun before broadcast - -## v1.4.9 -### FEATURE -* [\#2463](https://github.com/bnb-chain/bsc/pull/2463) utils: add check_blobtx.js -* [\#2470](https://github.com/bnb-chain/bsc/pull/2470) jsutils: faucet successful requests within blocks -* [\#2467](https://github.com/bnb-chain/bsc/pull/2467) internal/ethapi: add optional parameter for blobSidecars - -### IMPROVEMENT -* [\#2462](https://github.com/bnb-chain/bsc/pull/2462) cmd/utils: add a flag to change breathe block interval for testing -* [\#2497](https://github.com/bnb-chain/bsc/pull/2497) params/config: add Bohr hardfork -* [\#2479](https://github.com/bnb-chain/bsc/pull/2479) dev: ensure consistency in BPS bundle result - -### BUGFIX -* [\#2461](https://github.com/bnb-chain/bsc/pull/2461) eth/handler: check lists in body before broadcast blocks -* [\#2455](https://github.com/bnb-chain/bsc/pull/2455) cmd: fix memory leak when big dataset -* [\#2466](https://github.com/bnb-chain/bsc/pull/2466) sync: fix some sync issues caused by prune-block. -* [\#2475](https://github.com/bnb-chain/bsc/pull/2475) fix: move mev op to MinerAPI & add command to console -* [\#2473](https://github.com/bnb-chain/bsc/pull/2473) fix: limit the gas price of the mev bid -* [\#2484](https://github.com/bnb-chain/bsc/pull/2484) fix: fix inspect database error -* [\#2481](https://github.com/bnb-chain/bsc/pull/2481) fix: keep 9W blocks in ancient db when prune block -* [\#2495](https://github.com/bnb-chain/bsc/pull/2495) fix: add an empty freeze db -* [\#2507](https://github.com/bnb-chain/bsc/pull/2507) fix: waiting for the last simulation before pick best bid - -## v1.4.8 -### FEATURE -* [\#2483](https://github.com/bnb-chain/bsc/pull/2483) core/vm: add secp256r1 into PrecompiledContractsHaber -* [\#2400](https://github.com/bnb-chain/bsc/pull/2400) RIP-7212: Precompile for secp256r1 Curve Support - -### IMPROVEMENT -NA - -### BUGFIX -NA - -## v1.4.7 -### FEATURE -* [\#2439](https://github.com/bnb-chain/bsc/pull/2439) config: setup Mainnet Tycho(Cancun) hardfork date - -### IMPROVEMENT -* [\#2396](https://github.com/bnb-chain/bsc/pull/2396) metrics: add blockInsertMgaspsGauge to trace mgasps -* [\#2411](https://github.com/bnb-chain/bsc/pull/2411) build(deps): bump golang.org/x/net from 0.19.0 to 0.23.0 -* [\#2435](https://github.com/bnb-chain/bsc/pull/2435) txpool: limit max gas when mining is enabled -* [\#2438](https://github.com/bnb-chain/bsc/pull/2438) fix: performance issue when load journal -* [\#2440](https://github.com/bnb-chain/bsc/pull/2440) nancy: add files .nancy-ignore - -### BUGFIX -NA - -## v1.4.6 -### FEATURE -* [\#2227](https://github.com/bnb-chain/bsc/pull/2227) core: separated databases for block data -* [\#2404](https://github.com/bnb-chain/bsc/pull/2404) cmd, p2p: filter peers by regex on name - -### IMPROVEMENT -* [\#2201](https://github.com/bnb-chain/bsc/pull/2201) chore: render system bytecode by go:embed -* [\#2363](https://github.com/bnb-chain/bsc/pull/2363) feat: greedy merge tx in bid -* [\#2389](https://github.com/bnb-chain/bsc/pull/2389) deps: update prsym to solve warning about quic-go version -* [\#2341](https://github.com/bnb-chain/bsc/pull/2341) core/trie: persist TrieJournal to journal file instead of kv database -* [\#2395](https://github.com/bnb-chain/bsc/pull/2395) fix: trieJournal format compatible old db format -* [\#2406](https://github.com/bnb-chain/bsc/pull/2406) feat: adaptive for loading journal file or journal kv during loadJournal -* [\#2390](https://github.com/bnb-chain/bsc/pull/2390) chore: fix function names in comment -* [\#2399](https://github.com/bnb-chain/bsc/pull/2399) chore: fix some typos in comments -* [\#2408](https://github.com/bnb-chain/bsc/pull/2408) chore: fix some typos in comments -* [\#2416](https://github.com/bnb-chain/bsc/pull/2416) fix: fix function names -* [\#2424](https://github.com/bnb-chain/bsc/pull/2424) feat: recommit bid when newBidCh is empty to maximize mev reward -* [\#2430](https://github.com/bnb-chain/bsc/pull/2430) fix: oom caused by non-discarded mev simulation env -* [\#2428](https://github.com/bnb-chain/bsc/pull/2428) chore: add metric & log for blobTx -* [\#2419](https://github.com/bnb-chain/bsc/pull/2419) metrics: add doublesign counter - -### BUGFIX -* [\#2244](https://github.com/bnb-chain/bsc/pull/2244) cmd/geth: fix importBlock -* [\#2391](https://github.com/bnb-chain/bsc/pull/2391) fix: print value instead of pointer in ConfigCompatError -* [\#2398](https://github.com/bnb-chain/bsc/pull/2398) fix: no import blocks before or equal to the finalized height -* [\#2401](https://github.com/bnb-chain/bsc/pull/2401) fix: allow fast node to rewind after abnormal shutdown -* [\#2403](https://github.com/bnb-chain/bsc/pull/2403) fix: NPE -* [\#2423](https://github.com/bnb-chain/bsc/pull/2423) eth/gasprice: add query limit to defend DDOS attack -* [\#2425](https://github.com/bnb-chain/bsc/pull/2425) fix: adapt journal for cmd - -## v1.4.5 -### FEATURE -* [\#2378](https://github.com/bnb-chain/bsc/pull/2378) config: setup Testnet Tycho(Cancun) hardfork date - -### IMPROVEMENT -* [\#2333](https://github.com/bnb-chain/bsc/pull/2333) remove code that will not be executed -* [\#2369](https://github.com/bnb-chain/bsc/pull/2369) core: stateDb has no trie and no snap return err - -### BUGFIX -* [\#2359](https://github.com/bnb-chain/bsc/pull/2359) triedb: do not open state freezer under notries - -## v1.4.4 -### FEATURE -* [\#2279](https://github.com/bnb-chain/bsc/pull/2279) BlobTx: implement EIP-4844 on BSC -* [\#2337](https://github.com/bnb-chain/bsc/pull/2337) 4844: bugfix and improve -* [\#2339](https://github.com/bnb-chain/bsc/pull/2339) fix: missing block asigment WithSidecars -* [\#2350](https://github.com/bnb-chain/bsc/pull/2350) cancun: change empty withdrawHash value of header -* [\#2335](https://github.com/bnb-chain/bsc/pull/2335) upgrade: update system contracts bytes code and hardfork time of Feynman upgrade -* [\#2323](https://github.com/bnb-chain/bsc/pull/2323) feat: export GasCeil in mev_params -* [\#2357](https://github.com/bnb-chain/bsc/pull/2357) feat: add bid fee ceil in mev_params - -### IMPROVEMENT -* [\#2321](https://github.com/bnb-chain/bsc/pull/2321) test: use full syncmode to run rpc node -* [\#2338](https://github.com/bnb-chain/bsc/pull/2338) cmd: include more node info in metrics -* [\#2342](https://github.com/bnb-chain/bsc/pull/2342) p2p: add metrics for inbound/outbound peers -* [\#2334](https://github.com/bnb-chain/bsc/pull/2334) core: improve chain rewinding mechanism -* [\#2352](https://github.com/bnb-chain/bsc/pull/2352) core: fix block report when chain is not setHead - -### BUGFIX -NA - -## v1.4.3 -### FEATURE -* [\#2241](https://github.com/bnb-chain/bsc/pull/2241) cmd/utils, core/rawdb, triedb/pathdb: flip hash to path scheme -* [\#2312](https://github.com/bnb-chain/bsc/pull/2312) cmd/utils, node: switch to Pebble as the default db if none exists - -### IMPROVEMENT -* [\#2228](https://github.com/bnb-chain/bsc/pull/2228) core: rephrase TriesInMemory log -* [\#2234](https://github.com/bnb-chain/bsc/pull/2234) cmd/utils: disable snap protocol for fast node -* [\#2236](https://github.com/bnb-chain/bsc/pull/2236) build(deps): bump github.com/quic-go/quic-go from 0.39.3 to 0.39.4 -* [\#2240](https://github.com/bnb-chain/bsc/pull/2240) core/state: fix taskResult typo - -* [\#2280](https://github.com/bnb-chain/bsc/pull/2280) cmd/utils, core: only full sync for fast nodes -* [\#2298](https://github.com/bnb-chain/bsc/pull/2298) cmd, node: initialize ports with --instance -* [\#2302](https://github.com/bnb-chain/bsc/pull/2302) cmd/geth, core/rawdb: add dbDeleteTrieState -* [\#2304](https://github.com/bnb-chain/bsc/pull/2304) eth/ethconfig: remove overridekepler and overrideshanghai -* [\#2307](https://github.com/bnb-chain/bsc/pull/2307) internal/ethapi: add net_nodeInfo -* [\#2311](https://github.com/bnb-chain/bsc/pull/2311) Port cancun related changes from unreleased v1.14.0 -* [\#2313](https://github.com/bnb-chain/bsc/pull/2313) tests/truffle: use hbss to run test -* [\#2314](https://github.com/bnb-chain/bsc/pull/2314) cmd/jsutil: dump MinGasPrice for validator -* [\#2317](https://github.com/bnb-chain/bsc/pull/2317) feat: add mev metrics - -### BUGFIX -* [\#2272](https://github.com/bnb-chain/bsc/pull/2272) parlia: add state prepare for internal SC transaction -* [\#2277](https://github.com/bnb-chain/bsc/pull/2277) fix: systemTx should be always at the end of block -* [\#2299](https://github.com/bnb-chain/bsc/pull/2299) fix: add FeynmanFix upgrade for a testnet issue -* [\#2310](https://github.com/bnb-chain/bsc/pull/2310) core/vm: fix PrecompiledContractsCancun - -## v1.4.2 -### FEATURE -* [\#2021](https://github.com/bnb-chain/bsc/pull/2021) feat: support separate trie database -* [\#2224](https://github.com/bnb-chain/bsc/pull/2224) feat: support MEV - -### BUGFIX -* [\#2268](https://github.com/bnb-chain/bsc/pull/2268) fix: ensure EIP-4788 not supported with Parlia Engine - -### Cancun Code Merge -#### 4844 related -[internal/ethapi: add support for blobs in eth_fillTransaction (#28839)](https://github.com/bnb-chain/bsc/commit/ac5aa672d3b85a1f74667a65a15398f072aa0b2a) -[internal/ethapi: fix defaults for blob fields (#29037)](https://github.com/bnb-chain/bsc/commit/b47cf8fe1de4f97ce38417d8136a58812734a7a9) -[ethereum, ethclient: add blob transaction fields in CallMsg (#28989)](https://github.com/bnb-chain/bsc/commit/9d537f543990d9013d73433dc58fd0e985d9b2b6) -[core/txpool/blobpool: post-crash cleanup and addition/removal metrics(#28914)](https://github.com/bnb-chain/bsc/commit/62affdc9c5ea6f1a73fde42ac5ee5c9795877f88) -[core/txpool/blobpool: update the blob db with corruption handling (#29001)](https://github.com/bnb-chain/bsc/commit/3c30de219f92120248b7b7aeeb2bef82305e9627) -[core/txpool, eth, miner: pre-filter dynamic fees during pending tx retrieval (#29005)](https://github.com/bnb-chain/bsc/commit/593e303485473d9b9194792e4556a451c44dcc6c) -[core/txpool, miner: speed up blob pool pending retrievals (#29008)](https://github.com/bnb-chain/bsc/commit/6fb0d0992bd4eb91faf1e081b3c4aa46adb0ef7d) -[core/txpool, eth, miner: retrieve plain and blob txs separately (#29026)](https://github.com/bnb-chain/bsc/commit/f4852b8ddc8bef962d34210a4f7774b95767e421) -[core/txpool: reject blob txs with blob fee cap below the minimum (#29081)](https://github.com/bnb-chain/bsc/commit/32d4d6e6160432be1cb9780a43253deda7708ced) -[core/txpool/blobpool: reduce default database cap for rollout (#29090)](https://github.com/bnb-chain/bsc/commit/63aaac81007ad46b208570c17cae78b7f60931d4)  -#### Clean Ups -[cmd/devp2p, eth: drop support for eth/67 (#28956)](https://github.com/bnb-chain/bsc/commit/8a76a814a2b9e5b4c1a4c6de44cd702536104507) -[all: remove the dependency from trie to triedb (#28824)](https://github.com/bnb-chain/bsc/commit/fe91d476ba3e29316b6dc99b6efd4a571481d888) -#### Others -[eth, miner: fix enforcing the minimum miner tip (#28933)](https://github.com/bnb-chain/bsc/commit/16ce7bf50fa71c907d1dc6504ed32a9161e71351) -[cmd,internal/era: implement export-history subcommand(#26621)](https://github.com/bnb-chain/bsc/commit/1f50aa76318689c6e74d0c3b4f31421bf7382fc7) -[node, rpc: add configurable HTTP request limit (#28948)](https://github.com/bnb-chain/bsc/commit/69f5d5ba1fe355ff7e3dee5a0c7e662cd82f1071) -[tests: fix goroutine leak related to state snapshot generation (#28974)](https://github.com/bnb-chain/bsc/commit/8321fe2fda0b44d6df3750bcee28b8627525173b) -[internal/ethapi:fix zero rpc gas cap in eth_createAccessList (#28846)](https://github.com/bnb-chain/bsc/commit/b87b9b45331f87fb1da379c5f17a81ebc3738c6e) -[eth/tracers: Fix callTracer logs on onlyTopCall == true (#29068)](https://github.com/bnb-chain/bsc/commit/5a0f468f8cb15b939bd85445d33c614a36942a8e) - -## v1.4.1 -FEATURE -NA - -BUGFIX -* [\#2258](https://github.com/bnb-chain/bsc/pull/2258) core: skip checking state root existence when do snapsync by fast node -* [\#2252](https://github.com/bnb-chain/bsc/pull/2252) fix: add missing args of `bls account generate-proof` cmd (#2252) - -IMPROVEMENT -NA - -## v1.4.0 -#### RPC -[internal/ethapi: implement eth_getBlockReceipts (#27702)](https://github.com/bnb-chain/bsc/commit/f1801a9feda8f81532c92077d2c9a8b785fd699b) -[eth, rpc: add configurable option for wsMessageSizeLimit (#27801)](https://github.com/bnb-chain/bsc/commit/705a51e566bc9215975d08f27d23ddab7baa9dd7) -[api/bind: add CallOpts.BlockHash to allow calling contracts at a specific block hash (#28084)](https://github.com/bnb-chain/bsc/commit/b85c86022e130a76eeb588a5b36e97149b342188) -[internal/ethapi: eth_call block parameter is optional (#28165)](https://github.com/bnb-chain/bsc/commit/adb9b319c9c61f092755000bf0fc4b3349f5cbbc) -[internal/ethapi: ethSendTransaction check baseFee (#27834)](https://github.com/bnb-chain/bsc/commit/54a400ee717caf44603fac390314747c5592ee1b) -#### Command -[cmd/utils: fix a startup issue on deleted chaindata but dangling ancients(#27989)](https://github.com/bnb-chain/bsc/commit/00fead91c4f58bc7f56f81512280d3120860989c) -[cmd/geth, internal/flags, go.mod: colorize cli help, support env vars(#28103)](https://github.com/bnb-chain/bsc/commit/d9fbb71d631d1ad0fb1846042e4c50ab893a6fbf) -[cmd/rlpdump: add -pos flag, displaying byte positions (#28785)](https://github.com/bnb-chain/bsc/commit/1485814f89d8206bb4a1c8e10a4a2893920f683a) -[cmd/geth: make it possible to autopilot removedb (#28725)](https://github.com/bnb-chain/bsc/commit/1010a79c7cbcdb4741e9f30e8cdc19c679ad7377) -#### Flag -[cmd/utils: restore support for txlookuplimit flag (#27917)](https://github.com/bnb-chain/bsc/commit/68855216c903eea9f952a1a7a56e69ea285f284b) -[cmd/utils, eth: disallow invalid snap sync / snapshot flag combos (#28657)](https://github.com/bnb-chain/bsc/commit/d98d70f670297a4bfa86db1a67a9c024f7186f43) -#### Client -[ethclient: use 'input', not 'data' as field for transaction input (#28078)](https://github.com/bnb-chain/bsc/commit/5cf53f51ac556cfff2aee9d405efd336298a3aca) -[ethclient: fix forwarding 1559 gas fields (#28462)](https://github.com/bnb-chain/bsc/commit/e91cdb49beb4b2a3872b5f2548bf2d6559e4f561) -[ethclient/simulated: implement new sim backend (#28202)](https://github.com/bnb-chain/bsc/commit/2d08c9900996b5e798f40a3cc6b47f4e51dc487d) -[ethclient: apply accessList field in toCallArg (#28832)](https://github.com/bnb-chain/bsc/commit/1c488298c807f4daa3cbe260efb88b81902a903d)  -#### Tracer -[eth/tracers: add position field for callTracer logs (#28389)](https://github.com/bnb-chain/bsc/commit/b1cec853bef98acc750298b1c9b8165f2ac6ce5a) -[eth/tracers: tx-level state in debug_traceCall (#28460)](https://github.com/bnb-chain/bsc/commit/5fb8ebc9ecb226b84181420b9871c5f61cf4f77d) -#### Txpool -[eth/fetcher: allow underpriced transactions in after timeout (#28097)](https://github.com/bnb-chain/bsc/commit/2b7bc2c36b0d0efc83e62ba8e13723b943c4fa6e) -#### Sync -[eth/downloader: prevent pivot moves after state commit (#28126)](https://github.com/bnb-chain/bsc/commit/4fa3db49a1e485b8d110c87de6a44f460b45bb9a) -[core, eth/downloader: fix genesis state missing due to state sync (#28124)](https://github.com/bnb-chain/bsc/commit/c53b0fef2ab8e2a00257b898cad5174e6b73f5fc) -[core, accounts, eth, trie: handle genesis state missing (#28171)](https://github.com/bnb-chain/bsc/commit/73f5bcb75b562fcb3c109dd9c51f21956bc1f1f4) -[eth/protocols/snap: fix snap sync failure on empty storage range (#28306)](https://github.com/bnb-chain/bsc/commit/1cb3b6aee4a16ab8e684da63f3cfcd9b961c43af) -[core, eth, trie: filter out boundary nodes and remove dangling nodes in stacktrie (#28327)](https://github.com/bnb-chain/bsc/commit/ab04aeb855605de51dd1e933f45eb84ad877e715) -[core, core/rawdb, eth/sync: no tx indexing during snap sync (#28703)](https://github.com/bnb-chain/bsc/commit/78a3c32ef4deb7755e3367e183639b66242654f7) -#### PBSS Related -[core/rawdb: skip pathdb state inspection in hashdb mode (#28108)](https://github.com/bnb-chain/bsc/commit/8d38b1fe62950e8675795abf63b7c978415ab7ba) -[eth: abort on api operations not available in pbss-mode (#28104)](https://github.com/bnb-chain/bsc/commit/b9b99a12e5159c746ef04b7c8febc4db66817b72) -[trie: remove internal nodes between shortNode and child in path mode (#28163)](https://github.com/bnb-chain/bsc/commit/4773dcbc81aac9d330df29446283361f5a7062c7) -[trie/triedb/pathdb: improve dirty node flushing trigger (#28426)](https://github.com/bnb-chain/bsc/commit/ea2e66a58e48ef63566d5274c4a875e817a1cd39)  -[core/rawdb: fsync the index file after each freezer write (#28483)](https://github.com/bnb-chain/bsc/commit/326fa00759d959061035becc9514660c24897053)  -[trie: remove inconsistent trie nodes during sync in path mode (#28595)](https://github.com/bnb-chain/bsc/commit/e206d3f8975bd98cc86d14055dca40f996bacc60) -[core, cmd, trie: fix the condition of pathdb initialization (#28718)](https://github.com/bnb-chain/bsc/commit/cca94792a4112687ce23e7041b95ccc7f4bf6123)  -#### GraphQL -[graphql: validate block params (#27876](https://github.com/bnb-chain/bsc/commit/5e89ff4d6b0df4bd54d20d90bee5a16abef6b9bc) -[graphql: always set content-type to application/json (#28417)](https://github.com/bnb-chain/bsc/commit/2d7dba024d76603398907a595da98ad4df81b858) -#### Cancun -[core/types: support for optional blob sidecar in BlobTx (#27841)](https://github.com/bnb-chain/bsc/commit/2a6beb6a39d7cb3c5906dd4465d65da6efcc73cd) -[core, params, beacon/engine: implement EIP 4788 BeaconRoot (#27849)](https://github.com/bnb-chain/bsc/commit/b8d38e76ef07c99d338c7bcd485881850382a58f)  -[miner: add to build block with EIP-4844 blobs (#27875)](https://github.com/bnb-chain/bsc/commit/feb8f416acc3f067ecc8cbdabb8e70679547737a) -[core: implement BLOBBASEFEE opcode (0x4a) (#28098)](https://github.com/bnb-chain/bsc/commit/c39cbc1a78aa275523c1b0ff9d21b16ba7bfa486) -[core, eth, miner: start propagating and consuming blob txs (#28243)](https://github.com/bnb-chain/bsc/commit/a8a9c8e4b00c5b9f84242181839234b8e9fd54e3) -[eth/fetcher: throttle tx fetches to 128KB responses (#28304)](https://github.com/bnb-chain/bsc/commit/a6deb2d994e644300bac43455b1c954976e7382e) -[crypto/kzg4844: use the new trusted setup file and format (#28383)](https://github.com/bnb-chain/bsc/commit/a6a0ae45b69a95b38b7cb2d085e7833c88b72164) -[internal/ethapi: handle blobs in API methods (#28786)](https://github.com/bnb-chain/bsc/commit/e5d5e09faae48dac3723634e2b1813e4f2e89535) -#### P2P -[cmd/devp2p, eth: drop eth/66 (#28239)](https://github.com/bnb-chain/bsc/commit/bc6d184872889224480cf9df58b0539b210ffa9e)  -[cmd/devp2p: use bootnodes as crawl input (#28139)](https://github.com/bnb-chain/bsc/commit/41a0ad9f03ae8e8389fbe40131f4e6930b5beac5) -[p2p/discover: add liveness check in collectTableNodes (#28686)](https://github.com/bnb-chain/bsc/commit/5b22a472d6aaaa17daf0543b5914ca1f2f5518a7) -#### Test -[build, tests: add execution-spec-tests (#26985)](https://github.com/bnb-chain/bsc/commit/f174ddba7af5c150ecad37430c167194d66d75f1)  -[tests/fuzzers: update fuzzers to be based on go-native fuzzing (#28352)](https://github.com/bnb-chain/bsc/commit/d10a2f6ab727f79a0acff29c8147d54c5e4689ec)  -[tests/fuzzers: move fuzzers into native packages (#28467)](https://github.com/bnb-chain/bsc/commit/2391fbc676d7464bd42e248155558a2bcd6ecf64) -#### Clear Up -[eth/downloader: remove header rollback mechanism (#28147)](https://github.com/bnb-chain/bsc/commit/b85c183ea7417e973dbbccd27b3fb7d7097b87dd) -#### Others -[core/forkid: correctly compute forkid when timestamp fork is activated in genesis (#27895)](https://github.com/bnb-chain/bsc/commit/32fde3f838d604fdeb7a3ada4f8e02d78301b83d) -[core/vm/runtime: Add Random field to config (#28001)](https://github.com/bnb-chain/bsc/commit/0ba2d3cfa4e4a0a76cd457b8dc0f49bf1a79b723) -[core/rawdb: no need to run truncateFile for readonly mode (#28145)](https://github.com/bnb-chain/bsc/commit/545f4c5547178bc8bde6af08b3ccaf68ca27f2c0) -[core/bloombits: fix deadlock when matcher session hits an error (#28184)](https://github.com/bnb-chain/bsc/commit/c2cfe35f121cb88650b4d90c958bcc4214d0ce7f)  -[core/state, tests: fix memory leak via fastcache (#28387)](https://github.com/bnb-chain/bsc/commit/c1d5a012ea4b824e902db14e47bf147d727c2657) -[internal/ethapi: compact db missing key starts with 0xff (#28207)](https://github.com/bnb-chain/bsc/commit/46c850a9411d7ff15c1a0342fe29f359e6c390ae) -[internal/ethapi: fix codehash lookup in eth_getProof (#28357)](https://github.com/bnb-chain/bsc/commit/8b99ad46027a455971ccf9bd1f425b9c58ec5855)  -[eth: set networkID to chainID by default (#28250)](https://github.com/bnb-chain/bsc/commit/4d9f3cd5d751efccd501b08ab6cf38a83b5e2858) -[eth: fix potential hang in waitSnapExtension (#28744)](https://github.com/bnb-chain/bsc/commit/18e154eaa24d5f7a8b3c48983ad591e6c10963ca) -[metrics, cmd/geth: informational metrics (prometheus, influxdb, opentsb (#24877)](https://github.com/bnb-chain/bsc/commit/53f3c2ae656cd860a700751b6c5f81ca9c66503d) -[ethdb/pebble: don't double-close iterator inside pebbleIterator (#28566)](https://github.com/bnb-chain/bsc/commit/6489a0dd1f98e9ce1c64c2eae93c8a88df7ae674) -[trie/triedb/hashdb: take lock around access to dirties cache (#28542)](https://github.com/bnb-chain/bsc/commit/fa0df76f3cfd186a1f06f2b80aa5dbb89555b009)  -[accounts: properly close managed wallets when closing manager (#28710)](https://github.com/bnb-chain/bsc/commit/d3452a22cc871306c62de52d19295914141863c0) -[event: fix Resubscribe deadlock when unsubscribing after inner sub ends (#28359)](https://github.com/bnb-chain/bsc/commit/ffc6a0f36edda396a8421cf7a3c0feb88be20d0b) -[all: replace log15 with slog (#28187)](https://github.com/bnb-chain/bsc/commit/28e73717016cdc9ebdb5fdb3474cfbd3bd2d2524) - -## v1.3.11 -BUGFIX -* [\#2288](https://github.com/bnb-chain/bsc/pull/2288) fix: add FeynmanFix upgrade for a testnet issue - -## v1.3.10 -FEATURE -* [\#2047](https://github.com/bnb-chain/bsc/pull/2047) feat: add new fork block and precompile contract for BEP294 and BEP299 - -## v1.3.9 -FEATURE -* [\#2186](https://github.com/bnb-chain/bsc/pull/2186) log: support maxBackups in config.toml - -BUGFIX -* [\#2160](https://github.com/bnb-chain/bsc/pull/2160) cmd: fix dump cli cannot work in path mode -* [\#2183](https://github.com/bnb-chain/bsc/pull/2183) p2p: resolved deadlock on p2p server shutdown - -IMPROVEMENT -* [\#2177](https://github.com/bnb-chain/bsc/pull/0000) build(deps): bump github.com/quic-go/quic-go from 0.39.3 to 0.39.4 -* [\#2185](https://github.com/bnb-chain/bsc/pull/2185) consensus/parlia: set nonce before evm run -* [\#2190](https://github.com/bnb-chain/bsc/pull/2190) fix(legacypool): deprecate already known error -* [\#2195](https://github.com/bnb-chain/bsc/pull/2195) eth/fetcher: downgrade state tx log - -## v1.3.8 -FEATURE -* [\#2074](https://github.com/bnb-chain/bsc/pull/2074) faucet: new faucet client -* [\#2082](https://github.com/bnb-chain/bsc/pull/2082) cmd/dbcmd: add inspect trie tool -* [\#2140](https://github.com/bnb-chain/bsc/pull/2140) eth/fetcher: allow underpriced transactions in after timeout -* [\#2115](https://github.com/bnb-chain/bsc/pull/2115) p2p: no peer reconnect if explicitly disconnected -* [\#2128](https://github.com/bnb-chain/bsc/pull/2128) go.mod: upgrade prysm to support built with go@v1.21 -* [\#2151](https://github.com/bnb-chain/bsc/pull/2151) feat: enable NoDial should still dial static nodes -* [\#2144](https://github.com/bnb-chain/bsc/pull/2144) p2p: reset disconnect set with magic enode ID - -BUGFIX -* [\#2095](https://github.com/bnb-chain/bsc/pull/2095) rpc: fix ns/µs mismatch in metrics -* [\#2083](https://github.com/bnb-chain/bsc/pull/2083) triedb/pathdb: fix async node buffer diskroot mismatches when journaling -* [\#2120](https://github.com/bnb-chain/bsc/pull/2120) ethdb/pebble: cap memory table size as maxMemTableSize-1 -* [\#2107](https://github.com/bnb-chain/bsc/pull/2107) cmd/geth: fix parse state scheme -* [\#2121](https://github.com/bnb-chain/bsc/pull/2121) parlia: fix verifyVoteAttestation when verify a batch of headers -* [\#2132](https://github.com/bnb-chain/bsc/pull/2132) core: fix systemcontracts.GenesisHash when run bsc firstly without init -* [\#2155](https://github.com/bnb-chain/bsc/pull/2155) cmd, core: resolve scheme from a read-write database and refactor resolveChainFreezerDir func - -IMPROVEMENT -* [\#2099](https://github.com/bnb-chain/bsc/pull/2099) params/config: remove useless toml tag for hardforks -* [\#2100](https://github.com/bnb-chain/bsc/pull/2100) core/genesis: support chapel to run without geth init -* [\#2101](https://github.com/bnb-chain/bsc/pull/2101) core: add metrics for bad block -* [\#2109](https://github.com/bnb-chain/bsc/pull/2109) cmd/geth: tidy flags for geth command -* [\#1953](https://github.com/bnb-chain/bsc/pull/1953) build(deps): bump github.com/docker/docker -* [\#2086](https://github.com/bnb-chain/bsc/pull/2086) build(deps): bump golang.org/x/crypto from 0.12.0 to 0.17.0 -* [\#2106](https://github.com/bnb-chain/bsc/pull/2106) params: use rialto to test builtin network logic -* [\#2098](https://github.com/bnb-chain/bsc/pull/2098) cmd, les, tests: remove light client code -* [\#2114](https://github.com/bnb-chain/bsc/pull/2114) p2p: add serve metrics -* [\#2123](https://github.com/bnb-chain/bsc/pull/2123) p2p, eth: improve logs -* [\#2116](https://github.com/bnb-chain/bsc/pull/2116) tests: revive evm test cases -* [\#2161](https://github.com/bnb-chain/bsc/pull/2161) code: remove IsEuler check from worker.go -* [\#2167](https://github.com/bnb-chain/bsc/pull/2167) improve: increase SystemTxsGas from 1,500,000 to 5,000,000 -* [\#2172](https://github.com/bnb-chain/bsc/pull/2172) improve: remove sharedpool from miner -* [\#1332](https://github.com/bnb-chain/bsc/pull/1332) core/state: no need to prune block if the same - -## v1.3.7 -FEATURE -* [\#2067](https://github.com/bnb-chain/bsc/pull/2067) cmd/geth: add check func to validate state scheme -* [\#2068](https://github.com/bnb-chain/bsc/pull/2068) internal/ethapi: implement eth_getBlockReceipts - -BUGFIX -* [\#2035](https://github.com/bnb-chain/bsc/pull/2035) all: pull snap sync PRs from upstream v1.13.5 -* [\#2072](https://github.com/bnb-chain/bsc/pull/2072) fix: fix the pebble config of level option -* [\#2078](https://github.com/bnb-chain/bsc/pull/2078) core: LoadChainConfig return the predefined config for built-in networks firstly - -## v1.3.6 -FEATURE -* [\#2012](https://github.com/bnb-chain/bsc/pull/2012) cmd, core, ethdb: enable Pebble on 32 bits and OpenBSD -* [\#2063](https://github.com/bnb-chain/bsc/pull/2063) log: support to disable log rotate by hours -* [\#2064](https://github.com/bnb-chain/bsc/pull/2064) log: limit rotateHours in range [0,23] - -BUGFIX -* [\#2058](https://github.com/bnb-chain/bsc/pull/2058) params: set default hardfork times - -IMPROVEMENT -* [\#2015](https://github.com/bnb-chain/bsc/pull/2015) cmd, core, eth: change default network from ETH to BSC -* [\#2036](https://github.com/bnb-chain/bsc/pull/2036) cmd/jsutils: add 2 tools get validator version and block txs number -* [\#2037](https://github.com/bnb-chain/bsc/pull/2037) core/txpool/legacypool: respect nolocals-setting -* [\#2042](https://github.com/bnb-chain/bsc/pull/2042) core/systemcontracts: update CommitUrl for keplerUpgrade -* [\#2043](https://github.com/bnb-chain/bsc/pull/2043) tests/truffle: adapt changes in bsc-genesis-contracts -* [\#2051](https://github.com/bnb-chain/bsc/pull/2051) core/vote: wait some blocks before voting since mining begin -* [\#2060](https://github.com/bnb-chain/bsc/pull/2060) cmd/utils: allow HTTPHost and WSHost flags precede - -## v1.3.5 -FEATURE -* [\#1970](https://github.com/bnb-chain/bsc/pull/1970) core: enable Shanghai EIPs -* [\#1973](https://github.com/bnb-chain/bsc/pull/1973) core/systemcontracts: include BEP-319 on kepler hardfork - -BUGFIX -* [\#1964](https://github.com/bnb-chain/bsc/pull/1964) consensus/parlia: hardfork block can be epoch block -* [\#1979](https://github.com/bnb-chain/bsc/pull/1979) fix: upgrade pebble and improve config -* [\#1980](https://github.com/bnb-chain/bsc/pull/1980) internal/ethapi: fix null effectiveGasPrice in GetTransactionReceipt - -IMPROVEMENT -* [\#1977](https://github.com/bnb-chain/bsc/pull/1977) doc: add instructions for starting fullnode with pbss - -## v1.3.4 -BUGFIX -* fix: remove pipecommit in miner -* add a hard fork: Hertzfix - -## v1.3.3 -BUGFIX -* [\#1986](https://github.com/bnb-chain/bsc/pull/1986) fix(cmd): check pruneancient when creating db - -IMPROVEMENT -* [\#2000](https://github.com/bnb-chain/bsc/pull/2000) cmd/utils: exit process if txlookuplimit flag is set - -## v1.3.2 -BUGFIX -* fix: remove sharedPool - -IMPROVEMENT -* [\#2007](https://github.com/bnb-chain/bsc/pull/2007) consensus/parlia: increase size of snapshot cache in parlia -* [\#2008](https://github.com/bnb-chain/bsc/pull/2008) consensus/parlia: recover faster when snapshot of parlia is gone in disk - -## v1.3.1 -FEATURE -* [\#1881](https://github.com/bnb-chain/bsc/pull/1881) feat: active pbss -* [\#1882](https://github.com/bnb-chain/bsc/pull/1882) cmd/geth: add hbss to pbss convert tool -* [\#1916](https://github.com/bnb-chain/bsc/pull/1916) feat: cherry-pick pbss patch commits from eth repo in v1.13.2 -* [\#1939](https://github.com/bnb-chain/bsc/pull/1939) dependency: go version to 1.20 and some dependencies in go.mod -* [\#1955](https://github.com/bnb-chain/bsc/pull/1955) eth, trie/triedb/pathdb: pbss patches -* [\#1962](https://github.com/bnb-chain/bsc/pull/1962) cherry pick pbss patches from go-ethereum - -BUGFIX -* [\#1923](https://github.com/bnb-chain/bsc/pull/1923) consensus/parlia: fix nextForkHash in Extra filed of block header -* [\#1950](https://github.com/bnb-chain/bsc/pull/1950) fix: 2 APIs of get receipt related -* [\#1951](https://github.com/bnb-chain/bsc/pull/1951) txpool: fix a potential crash issue in shutdown; -* [\#1963](https://github.com/bnb-chain/bsc/pull/1963) fix: revert trie commited flag after delete statedb mpt cache - -IMPROVEMENT -* [\#1948](https://github.com/bnb-chain/bsc/pull/1948) performance: commitTire concurrently -* [\#1949](https://github.com/bnb-chain/bsc/pull/1949) code: remove accountTrieCache and storageTrieCache -* [\#1954](https://github.com/bnb-chain/bsc/pull/1954) trie: keep trie prefetch during validation phase - -## v1.3.0 -#### RPC -* [internal/ethapi: add debug_getRawReceipts RPC method (#24773)](https://github.com/bnb-chain/bsc/pull/1840/commits/ae7d834bc752a2d94fef9d354ee78fcb9425f3d1) -* [node, rpc: add ReadHeaderTimeout config option (#25338)](https://github.com/bnb-chain/bsc/pull/1840/commits/9244f87dc1c8869a2632176f719e515217720a43) -* [rpc: check that "version" is "2.0" in request objects (#25570)](https://github.com/bnb-chain/bsc/pull/1840/commits/38e002f4641c2779c897ccaca575ec5ddeee9254) -* [rpc: support injecting HTTP headers through context (#26023)](https://github.com/bnb-chain/bsc/pull/1840/commits/add337e0f7bad02f3cf535c66cd31f252b0b5c99) -* [rpc: websocket should respect the "HTTP_PROXY" by default (#27264)](https://github.com/bnb-chain/bsc/pull/1840/commits/73697529994e14996b7740730481e926d5ec3e40) -* [rpc: change BlockNumber constant values to match ethclient (#27219)](https://github.com/bnb-chain/bsc/pull/1840/commits/9231770811cda0473a7fa4e2bccc95bf62aae634) -* [eth: make debug_StorageRangeAt take a block hash or number (#27328)](https://github.com/bnb-chain/bsc/pull/1840/commits/d789c68b667e13eb5cefd19d09ae84f7d016df6a) -* [eth,core: add api debug_getTrieFlushInterval (#27303)](https://github.com/bnb-chain/bsc/pull/1840/commits/0783cb7d91ad7b3cdf72ac6c6edaec8318673eb6) -* [rpc: add limit for batch request items and response size (#26681)](https://github.com/bnb-chain/bsc/pull/1840/commits/f3314bb6df4c86e650f0e47cbb5a21ca0616ac11) -* [core/types: support yParity field in JSON transactions (#27744)](https://github.com/bnb-chain/bsc/pull/1840/commits/bb148dd342ba03ce40cf04295e193c94b9dda322) -* [eth/filters: send rpctransactions in pending-subscription (#26126)](https://github.com/bnb-chain/bsc/pull/1840/commits/8c5ce1107b3110c7cb735d8dfa91c9c701393c85) -#### Flag -* [cmd/geth: rename --whitelist to --eth.requiredblocks (#24505)](https://github.com/bnb-chain/bsc/pull/1840/commits/dbfd3972624c1d82db21f5dfceab8fde7a1eee0a) -* [cmd: migrate to urfave/cli/v2 (#24751)](https://github.com/bnb-chain/bsc/pull/1840/commits/52ed3570c483693fdd6667add7e3050520ad3ba2) -* [cmd/utils: print warning when --metrics.port set without --metrics.ad…](https://github.com/bnb-chain/bsc/pull/1840/commits/8846c07d044f30dca8cd0db91c6245f71f4b24fa) -* [cmd/devp2p: add --extaddr flag (#26312)](https://github.com/bnb-chain/bsc/pull/1840/commits/b44abf56a966016cbb651648ac2d7b6705e80b11) -* [core,eth: adddebug_setTrieFlushInterval to change trie flush frequ](https://github.com/bnb-chain/bsc/pull/1840/commits/711afbc7fd76f1f206429e26f9aa5bf98bc7b43d) -* [miner, cmd, eth: require explicit etherbase address (#26413)](https://github.com/bnb-chain/bsc/pull/1840/commits/2b44ef5f93cc7479a77890917a29684b56e9167a) -* [cmd/geth: Add[--log.format] cli param (#27001)](https://github.com/bnb-chain/bsc/pull/1840/commits/2d1492821d058a3488b4da2c1f62906eaf6d7c95) -* [cmd/geth: rename --vmodule to --log.vmodule (#27071)](https://github.com/bnb-chain/bsc/pull/1840/commits/f2df2b1981fa1e014e4cb34cf9a8dd7b8519e0ac) -* [params, trie: add verkle fork management + upgrade go-verkle (#27464)](https://github.com/bnb-chain/bsc/pull/1840/commits/85b8d1c06c49342966cad2bbdc17d0dc28b66ffd) -#### GraphQL -* [graphql: fee history fields (#24452)](https://github.com/bnb-chain/bsc/pull/1840/commits/57cec892536270fc6dafae01ded2c528ffa370e9) -* [graphql: add rawReceipt field to transaction type (#24738)](https://github.com/bnb-chain/bsc/pull/1840/commits/d73df893a6fc528e69506397322205bd9258b6fa) -* [graphql: add raw fields to block and tx (#24816)](https://github.com/bnb-chain/bsc/pull/1840/commits/29a6b6bcac170ca7f8fceb242eba45ff15df17a1) -* [graphql: return correct logs for tx (#25612)](https://github.com/bnb-chain/bsc/pull/1840/commits/d0dc349fd36bd79f94516c866251783641ed12f1) -* [graphql: add query timeout (#26116)](https://github.com/bnb-chain/bsc/pull/1840/commits/ee9ff064694c445a3a6972001ccbce2cc5b9c3f2) -* [graphql, node, rpc: improve HTTP write timeout handling (#25457)](https://github.com/bnb-chain/bsc/pull/1840/commits/f20eba426a1a871f98d0d988bfd51767364650b7) -* [graphql: implement withdrawals (EIP-4895) (#27072)](https://github.com/bnb-chain/bsc/pull/1840/commits/fbe432fa1584bc976fe0242d999a7dd8903378b2) -#### Client -* [ethclient: add CallContractAtHash (#24355)](https://github.com/bnb-chain/bsc/pull/1700/commits/e98114da4feedf6dfb17b9839fc2c314cf1e5768) -* [ethclient: add PeerCount method (#24849)](https://github.com/bnb-chain/bsc/pull/1840/commits/f5ff022dbca2b14af59974154874537b5ed4cc5e) -* [ethereum, ethclient: add FeeHistory support (#25403)](https://github.com/bnb-chain/bsc/pull/1840/commits/9ad508018e4790da0c1c00ac355f206fca12ab7c) -* [eth/filters, ethclient/gethclient: add fullTx option to pending tx fi…](https://github.com/bnb-chain/bsc/pull/1840/commits/5b1a04b9c749d804b51159fe12246c56de8515c1) -* [ethclient: include withdrawals in ethclient block responses (#26778)](https://github.com/bnb-chain/bsc/pull/1840/commits/e1b98f49a5075694c5022f5ec74425e40da415dd) -#### Tracer -* [eth/tracers/js: drop duktape engine (#24934)](https://github.com/bnb-chain/bsc/pull/1840/commits/ba47d800b13058885288c38bd174babb38560c89) -* [eth/tracers: add support for block overrides in debug_traceCall (#24871)](https://github.com/bnb-chain/bsc/pull/1840/commits/d8a2305565b1f97c451f8595e0f65358d6842714) -* [eth/tracers: add onlyTopCall option to callTracer (#25430)](https://github.com/bnb-chain/bsc/pull/1840/commits/86de2e516e5a4a2bbe1d29b46a0f460fbdde8303) -* [eth/tracers: remove revertReasonTracer, add revert reason to callTracer](https://github.com/bnb-chain/bsc/pull/1840/commits/ff1f49245d641a7268ade38cf512bdc7b26f9b7c) -* [eth/tracers: add diffMode to prestateTracer (#25422)](https://github.com/bnb-chain/bsc/pull/1840/commits/5d52a35931bba10f438ce4f41410442dd9cd396c) -* [eth/tracers: add multiplexing tracer (#26086)](https://github.com/bnb-chain/bsc/pull/1840/commits/53b624b56d4f36c90ebf8046bd1ca78c87a3b6df) -* [core/vm: set tracer-observable value of a delegatecall to match parent `value`](https://github.com/bnb-chain/bsc/pull/1840/commits/b0cd8c4a5c4f0f25011ed64235a3ea1280f03c51) -* [eth/tracers: add native flatCallTracer (aka parity style tracer) (#26…](https://github.com/bnb-chain/bsc/pull/1840/commits/2ad150d986dab085965be047c94af6b2952a9e24) -* [eth/tracers/native: set created address to nil in case of failure (#2…](https://github.com/bnb-chain/bsc/pull/1840/commits/41af42e97c9d62d303a883cc3c143f560867fa34) -* [eth/tracers: report correct gasLimit in call tracers (#27029)](https://github.com/bnb-chain/bsc/pull/1840/commits/0b76eb3708626fbd2eb9c1b58d7b4eac6a5eec15) -* [eth/tracers: addtxHashfield on txTraceResult (#27183)](https://github.com/bnb-chain/bsc/pull/1840/commits/604e215d1bb070dff98fb76aa965064c74e3633f) -* [eth/tracers: add ReturnData in the tracer's response (#27704)](https://github.com/bnb-chain/bsc/pull/1840/commits/1e069cf8026a9f71b5f7e80959465e4b273d5806) -#### Command -* [cmd/geth: inspect snapshot dangling storage (#24643)](https://github.com/bnb-chain/bsc/pull/1840/commits/92e3c56e7be26aac4a25859f55f234aadeec7dbf) -* [core/state/snapshot: detect and clean up dangling storage snapshot in generation](https://github.com/bnb-chain/bsc/pull/1840/commits/59ac229f87831bd74b4dc07d34f54137cca78095) -* [internal/ethapi: add db operations to api (#24739)](https://github.com/bnb-chain/bsc/pull/1840/commits/16701c51697e28986feebd122c6a491e4d9ac0e7) -* [cmd/geth: adddb check-state-contentto verify integrity of trie nodes (#24840)](https://github.com/bnb-chain/bsc/pull/1840/commits/e0a9752b965f243313f2c32a91d306600dc3863c) -* [ethdb/remotedb, cmd: add support for remote (readonly) databases](https://github.com/bnb-chain/bsc/pull/1840/commits/57192bd0dc545d921306f6a4d7566c0c70c764c5) -* [cmd/abigen: accept combined-json via stdin (#24960)](https://github.com/bnb-chain/bsc/pull/1840/commits/0287e1a7c00c1eaad1a99b4ea05d70f1ed685140) -* [cmd/geth: extend traverseRawState command (#24954)](https://github.com/bnb-chain/bsc/pull/1840/commits/a10660b7f8f4fa218ee62a7664b47eb6028fee84) -* [cmd/geth, core/state/snapshot: rework journal loading, implement account-check (#24765)](https://github.com/bnb-chain/bsc/pull/1840/commits/c375ee91e99cd9c072f2fe9b535c5cb780b5f8a0) -* [cmd/geth: add a verkle subcommand (#25718)](https://github.com/bnb-chain/bsc/pull/1840/commits/9d717167aaf27a48d56ad9d1a2c36f90eba1cc13) -* [cmd/geth, cmd/utils: geth attach with custom headers (#25829)](https://github.com/bnb-chain/bsc/pull/1840/commits/ea26fc8a6c44ebb48223f991048f41b2ec0a6414) -* [core/rawdb: refactor db inspector for extending multiple ancient storage](https://github.com/bnb-chain/bsc/pull/1840/commits/60e30a940bbba2c0d26de040195a5ccdb14d8c10) -* [cmd/clef: addlist-accountsandlist-walletsto CLI (#26080)](https://github.com/bnb-chain/bsc/pull/1840/commits/f3a005f176372ff291dfa7c02ee1c87d18e9c788) -* [cmd/clef: add importraw feature to clef (#26058)](https://github.com/bnb-chain/bsc/pull/1840/commits/17744639dafc5a54f21e220660bd39d765a09051) -* [cmd/devp2p: add more nodekey commands (#26129)](https://github.com/bnb-chain/bsc/pull/1840/commits/913973436bb88b652faffc10d8f97e4c19722883) -* [internal/web3ext: fix eth_call stateOverrides in console (#26265)](https://github.com/bnb-chain/bsc/pull/1840/commits/1325fef1025b9feb3342308265b6d1399614be30) -* [cmd/evm: add blocktest subcommand to evm (#26526)](https://github.com/bnb-chain/bsc/pull/1840/commits/90f15a0230be34a292c5d0574ee7910ee44267de) -#### HardFork -* [params: define cancun and prague as timestamp based forks (#26481)](https://github.com/bnb-chain/bsc/pull/1840/commits/f3a005f176372ff291dfa7c02ee1c87d18e9c788) -* [all: tie timestamp based forks to the passage of London (#27279)](https://github.com/bnb-chain/bsc/pull/1840/commits/85a4b82b3373fc5f3fa8b7c68061c55b0db0e9b7) -##### Shanghai -* [core/vm: implement EIP-3855: PUSH0 instruction (#24039)](https://github.com/bnb-chain/bsc/pull/1840/commits/3b967d16caf306ccf8eb78b3a68bec36fa2a52ee) -* [core: implement EIP-3651, warm coinbase (#25819)](https://github.com/bnb-chain/bsc/pull/1840/commits/ec2ec2d08e28571dc189903f743cc3931da254a9) -* [core/vm: implement EIP-3860: Limit and meter initcode (#23847)](https://github.com/bnb-chain/bsc/pull/1840/commits/793f0f9ec860f6f51e0cec943a268c10863097c7) -* [all: implement withdrawals (EIP-4895) (#26484)](https://github.com/bnb-chain/bsc/pull/1840/commits/2a2b0419fb966c54fb86b17bbccea743a45b4d2a) -##### CanCun (almost ready) -* [all: implement EIP-1153 transient storage (#26003)](https://github.com/bnb-chain/bsc/pull/1840/commits/b4ea2bf7dda9def5374ed3ab16a3dfd872eaa40a) -* [core: 4844 opcode and precompile (#27356)](https://github.com/bnb-chain/bsc/pull/1840/commits/c537ace249805903f068c4c66b90558848b49a2f) -* [core/vm: implement EIP-5656, mcopy instruction (#26181)](https://github.com/bnb-chain/bsc/pull/1840/commits/5c9cbc218a67ea6d71652f0d93f4c354a687a965) -* [core/state, core/vm: implement EIP 6780 (#27189)](https://github.com/bnb-chain/bsc/pull/1840/commits/988d84aa7caf8e71ce441fa65f80d44216d9e00e) -#### New Feature -* [eth: introduce eth67 protocol (#24093)](https://github.com/bnb-chain/bsc/pull/1840/commits/30602163d5d8321fbc68afdcbbaf2362b2641bde) -* [eth: implement eth/68 (#25980)](https://github.com/bnb-chain/bsc/pull/1840/commits/b0d44338bbcefee044f1f635a84487cbbd8f0538) -* [PBBS(ready to activate)](https://github.com/ethereum/go-ethereum/commits?author=rjl493456442) -#### P2P -* [eth/fetcher: throttle peers which deliver many invalid transactions (…](https://github.com/bnb-chain/bsc/pull/1840/commits/7f2890a9be1f91368582479f171248b972b45ae3) -#### Build -* [build/bot: add ppa-build.sh (#24919)](https://github.com/bnb-chain/bsc/pull/1840/commits/adcad1cd39ad2bc9ddab67b4bee3023b3e6c9873) -* [more checs in ci](https://github.com/bnb-chain/bsc/pull/1840/files#diff-6179837f7df53a6f05c522b6b7bb566d484d5465d9894fb04910dd08bb40dcc9) -#### Improvement -* [all: use 'embed' instead of go-bindata (#24744)](https://github.com/bnb-chain/bsc/pull/1840/commits/7ab15490e93e6384cfaa233238777ea88a88b8b6) -* [all: move genesis initialization to blockchain (#25523)](https://github.com/bnb-chain/bsc/pull/1840/commits/d10c28030944d1c32febba3f45ae8c175ab34063) -#### Clear Up -* [common/compiler, cmd/abigen: remove solc/vyper compiler integration](https://github.com/bnb-chain/bsc/pull/1840/commits/8541ddbd951370b2a42df8d82b0633ff0efeba12) -* [all: remove concept of public/private API definitions (#25053)](https://github.com/bnb-chain/bsc/pull/1840/commits/10dc5dce0871bf8c24bac41b04e47c3b9ad2b93e) -* [cmd/geth: drop geth js command (#25000)](https://github.com/bnb-chain/bsc/pull/1840/commits/f20a56926551ae91a349498f9ce97c8ee373d6bb) -* [core/genesis: remove calaverasAllocData (#25516)](https://github.com/bnb-chain/bsc/pull/1840/commits/141cd425310b503c5678e674a8c3872cf46b7086) -* [node: drop support for static & trusted node list files (#25610)](https://github.com/bnb-chain/bsc/pull/1840/commits/3630cafb34f7c48b9cc78cf736309275cbd70f74) -* [core: drop legacy receipt types (#26225)](https://github.com/bnb-chain/bsc/pull/1840/commits/10347c6b54d5b28a2e71d9c4993e7f44b0a359c3) -* [cmd/puppeth: remove puppeth](https://github.com/bnb-chain/bsc/pull/1840/commits/8ded6a9fcd883d7d96ef695f5b312c509eae3a0a) -* [cmd, eth, node: deprecate personal namespace (#26390)](https://github.com/bnb-chain/bsc/pull/1840/commits/d0a4989a8def7e6bad182d1513e8d4a093c1672d) -* [accounts, build, mobile: remove Andriod and iOS support](https://github.com/bnb-chain/bsc/pull/1840/commits/d9699c8238307d5c3081c12078f78527468d7dbc) -* [params: remove EIP150Hash from chainconfig (#27087)](https://github.com/bnb-chain/bsc/pull/1840/commits/5e4d726e2a05aee80a75e5f99fd699f220dd503e) -* [all: remove notion of trusted checkpoints in the post-merge world (#2…](https://github.com/bnb-chain/bsc/pull/1840/commits/1e556d220c3a40286dd90b37a08bb5fc659ee6ee) -* [all: remove ethash pow, only retain shims needed for consensus and te](https://github.com/bnb-chain/bsc/pull/1840/commits/dde2da0efb8e9a1812f470bc43254134cd1f8cc0) -* [cmd, core, eth, graphql, trie: no persisted clean trie cache file (#2…](https://github.com/bnb-chain/bsc/pull/1840/commits/59f7b289c329b5a56fa6f4e9acee64e504c4cc0d) -* [les: remove obsolete code related to PoW header syncing (#27737)](https://github.com/bnb-chain/bsc/pull/1840/commits/d4d88f9bce13ca9310bf28f5f26ea9f1915ba90d) -* remove diffsync -#### Others -* [accounts/usbwallet: support Ledger Nano S Plus and FTS (#25933)](https://github.com/bnb-chain/bsc/pull/1840/commits/7eafbec741d124bc53896f6bfc2408b70ab9a82a) -* [accounts/scwallet: fix keycard data signing error (#25331)](https://github.com/bnb-chain/bsc/pull/1840/commits/0c66d971e7f3557df297cbe450fe7fc7826017be) -* [core/state: replace fastcache code cache with gc-friendly structure (…](https://github.com/bnb-chain/bsc/pull/1840/commits/5fded040372784985265f83f33f15cb6a51bebdb) -* [internal/debug: add --log.file option (#26149)](https://github.com/bnb-chain/bsc/pull/1840/commits/5b4c149f97408ecefc7f440e86c12a30c4342620) -* [ci: disable coverage reporting in appveyor and travis](https://github.com/bnb-chain/bsc/pull/1840/commits/a0d63bc69a659009a3884f50c563a0e58483cdd0) -* [all: change chain head markers from block to header (#26777)](https://github.com/bnb-chain/bsc/pull/1840/commits/cd31f2dee2843776e485769ce85e0524716199bc) -* [core, miner: revert block gas counter in case of invalid transaction](https://github.com/bnb-chain/bsc/pull/1840/commits/77e33e5a49be99130a02dc72d6a0e4739fdd44d6) -* [accounts/usbwallet: mitigate ledger app chunking issue (#26773)](https://github.com/bnb-chain/bsc/pull/1840/commits/1e3177de220b1590704c96572fce820bfc87281e) -* [signer/core: accept all solidity primitive types for EIP-712 signing](https://github.com/bnb-chain/bsc/pull/1840/commits/02796f6bee7e014fd16ad39f0bcd3b665b51e0bb) -* [cmd/geth: enable log rotation (#26843)](https://github.com/bnb-chain/bsc/pull/1840/commits/7076ae00aa36ae250608455de928557ce4e5549f) -* [internal/ethapi: make EstimateGas use[latest] block by default (#24363)](https://github.com/bnb-chain/bsc/pull/1840/commits/0b66d47449f61e9ebaf9e1db3ed290b59844d4c1) -* [miner: suspend miner if node is syncing (#27218)](https://github.com/bnb-chain/bsc/pull/1840/commits/d4961881d7c92603f591f9cb8c705d00d8cbdfc0) -* [all: move main transaction pool into a subpool (#27463)](https://github.com/bnb-chain/bsc/pull/1840/commits/d40a255e973775575d8d16456252f93ac75c09f0) -* [core/txpool/blobpool: 4844 blob transaction pool (#26940)](https://github.com/bnb-chain/bsc/pull/1840/commits/1662228ac68325b4024e0cb6a4ce7dde27eb4c2d) -* [eth: send big transactions by announce/retrieve only (#27618)](https://github.com/bnb-chain/bsc/pull/1840/commits/f5d3d486e459dce29130576ae88f2324ad586b50) -* [core/rawdb: support freezer batch read with no size limit (#27687)](https://github.com/bnb-chain/bsc/pull/1840/commits/0b1f97e151e8b34a0a0d528a3472e27de1d12a9c) -* disable pipeCommit, break now - -## v1.2.12 -FEATURE -* [\#1852](https://github.com/bnb-chain/bsc/pull/1852) discov: add hardcoded bootnodes - -BUGFIX -* [\#1844](https://github.com/bnb-chain/bsc/pull/1844) crypto: Update BLST to v0.3.11 -* [\#1854](https://github.com/bnb-chain/bsc/pull/1854) fetcher: no import blocks before or equal to the finalized height -* [\#1855](https://github.com/bnb-chain/bsc/pull/1855) eth/tracers: trace system tx should add intrinsicGas - -IMPROVEMENT -* [\#1839](https://github.com/bnb-chain/bsc/pull/1839) Update init-network command -* [\#1858](https://github.com/bnb-chain/bsc/pull/1858) vote: check consensus key match vote key before voting - -## v1.2.11 -FEATURE -* [\#1797](https://github.com/bnb-chain/bsc/pull/1797) client: add FinalizedHeader/Block to use the fast finality -* [\#1805](https://github.com/bnb-chain/bsc/pull/1805) vote: remove DisableBscProtocol and add flag to skip votes assmebling - -BUGFIX -* [\#1829](https://github.com/bnb-chain/bsc/pull/1829) fix: lagging nodes failed to sync - -## v1.2.10 -FEATURE -* [\#1780](https://github.com/bnb-chain/bsc/pull/1780) log: reduce logs when receiving too much votes from a peer -* [\#1788](https://github.com/bnb-chain/bsc/pull/1788) metrics: add txpool config into metrics server -* [\#1789](https://github.com/bnb-chain/bsc/pull/1789) rpc: add GetFinalizedHeader/Block to simplify using the fast finality feature -* [\#1791](https://github.com/bnb-chain/bsc/pull/1791) finality: add more check to ensure result of assembleVoteAttestation -* [\#1795](https://github.com/bnb-chain/bsc/pull/1795) tool: add a tool extradump to parse extra data after luban - -BUGFIX -* [\#1773](https://github.com/bnb-chain/bsc/pull/1773) discov: do not filter out bootnodes -* [\#1778](https://github.com/bnb-chain/bsc/pull/1778) vote: backup validator sync votes from corresponding mining validator -* [\#1784](https://github.com/bnb-chain/bsc/pull/1784) fix: exclude same votes when doing malicious voting check - -## v1.2.9 -FEATURE -* [\#1775](https://github.com/bnb-chain/bsc/pull/1775) upgrade: several hardfork block height on mainnet: Plato, Hertz(Berlin, London) - -## v1.2.8 -FEATURE -* [\#1626](https://github.com/bnb-chain/bsc/pull/1626) eth/filters, ethclient/gethclient: add fullTx option to pending tx filter -* [\#1726](https://github.com/bnb-chain/bsc/pull/1726) feat: support password flag when handling bls keys - -BUGFIX -* [\#1734](https://github.com/bnb-chain/bsc/pull/1734) fix: avoid to block the chain when failed to send votes - -## v1.2.7 -FEATURE -* [\#1645](https://github.com/bnb-chain/bsc/pull/1645) lightclient: fix validator set change -* [\#1717](https://github.com/bnb-chain/bsc/pull/1717) feat: support creating a bls keystore from a specified private key -* [\#1720](https://github.com/bnb-chain/bsc/pull/1720) metrics: add counter for voting status of whole network - -## v1.2.6 -FEATURE -* [\#1697](https://github.com/bnb-chain/bsc/pull/1697) upgrade: block height of Hertz(London&Berlin) on testnet -* [\#1686](https://github.com/bnb-chain/bsc/pull/1686) eip3529tests: refactor tests -* [\#1676](https://github.com/bnb-chain/bsc/pull/1676) EIP-3529 (BEP-212) Unit tests for Parlia Config -* [\#1660](https://github.com/bnb-chain/bsc/pull/1660) feat: add a tool for submitting evidence of maliciousvoting -* [\#1623](https://github.com/bnb-chain/bsc/pull/1623) P2P: try to limit the connection number per IP address -* [\#1608](https://github.com/bnb-chain/bsc/pull/1608) feature: Enable Berlin EIPs -* [\#1597](https://github.com/bnb-chain/bsc/pull/1597) feature: add malicious vote monitor -* [\#1422](https://github.com/bnb-chain/bsc/pull/1422) core: port several London EIPs on BSC - -IMPROVEMENT -* [\#1662](https://github.com/bnb-chain/bsc/pull/1662) consensus, core/rawdb, miner: downgrade logs -* [\#1654](https://github.com/bnb-chain/bsc/pull/1654) config: use default fork config if not specified in config.toml -* [\#1642](https://github.com/bnb-chain/bsc/pull/1642) readme: update the disk requirement to 2.5TB -* [\#1621](https://github.com/bnb-chain/bsc/pull/1621) upgrade: avoid to modify RialtoGenesisHash when testing in rialtoNet - -BUGFIX -* [\#1682](https://github.com/bnb-chain/bsc/pull/1682) fix: set the signer of parlia to the most permissive one -* [\#1681](https://github.com/bnb-chain/bsc/pull/1681) fix: not double GasLimit of block upon London upgrade -* [\#1679](https://github.com/bnb-chain/bsc/pull/1679) fix: check integer overflow when decode crosschain payload -* [\#1671](https://github.com/bnb-chain/bsc/pull/1671) fix: voting can only be enabled when mining -* [\#1663](https://github.com/bnb-chain/bsc/pull/1663) fix: ungraceful shutdown caused by malicious Vote Monitor -* [\#1651](https://github.com/bnb-chain/bsc/pull/1651) fix: remove naturally finality -* [\#1641](https://github.com/bnb-chain/bsc/pull/1641) fix: support getFilterChanges after NewFinalizedHeaderFilter - -## v1.2.5 -BUGFIX -* [\#1675](https://github.com/bnb-chain/bsc/pull/1675) goleveldb: downgrade the version for performance - -## v1.2.4 -FEATURE -* [\#1636](https://github.com/bnb-chain/bsc/pull/1636) upgrade: block height of Luban on mainnet - -## v1.2.3 -FEATURE -* [\#1574](https://github.com/bnb-chain/bsc/pull/1574) upgrade: update PlatoUpgrade contracts code -* [\#1594](https://github.com/bnb-chain/bsc/pull/1594) upgrade: block height of Plato on testnet - -IMPROVEMENT -* [\#866](https://github.com/bnb-chain/bsc/pull/866) code: x = append(y) is equivalent to x = y -* [\#1488](https://github.com/bnb-chain/bsc/pull/1488) eth/tracers, core/vm: remove `time` from trace output and tracing interface -* [\#1547](https://github.com/bnb-chain/bsc/pull/1547) fix: recently signed check when slashing unavailable validator -* [\#1573](https://github.com/bnb-chain/bsc/pull/1573) feat: remove supports for legacy proof type -* [\#1576](https://github.com/bnb-chain/bsc/pull/1576) fix: support golang 1.20 by upgrading prysm to v4 -* [\#1578](https://github.com/bnb-chain/bsc/pull/1578) fix: output an error log when bsc extension fail to handshake -* [\#1583](https://github.com/bnb-chain/bsc/pull/1583) metrics: add a counter for validator to check work status of voting - -BUGFIX -* [\#1566](https://github.com/bnb-chain/bsc/pull/1566) fix: config for VoteJournalDir and BLSWalletDir -* [\#1572](https://github.com/bnb-chain/bsc/pull/1572) fix: remove dynamic metric labels about fast finality -* [\#1575](https://github.com/bnb-chain/bsc/pull/1575) fix: make BLST PORTABLE for release binary -* [\#1590](https://github.com/bnb-chain/bsc/pull/1590) fix: fix snap flaky tests - -## v1.2.2 -It was skipped by a mistake, replaced by v1.2.3 - -## v1.2.1 -IMPROVEMENT -* [\#1527](https://github.com/bnb-chain/bsc/pull/1527) log: revert a log back to trace level - -## v1.2.0 -FEATURE -* [\#936](https://github.com/bnb-chain/bsc/pull/936) BEP-126: Introduce Fast Finality Mechanism -* [\#1325](https://github.com/bnb-chain/bsc/pull/1325) genesis: add BEP174 changes to relayer contract -* [\#1357](https://github.com/bnb-chain/bsc/pull/1357) Integration API for EIP-4337 bundler with an L2 validator/sequencer -* [\#1463](https://github.com/bnb-chain/bsc/pull/1463) BEP-221: implement cometBFT light block validation -* [\#1493](https://github.com/bnb-chain/bsc/pull/1493) bep: update the bytecode of luban fork after the contract release - -IMPROVEMENT -* [\#1486](https://github.com/bnb-chain/bsc/pull/1486) feature: remove diff protocol registration -* [\#1434](https://github.com/bnb-chain/bsc/pull/1434) fix: improvements after testing fast finality - -BUGFIX -* [\#1430](https://github.com/bnb-chain/bsc/pull/1430) docker: upgrade alpine version & remove apks version -* [\#1458](https://github.com/bnb-chain/bsc/pull/1458) cmd/faucet: clear reqs list when reorg to lower nonce -* [\#1484](https://github.com/bnb-chain/bsc/pull/1484) fix: a deadlock caused by bsc protocol handeshake timeout - -## v1.1.23 -BUGFIX -* [\#1464](https://github.com/bnb-chain/bsc/pull/1464) fix: panic on using WaitGroup after it is freed - -## v1.1.22 -FEATURE -* [\#1361](https://github.com/bnb-chain/bsc/pull/1361) cmd/faucet: merge ipfaucet2 branch to develop - -IMPROVEMENT -* [\#1412](https://github.com/bnb-chain/bsc/pull/1412) fix: init-network with config.toml without setting TimeFormat -* [\#1401](https://github.com/bnb-chain/bsc/pull/1401) log: support custom time format configuration -* [\#1382](https://github.com/bnb-chain/bsc/pull/1382) consnesus/parlia: abort sealing when block in the same height has updated -* [\#1383](https://github.com/bnb-chain/bsc/pull/1383) miner: no need to broadcast sidechain header mined by this validator - -BUGFIX -* [\#1379](https://github.com/bnb-chain/bsc/pull/1379) UT: fix some flaky tests -* [\#1403](https://github.com/bnb-chain/bsc/pull/1403) Makefile: fix devtools install error -* [\#1381](https://github.com/bnb-chain/bsc/pull/1381) fix: snapshot generation issue after chain reinit from a freezer - -## v1.1.21 -FEATURE -* [\#1389](https://github.com/bnb-chain/bsc/pull/1389) upgrade: update the fork height of planck upgrade on mainnet - -BUGFIX -* [\#1354](https://github.com/bnb-chain/bsc/pull/1354) fix: add some boundary check for security -* [\#1373](https://github.com/bnb-chain/bsc/pull/1373) tracer: enable withLog for TraceCall -* [\#1377](https://github.com/bnb-chain/bsc/pull/1377) miner: add fallthrough for switch cases - -## v1.1.20 -FEATURE -* [\#1322](https://github.com/bnb-chain/bsc/pull/1322) cmd/utils/flags.go: --diffsync flag is deprecate -* [\#1261](https://github.com/bnb-chain/bsc/pull/1261) tracer: port call tracer `withLog` to bsc - -IMPROVEMENT -* [\#1337](https://github.com/bnb-chain/bsc/pull/1337) clean: Remove support for Ethereum testnet -* [\#1347](https://github.com/bnb-chain/bsc/pull/1347) upgrade: update the fork height of planck upgrade on testnet -* [\#1343](https://github.com/bnb-chain/bsc/pull/1343) upgrade: update system contracts' code of planck upgrade -* [\#1328](https://github.com/bnb-chain/bsc/pull/1328) upgrade: update system contracts' code of testnet -* [\#1162](https://github.com/bnb-chain/bsc/pull/1162) consensus: fix slash bug when validator set changing -* [\#1344](https://github.com/bnb-chain/bsc/pull/1344) consensus: fix delete the 1st validator from snapshot.recents list -* [\#1149](https://github.com/bnb-chain/bsc/pull/1149) feats: add ics23 proof support for cross chain packages -* [\#1333](https://github.com/bnb-chain/bsc/pull/1333) sec: add proof ops check and key checker - -BUGFIX -* [\#1348](https://github.com/bnb-chain/bsc/pull/1348) core/txpool: implement additional DoS defenses - -## v1.1.19 -FEATURE -* [\#1199](https://github.com/bnb-chain/bsc/pull/1199) mointor: implement double sign monitor - -IMPROVEMENT -* [\#1226](https://github.com/bnb-chain/bsc/pull/1226) eth, trie: sync with upstream v1.10.26 to solve snap sync issues -* [\#1212](https://github.com/bnb-chain/bsc/pull/1212) metrics: add miner info into metrics server -* [\#1240](https://github.com/bnb-chain/bsc/pull/1240) Add NewBatchWithSize API for db and use this API for BloomIndexer.Commit() -* [\#1254](https://github.com/bnb-chain/bsc/pull/1254) ci: update unmaintained tools to use maintained tools -* [\#1256](https://github.com/bnb-chain/bsc/pull/1256) ci: disable CGO_ENABLED when building binary -* [\#1274](https://github.com/bnb-chain/bsc/pull/1274) dep: bump the version of several important library -* [\#1294](https://github.com/bnb-chain/bsc/pull/1294) parlia : add a check for the length of extraData. -* [\#1298](https://github.com/bnb-chain/bsc/pull/1298) dep: update tendermint to v0.31.14 - -Document -* [\#1233](https://github.com/bnb-chain/bsc/pull/1233) doc: update readme -* [\#1245](https://github.com/bnb-chain/bsc/pull/1245) comments: add comments to clarify flags and byte codes -* [\#1266](https://github.com/bnb-chain/bsc/pull/1266) docs: update the readme to latest -* [\#1267](https://github.com/bnb-chain/bsc/pull/1267) docs: minor fix about the readme -* [\#1287](https://github.com/bnb-chain/bsc/pull/1287) docs: minor fix on geth links - -BUGFIX -* [\#1233](https://github.com/bnb-chain/bsc/pull/1233) doc: update readme -* [\#1253](https://github.com/bnb-chain/bsc/pull/1253) fix comments: prune ancient compatibility, add prune ancient comments -* [\#1301](https://github.com/bnb-chain/bsc/pull/1301) fix: p2p sync with lagging peer -* [\#1302](https://github.com/bnb-chain/bsc/pull/1302) fix: eth fetcher re-queue issue - -## v1.1.18 -IMPROVEMENT -* [\#1209](https://github.com/bnb-chain/bsc/pull/1209) metrics: add build info into metrics server -* [\#1204](https://github.com/bnb-chain/bsc/pull/1204) worker: NewTxsEvent and triePrefetch reuse in mining task -* [\#1195](https://github.com/bnb-chain/bsc/pull/1195) hardfork: update Gibbs fork height and system contract code -* [\#1192](https://github.com/bnb-chain/bsc/pull/1192) all: sync with upstream v1.10.22 -* [\#1186](https://github.com/bnb-chain/bsc/pull/1186) worker: improvement of the current block generation logic to get more rewards -* [\#1184](https://github.com/bnb-chain/bsc/pull/1184) worker: remove pre-seal empty block -* [\#1182](https://github.com/bnb-chain/bsc/pull/1182) Parlia: Some updates of the miner worker -* [\#1181](https://github.com/bnb-chain/bsc/pull/1181) all: sync with upstream v1.10.21 -* [\#1177](https://github.com/bnb-chain/bsc/pull/1177) core/forkid: refactor nextForkHash function -* [\#1174](https://github.com/bnb-chain/bsc/pull/1174) worker: some code enhancement on work.go -* [\#1166](https://github.com/bnb-chain/bsc/pull/1166) miner: disable enforceTip when get txs from txpool - -BUGFIX -* [\#1201](https://github.com/bnb-chain/bsc/pull/1201) worker: add double sign check for safety -* [\#1185](https://github.com/bnb-chain/bsc/pull/1185) worker: fix a bug of the delay timer - -## v1.1.17 -IMPROVEMENT - -* [\#1114](https://github.com/bnb-chain/bsc/pull/1114) typo: .github fix job name -* [\#1126](https://github.com/bnb-chain/bsc/pull/1126) ci: specify bind-tools version -* [\#1140](https://github.com/bnb-chain/bsc/pull/1140) p2p: upstream go-ethereum: use errors.Is for error comparison -* [\#1141](https://github.com/bnb-chain/bsc/pull/1141) all: prefer new(big.Int) over big.NewInt(0) -* [\#1159](https://github.com/bnb-chain/bsc/pull/1159) core: remove redundant func - -BUGFIX - -* [\#1138](https://github.com/bnb-chain/bsc/pull/1138) fix: upstream patches from go-ethereum 1.10.19 -* [\#1139](https://github.com/bnb-chain/bsc/pull/1139) fix: upstream go-ethereum: fix duplicate fields names in the generted go struct -* [\#1145](https://github.com/bnb-chain/bsc/pull/1145) consensus: the newChainHead mights not be imported to Parlia.Snapshot -* [\#1146](https://github.com/bnb-chain/bsc/pull/1146) fix: upstream patches from go-ethereum 1.10.20 - -## v1.1.16 - -* [\#1121](https://github.com/bnb-chain/bsc/pull/1121) vm: add two proof verifier to fix the vulnerability in range proof - -## v1.1.15 -* [\#1109](https://github.com/bnb-chain/bsc/pull/1109) nanofork: block exploitation accounts and suspend cross chain bridge related precompile contracts - -## v1.1.14 -IMPROVEMENT -* [\#1057](https://github.com/bnb-chain/bsc/pull/1057) ci: allow merge pull request -* [\#1063](https://github.com/bnb-chain/bsc/pull/1063) ci: fix the pattern of commit lint - -BUGFIX -* [\#1062](https://github.com/bnb-chain/bsc/pull/1062) test: fix TestOfflineBlockPrune failed randomly -* [\#1076](https://github.com/bnb-chain/bsc/pull/1076) bug: pick some patches from go-ethereum on v1.10.18 -* [\#1079](https://github.com/bnb-chain/bsc/pull/1079) core: fix potential goroutine leak - -## v1.1.13 - -FEATURE -* [\#1051](https://github.com/bnb-chain/bsc/pull/1051) Implement BEP153: Native Staking -* [\#1066](https://github.com/bnb-chain/bsc/pull/1066) Upgrade cross chain logic of native staking - -IMPROVEMENT -* [\#952](https://github.com/bnb-chain/bsc/pull/952) Improve trie prefetch -* [\#975](https://github.com/bnb-chain/bsc/pull/975) broadcast block before commit block and add metrics -* [\#992](https://github.com/bnb-chain/bsc/pull/992) Pipecommit enable trie prefetcher -* [\#996](https://github.com/bnb-chain/bsc/pull/996) Trie prefetch on state pretch - -BUGFIX -* [\#1053](https://github.com/bnb-chain/bsc/pull/1053) state: fix offline tool start failed when start with pruneancient -* [\#1060](https://github.com/bnb-chain/bsc/pull/1060) consensus: fix the GasLimitBoundDivisor -* [\#1061](https://github.com/bnb-chain/bsc/pull/1061) fix: upstream patches from go-ethereum -* [\#1067](https://github.com/bnb-chain/bsc/pull/1067) fix:fix potential goroutine leak -* [\#1068](https://github.com/bnb-chain/bsc/pull/1068) core trie rlp: patches from go-ethereum -* [\#1070](https://github.com/bnb-chain/bsc/pull/1070) txpool: reheap the priced list if london fork not enabled - -## v1.1.12 - -FEATURE -* [\#862](https://github.com/bnb-chain/bsc/pull/862) Pruning AncientDB inline at runtime -* [\#926](https://github.com/bnb-chain/bsc/pull/926) Separate Processing and State Verification on BSC - -IMPROVEMENT -* [\#816](https://github.com/bnb-chain/bsc/pull/816) merge go-ethereum v1.10.15 -* [\#950](https://github.com/bnb-chain/bsc/pull/950) code optimizations for state prefetcher -* [\#972](https://github.com/bnb-chain/bsc/pull/972) redesign triePrefetcher to make it thread safe -* [\#998](https://github.com/bnb-chain/bsc/pull/998) update dockerfile with a few enhancement -* [\#1015](https://github.com/bnb-chain/bsc/pull/1015) disable noisy logs since system transaction will cause gas capping - -BUGFIX -* [\#932](https://github.com/bnb-chain/bsc/pull/932) fix account root was not set correctly when committing mpt during pipeline commit -* [\#953](https://github.com/bnb-chain/bsc/pull/953) correct logic for eip check of NewEVMInterpreter -* [\#958](https://github.com/bnb-chain/bsc/pull/958) define DiscReason as uint8 -* [\#959](https://github.com/bnb-chain/bsc/pull/959) update some packages' version -* [\#983](https://github.com/bnb-chain/bsc/pull/983) fix nil pointer issue when stopping mining new block -* [\#1002](https://github.com/bnb-chain/bsc/pull/1002) Fix pipecommit active statedb -* [\#1005](https://github.com/bnb-chain/bsc/pull/1005) freezer batch compatible offline prunblock command -* [\#1007](https://github.com/bnb-chain/bsc/pull/1007) missing contract upgrades and incorrect behavior when miners enable pipecommit -* [\#1009](https://github.com/bnb-chain/bsc/pull/1009) resolve the concurrent cache read and write issue for fast node -* [\#1011](https://github.com/bnb-chain/bsc/pull/1011) Incorrect merkle root issue when enabling pipecommit with miner -* [\#1013](https://github.com/bnb-chain/bsc/pull/1013) tools broken because of writting metadata when open a readyonly db -* [\#1014](https://github.com/bnb-chain/bsc/pull/1014) fast node can not recover from force kill or panic -* [\#1019](https://github.com/bnb-chain/bsc/pull/1019) memory leak issue with diff protocol -* [\#1020](https://github.com/bnb-chain/bsc/pull/1020) remove diffhash patch introduced from separate node -* [\#1024](https://github.com/bnb-chain/bsc/pull/1024) verify node is not treated as verify node - -## v1.1.11 - -UPGRADE -* [\#927](https://github.com/bnb-chain/bsc/pull/927) add readme for validators about how to enter/exit maintenance -* [\#942](https://github.com/bnb-chain/bsc/pull/942) update the blockNumber of Euler Fork upgrade on BSC Mainnet - - -## v1.1.10 - -FEATURE -* [\#885](https://github.com/bnb-chain/bsc/pull/885) add Euler Hardfork, including BEP-127 and BEP-131 - - -BUGFIX -* [\#856](https://github.com/bnb-chain/bsc/pull/856) fix logic issue: handlers.removePeer() is called twice -* [\#860](https://github.com/bnb-chain/bsc/pull/860) fix:defer bloomprocessor close -* [\#877](https://github.com/bnb-chain/bsc/pull/877) fix validator pipecommit issue -* [\#870](https://github.com/bnb-chain/bsc/pull/870) fix:Shift panic for zero length of heads - -## v1.1.9 - -IMPROVEMENT -* [\#792](https://github.com/bnb-chain/bsc/pull/792) add shared storage for prefetching state data -* [\#795](https://github.com/bnb-chain/bsc/pull/795) implement state verification pipeline in pipecommit -* [\#803](https://github.com/bnb-chain/bsc/pull/803) prefetch state data during the mining process -* [\#812](https://github.com/bnb-chain/bsc/pull/812) skip verification on account storage root to tolerate with fastnode when doing diffsync -* [\#818](https://github.com/bnb-chain/bsc/pull/818) add shared storage to the prefetcher of miner -* [\#820](https://github.com/bnb-chain/bsc/pull/820) disable diffsync when pipecommit is enabled -* [\#830](https://github.com/bnb-chain/bsc/pull/830) change the number of prefetch threads - -BUGFIX -* [\#797](https://github.com/bnb-chain/bsc/pull/797) fix race condition on preimage in pipecommit -* [\#808](https://github.com/bnb-chain/bsc/pull/808) fix code of difflayer not assign when new smart contract created -* [\#817](https://github.com/bnb-chain/bsc/pull/817) fix bugs of prune block tool -* [\#834](https://github.com/bnb-chain/bsc/pull/834) fix deadlock when failed to verify state root in pipecommit -* [\#835](https://github.com/bnb-chain/bsc/pull/835) fix deadlock on miner module when failed to commit trie -* [\#842](https://github.com/bnb-chain/bsc/pull/842) fix invalid nil check of statedb in diffsync - -## v1.1.8 -FEATURES -* [\#668](https://github.com/bnb-chain/bsc/pull/668) implement State Verification && Snapshot Commit pipeline -* [\#581](https://github.com/bnb-chain/bsc/pull/581) implement geth native trace -* [\#543](https://github.com/bnb-chain/bsc/pull/543) implement offline block prune tools - -IMPROVEMENT -* [\#704](https://github.com/bnb-chain/bsc/pull/704) prefetch state by applying the transactions within one block -* [\#713](https://github.com/bnb-chain/bsc/pull/713) add ARM binaries for release pipeline - -BUGFIX -* [\#667](https://github.com/bnb-chain/bsc/pull/667) trie: reject deletions when verifying range proofs #667 -* [\#643](https://github.com/bnb-chain/bsc/pull/643) add timeout for stopping p2p server to fix can not gracefully shutdown issue -* [\#740](https://github.com/bnb-chain/bsc/pull/740) update discord link which won't expire - -## v1.1.7 - -BUGFIX -* [\#628](https://github.com/bnb-chain/bsc/pull/628) fix state inconsistent when doing diffsync - -## v1.1.6 -BUGFIX -* [\#582](https://github.com/bnb-chain/bsc/pull/582) the DoS vulnerabilities fixed in go-ethereum v1.10.9 - -IMPROVEMENT -* [\#578](https://github.com/bnb-chain/bsc/pull/578) reduce memory allocation and upgrade snappy version - -FEATURES -* [\#570](https://github.com/bnb-chain/bsc/pull/570) reannounce local pending transactions - -## v1.1.5 -BUGFIX -* [\#509](https://github.com/bnb-chain/bsc/pull/509) fix graceful shutdown bug - -IMPROVEMENT -* [\#536](https://github.com/bnb-chain/bsc/pull/536) get diff accounts by replaying block when diff layer not found -* [\#527](https://github.com/bnb-chain/bsc/pull/527) improve diffsync protocol in many aspects -* [\#493](https://github.com/bnb-chain/bsc/pull/493) implement fast getDiffAccountsWithScope API - -## v1.1.4 -Improvement -* [\#472](https://github.com/bnb-chain/bsc/pull/472) add metrics for contract code bitmap cache -* [\#473](https://github.com/bnb-chain/bsc/pull/473) fix ci test flow - -BUGFIX -* [\#491](https://github.com/bnb-chain/bsc/pull/491) fix prefetcher related bugs - -FEATURES -* [\#480](https://github.com/bnb-chain/bsc/pull/480) implement bep 95 - - -## v1.1.3 -Improvement -* [\#456](https://github.com/bnb-chain/bsc/pull/456) git-flow support lint, unit test, and integration test -* [\#449](https://github.com/bnb-chain/bsc/pull/449) cache bitmap and change the cache type of GetCode -* [\#454](https://github.com/bnb-chain/bsc/pull/454) fix cache key do not have hash func -* [\#446](https://github.com/bnb-chain/bsc/pull/446) parallel bloom calculation -* [\#442](https://github.com/bnb-chain/bsc/pull/442) ignore empty tx in GetDiffAccountsWithScope -* [\#426](https://github.com/bnb-chain/bsc/pull/426) add block proccess backoff time when validator is not in turn and received in turn block -* [\#398](https://github.com/bnb-chain/bsc/pull/398) ci pipeline for release page - - -BUGFIX -* [\#446](https://github.com/bnb-chain/bsc/pull/446) fix concurrent write of subfetcher -* [\#444](https://github.com/bnb-chain/bsc/pull/444) fix blockhash not correct for the logs of system tx receipt -* [\#409](https://github.com/bnb-chain/bsc/pull/409) fix nil point in downloader -* [\#408](https://github.com/bnb-chain/bsc/pull/408) core/state/snapshot: fix typo - - -FEATURES -* [\#431](https://github.com/bnb-chain/bsc/pull/431) Export get diff accounts in block api -* [\#412](https://github.com/bnb-chain/bsc/pull/412) add extension in eth protocol handshake to disable tx broadcast -* [\#376](https://github.com/bnb-chain/bsc/pull/376) implement diff sync - -## v1.1.2 -Security -* [\#379](https://github.com/bnb-chain/bsc/pull/379) A pre-announced hotfix release to patch a vulnerability in the EVM (CVE-2021-39137). - - -## v1.1.1 -IMPROVEMENT -* [\#355](https://github.com/bnb-chain/bsc/pull/355) miner should propose block on a proper fork - -BUGFIX -* [\#350](https://github.com/bnb-chain/bsc/pull/350) flag: fix TriesInmemory specified but not work -* [\#358](https://github.com/bnb-chain/bsc/pull/358) miner: fix null pending block -* [\#360](https://github.com/bnb-chain/bsc/pull/360) pruner: fix state bloom sync permission in Windows -* [\#366](https://github.com/bnb-chain/bsc/pull/366) fix double close channel of subfetcher - - -## v1.1.1-beta -* [\#333](https://github.com/bnb-chain/bsc/pull/333) improve block fetcher efficiency -* [\#326](https://github.com/bnb-chain/bsc/pull/326) eth/tracers: improve tracing performance -* [\#257](https://github.com/bnb-chain/bsc/pull/257) performance improvement in many aspects - - -## v1.1.0 -* [\#282](https://github.com/bnb-chain/bsc/pull/282) update discord link -* [\#280](https://github.com/bnb-chain/bsc/pull/280) update discord link -* [\#227](https://github.com/bnb-chain/bsc/pull/227) use more aggressive write cache policy - -## v1.1.0-beta -* [\#152](https://github.com/bnb-chain/bsc/pull/152) upgrade to go-ethereum 1.10.3 - -## v1.0.7-hf.2 -BUGFIX -* [\#194](https://github.com/bnb-chain/bsc/pull/194) bump btcd to v0.20.1-beta - -## v1.0.7-hf.1 -BUGFIX -* [\#190](https://github.com/bnb-chain/bsc/pull/190) fix disk increase dramaticly -* [\#191](https://github.com/bnb-chain/bsc/pull/191) fix the reorg routine of tx pool stuck issue - -## v1.0.7 -* [\#120](https://github.com/bnb-chain/bsc/pull/120) add health check endpoint -* [\#116](https://github.com/bnb-chain/bsc/pull/116) validator only write database state when enough distance -* [\#115](https://github.com/bnb-chain/bsc/pull/115) add batch query methods -* [\#112](https://github.com/bnb-chain/bsc/pull/112) apply max commit tx time for miner worker to avoid empty block -* [\#101](https://github.com/bnb-chain/bsc/pull/101) apply block number limit for the `eth_getLogs` api -* [\#99](https://github.com/bnb-chain/bsc/pull/99) enable directbroadcast flag to decrease the block propagation time -* [\#90](https://github.com/bnb-chain/bsc/pull/90) add tini in docker image -* [\#84](https://github.com/bnb-chain/bsc/pull/84) add jq in docker image - - -## v1.0.6 -* [\#68](https://github.com/bnb-chain/bsc/pull/68) apply mirror sync upgrade on mainnet - -## v1.0.5 - -SECURITY -* [\#63](https://github.com/bnb-chain/bsc/pull/63) security patches from go-ethereum -* [\#54](https://github.com/bnb-chain/bsc/pull/54) les: fix GetProofsV2 that could potentially cause a panic. - -FEATURES -* [\#56](https://github.com/bnb-chain/bsc/pull/56) apply mirror sync upgrade -* [\#53](https://github.com/bnb-chain/bsc/pull/53) support fork id in header; elegant upgrade - -IMPROVEMENT -* [\#61](https://github.com/bnb-chain/bsc/pull/61)Add `x-forward-for` log message when handle message failed -* [\#60](https://github.com/bnb-chain/bsc/pull/61) add rpc method request gauge - -BUGFIX -* [\#59](https://github.com/bnb-chain/bsc/pull/59) fix potential deadlock of pub/sub module - - - -## v1.0.4 - -IMPROVEMENT -* [\#35](https://github.com/bnb-chain/bsc/pull/35) use fixed gas price when network is idle -* [\#38](https://github.com/bnb-chain/bsc/pull/38) disable noisy log from consensus engine -* [\#47](https://github.com/bnb-chain/bsc/pull/47) upgrade to golang1.15.5 -* [\#49](https://github.com/bnb-chain/bsc/pull/49) Create pull request template for all developer to follow - - -## v1.0.3 - -IMPROVEMENT -* [\#36](https://github.com/bnb-chain/bsc/pull/36) add max gas allwance calculation - -## v1.0.2 - -IMPROVEMENT -* [\#29](https://github.com/bnb-chain/bsc/pull/29) eth/tracers: revert reason in call_tracer + error for failed internal… - -## v1.0.1-beta - -IMPROVEMENT -* [\#22](https://github.com/bnb-chain/bsc/pull/22) resolve best practice advice - -FEATURES -* [\#23](https://github.com/bnb-chain/bsc/pull/23) enforce backoff time for out-turn validator - -BUGFIX -* [\#25](https://github.com/bnb-chain/bsc/pull/25) minor fix for ramanujan upgrade - -UPGRADE -* [\#26](https://github.com/bnb-chain/bsc/pull/26) update chapel network config for ramanujan fork - -## v1.0.0-beta.0 - -FEATURES -* [\#5](https://github.com/bnb-chain/bsc/pull/5) enable bep2e tokens for faucet -* [\#14](https://github.com/bnb-chain/bsc/pull/14) add cross chain contract to system contract -* [\#15](https://github.com/bnb-chain/bsc/pull/15) Allow liveness slash fail - -IMPROVEMENT -* [\#11](https://github.com/bnb-chain/bsc/pull/11) remove redundant gaslimit check - -BUGFIX -* [\#4](https://github.com/bnb-chain/bsc/pull/4) fix validator failed to sync a block produced by itself -* [\#6](https://github.com/bnb-chain/bsc/pull/6) modify params for Parlia consensus with 21 validators -* [\#10](https://github.com/bnb-chain/bsc/pull/10) add gas limit check in parlia implement -* [\#13](https://github.com/bnb-chain/bsc/pull/13) fix debug_traceTransaction crashed issue diff --git a/Makefile b/Makefile index 4b46068866..41076c8508 100644 --- a/Makefile +++ b/Makefile @@ -25,16 +25,6 @@ all: test: all $(GORUN) build/ci.go test -timeout 1h -truffle-test: - docker build . -f ./docker/Dockerfile --target bsc-genesis -t bsc-genesis - docker build . -f ./docker/Dockerfile --target bsc -t bsc - docker build . -f ./docker/Dockerfile.truffle -t truffle-test - docker-compose -f ./tests/truffle/docker-compose.yml up genesis - docker-compose -f ./tests/truffle/docker-compose.yml up -d bsc-rpc bsc-validator1 - sleep 30 - docker-compose -f ./tests/truffle/docker-compose.yml up --exit-code-from truffle-test truffle-test - docker-compose -f ./tests/truffle/docker-compose.yml down - #? lint: Run certain pre-selected linters lint: ## Run linters. $(GORUN) build/ci.go lint diff --git a/cmd/extradump/extradump_test.go b/cmd/extradump/extradump_test.go deleted file mode 100644 index f203d322e6..0000000000 --- a/cmd/extradump/extradump_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package main - -import ( - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/stretchr/testify/assert" -) - -func TestExtraParse(t *testing.T) { - // case 1, |---Extra Vanity---|---Empty---|---Empty---|---Extra Seal---| - { - extraData := "0xd983010209846765746889676f312e31392e3131856c696e75780000a6bf97c1e99f701bb14cb7dfb68b90bd3e6d1ca656964630de71beffc7f33f7f08ec99d336ec51ad9fad0ac84ae77ca2e8ad9512acc56e0d7c93f3c2ce7de1b69149a5a400" - _, err := parseExtra(extraData) - assert.NoError(t, err) - } - - // case 2, |---Extra Vanity---|---Validators Number and Validators Bytes---|---Empty---|---Extra Seal---| - { - extraData := "0xd983010209846765746889676f312e31392e3131856c696e75780000a6bf97c1152465176c461afb316ebc773c61faee85a6515daa8a923564c6ffd37fb2fe9f118ef88092e8762c7addb526ab7eb1e772baef85181f892c731be0c1891a50e6b06262c816295e26495cef6f69dfa69911d9d8e4f3bbadb89b977cf58294f7239d515e15b24cfeb82494056cf691eaf729b165f32c9757c429dba5051155903067e56ebe3698678e912d4c407bbe49438ed859fe965b140dcf1aab71a993c1f7f6929d1fe2a17b4e14614ef9fc5bdc713d6631d675403fbeefac55611bf612700b1b65f4744861b80b0f7d6ab03f349bbafec1551819b8be1efea2fc46ca749aa184248a459464eec1a21e7fc7b71a053d9644e9bb8da4853b8f872cd7c1d6b324bf1922829830646ceadfb658d3de009a61dd481a114a2e761c554b641742c973867899d300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069c77a677c40c7fbea129d4b171a39b7a8ddabfab2317f59d86abfaf690850223d90e9e7593d91a29331dfc2f84d5adecc75fc39ecab4632c1b4400a3dd1e1298835bcca70f657164e5b75689b64b7fd1fa275f334f28e1896a26afa1295da81418593bd12814463d9f6e45c36a0e47eb4cd3e5b6af29c41e2a3a5636430155a466e216585af3ba772b61c6014342d914470ec7ac2975be345796c2b81db0422a5fd08e40db1fc2368d2245e4b18b1d0b85c921aaaafd2e341760e29fc613edd39f71254614e2055c3287a517ae2f5b9e386cd1b50a4550696d957cb4900f03ab84f83ff2df44193496793b847f64e9d6db1b3953682bb95edd096eb1e69bbd357c200992ca78050d0cbe180cfaa018e8b6c8fd93d6f4cea42bbb345dbc6f0dfdb5bec73a8a257074e82b881cfa06ef3eb4efeca060c2531359abd0eab8af1e3edfa2025fca464ac9c3fd123f6c24a0d78869485a6f79b60359f141df90a0c745125b131caaffd12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b218c5d6af1f979ac42bc68d98a5a0d796c6ab01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4dd66d7c2c7e57f628210187192fb89d4b99dd4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be807dddb074639cd9fa61b47676c064fc50d62cb1f2c71577def3144fabeb75a8a1c8cb5b51d1d1b4a05eec67988b8685008baa17459ec425dbaebc852f496dc92196cdcc8e6d00c17eb431350c6c50d8b8f05176b90b11b3a3d4feb825ae9702711566df5dbf38e82add4dd1b573b95d2466fa6501ccb81e9d26a352b96150ccbf7b697fd0a419d1d6bf74282782b0b3eb1413c901d6ecf02e8e28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2d3a739effcd3a99387d015e260eefac72ebea1956c470ddff48cb49300200b5f83497f3a3ccb3aeb83c5edd9818569038e61d197184f4aa6939ea5e9911e3e98ac6d21e9ae3261a475a27bb1028f140bc2a7c843318afd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea0a6e3c511bbd10f4519ece37dc24887e11b55db2d4c6283c44a1c7bd503aaba7666e9f0c830e0ff016c1c750a5e48757a713d0836b1cabfd5c281b1de3b77d1c192183ee226379db83cffc681495730c11fdde79ba4c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef0274e31810c9df02f98fafde0f841f4e66a1cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e99f701bb14cb7dfb68b90bd3e6d1ca656964630de71beffc7f33f7f08ec99d336ec51ad9fad0ac84ae77ca2e8ad9512acc56e0d7c93f3c2ce7de1b69149a5a400" - extra, err := parseExtra(extraData) - assert.NoError(t, err) - { - var have = extra.ValidatorSize - var want = uint8(21) - if have != want { - t.Fatalf("extra.ValidatorSize mismatch, have %d, want %d", have, want) - } - } - { - var have = common.Bytes2Hex(extra.Validators[14].Address[:]) - var want = "cc8e6d00c17eb431350c6c50d8b8f05176b90b11" - if have != want { - t.Fatalf("extra.Validators[14].Address mismatch, have %s, want %s", have, want) - } - } - { - var have = common.Bytes2Hex(extra.Validators[18].BLSPublicKey[:]) - var want = "b2d4c6283c44a1c7bd503aaba7666e9f0c830e0ff016c1c750a5e48757a713d0836b1cabfd5c281b1de3b77d1c192183" - if have != want { - t.Fatalf("extra.Validators[18].BLSPublicKey mismatch, have %s, want %s", have, want) - } - } - } - - // case 3, |---Extra Vanity---|---Empty---|---Vote Attestation---|---Extra Seal---| - { - extraData := "0xd883010205846765746888676f312e32302e35856c696e75780000002995c52af8b5830563efb86089cf168dcf4c5d3cb057926628ad1bf0f03ea67eef1458485578a4f8489afa8a853ecc7af45e2d145c21b70641c4b29f0febd2dd2c61fa1ba174be3fd47f1f5fa2ab9b5c318563d8b70ca58d0d51e79ee32b2fb721649e2cb9d36538361fba11f84c8401d14bb7a0fa67ddb3ba654d6006bf788710032247aa4d1be0707273e696b422b3ff72e9798401d14bbaa01225f505f5a0e1aefadcd2913b7aac9009fe4fb3d1bf57399e0b9dce5947f94280fe6d3647276c4127f437af59eb7c7985b2ae1ebe432619860695cb6106b80cc66c735bc1709afd11f233a2c97409d38ebaf7178aa53e895aea2fe0a229f71ec601" - extra, err := parseExtra(extraData) - assert.NoError(t, err) - { - var have = common.Bytes2Hex(extra.Data.TargetHash[:]) - var want = "1225f505f5a0e1aefadcd2913b7aac9009fe4fb3d1bf57399e0b9dce5947f942" - if have != want { - t.Fatalf("extra.Data.TargetHash mismatch, have %s, want %s", have, want) - } - } - { - var have = extra.Data.TargetNumber - var want = uint64(30493626) - if have != want { - t.Fatalf("extra.Data.TargetNumber mismatch, have %d, want %d", have, want) - } - } - } - - // case 4, |---Extra Vanity---|---Validators Number and Validators Bytes---|---Vote Attestation---|---Extra Seal---| - { - extraData := "0xd883010209846765746888676f312e31392e38856c696e7578000000dc55905c071284214b9b9c85549ab3d2b972df0deef66ac2c98e82934ca974fdcd97f3309de967d3c9c43fa711a8d673af5d75465844bf8969c8d1948d903748ac7b8b1720fa64e50c35552c16704d214347f29fa77f77da6d75d7c752b742ad4855bae330426b823e742da31f816cc83bc16d69a9134be0cfb4a1d17ec34f1b5b32d5c20440b8536b1e88f0f247788386d0ed6c748e03a53160b4b30ed3748cc5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000980a75ecd1309ea12fa2ed87a8744fbfc9b863d589037a9ace3b590165ea1c0c5ac72bf600b7c88c1e435f41932c1132aae1bfa0bb68e46b96ccb12c3415e4d82af717d8a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0b973c2d38487e58fd6e145491b110080fb14ac915a0411fc78f19e09a399ddee0d20c63a75d8f930f1694544ad2dc01bb71b214cb885500844365e95cd9942c7276e7fd8a2750ec6dded3dcdc2f351782310b0eadc077db59abca0f0cd26776e2e7acb9f3bce40b1fa5221fd1561226c6263cc5ff474cf03cceff28abc65c9cbae594f725c80e12d96c9b86c3400e529bfe184056e257c07940bb664636f689e8d2027c834681f8f878b73445261034e946bb2d901b4b878f8b27bb8608c11016739b3f8a19e54ab8c7abacd936cfeba200f3645a98b65adb0dd3692b69ce0b3ae10e7176b9a4b0d83f04065b1042b4bcb646a34b75c550f92fc34b8b2b1db0fa0d3172db23ba92727c80bcd306320d0ff411bf858525fde13bc8e0370f84c8401e9c2e6a0820dc11d63176a0eb1b828bc5376867b275579112b7013358da40317e7bab6e98401e9c2e7a00edc71ce80105a3220a87bea2792fa340d66c59002f02b0a09349ed1ed284070808b972fac2b9077a4dcb6fc37093799a652858016c99142b227500c844fa97ec22e3f9d3b1e982f14bcd999a7453e89ce5ef5c55f1c7f8f74ba904186cd67828200" - extra, err := parseExtra(extraData) - assert.NoError(t, err) - { - var have = common.Bytes2Hex(extra.Validators[0].Address[:]) - var want = "1284214b9b9c85549ab3d2b972df0deef66ac2c9" - if have != want { - t.Fatalf("extra.Validators[0].Address mismatch, have %s, want %s", have, want) - } - } - { - var have = common.Bytes2Hex(extra.Validators[0].BLSPublicKey[:]) - var want = "8e82934ca974fdcd97f3309de967d3c9c43fa711a8d673af5d75465844bf8969c8d1948d903748ac7b8b1720fa64e50c" - if have != want { - t.Fatalf("extra.Validators[0].BLSPublicKey mismatch, have %s, want %s", have, want) - } - } - { - var have = extra.Validators[0].VoteIncluded - var want = true - if have != want { - t.Fatalf("extra.Validators[0].VoteIncluded mismatch, have %t, want %t", have, want) - } - } - { - var have = common.Bytes2Hex(extra.Data.TargetHash[:]) - var want = "0edc71ce80105a3220a87bea2792fa340d66c59002f02b0a09349ed1ed284070" - if have != want { - t.Fatalf("extra.Data.TargetHash mismatch, have %s, want %s", have, want) - } - } - { - var have = extra.Data.TargetNumber - var want = uint64(32096999) - if have != want { - t.Fatalf("extra.Data.TargetNumber mismatch, have %d, want %d", have, want) - } - } - } -} diff --git a/cmd/extradump/main.go b/cmd/extradump/main.go index bb06735147..49fbc73b8f 100644 --- a/cmd/extradump/main.go +++ b/cmd/extradump/main.go @@ -24,7 +24,7 @@ const ( BLSPublicKeyLength = 48 // follow order in extra field - // |---Extra Vanity---|---Validators Number and Validators Bytes (or Empty)---|---Vote Attestation (or Empty)---|---Extra Seal---| + // |---Extra Vanity---|---Validators Number and Validators Bytes (or Empty)---|---Turn Length (or Empty)---|---Vote Attestation (or Empty)---|---Extra Seal---| extraVanityLength = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity validatorNumberSize = 1 // Fixed number of extra prefix bytes reserved for validator number after Luban validatorBytesLength = common.AddressLength + types.BLSPublicKeyLength @@ -35,6 +35,7 @@ type Extra struct { ExtraVanity string ValidatorSize uint8 Validators validatorsAscending + TurnLength *uint8 *types.VoteAttestation ExtraSeal []byte } @@ -113,6 +114,15 @@ func parseExtra(hexData string) (*Extra, error) { sort.Sort(extra.Validators) data = data[validatorBytesTotalLength-validatorNumberSize:] dataLength = len(data) + + // parse TurnLength + if dataLength > 0 { + if data[0] != '\xf8' { + extra.TurnLength = &data[0] + data = data[1:] + dataLength = len(data) + } + } } // parse Vote Attestation @@ -148,6 +158,10 @@ func prettyExtra(extra Extra) { } } + if extra.TurnLength != nil { + fmt.Printf("TurnLength : %d\n", *extra.TurnLength) + } + if extra.VoteAttestation != nil { fmt.Printf("Attestation :\n") fmt.Printf("\tVoteAddressSet : %b, %d\n", extra.VoteAddressSet, bitset.From([]uint64{uint64(extra.VoteAddressSet)}).Count()) diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index 6a64e174f6..25a0cc084a 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -49,6 +49,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/gorilla/websocket" + "golang.org/x/time/rate" ) var ( @@ -216,6 +217,8 @@ type faucet struct { bep2eInfos map[string]bep2eInfo bep2eAbi abi.ABI + + limiter *IPRateLimiter } // wsConn wraps a websocket connection with a write mutex as the underlying @@ -235,6 +238,12 @@ func newFaucet(genesis *core.Genesis, url string, ks *keystore.KeyStore, index [ return nil, err } + // Allow 1 request per minute with burst of 5, and cache up to 1000 IPs + limiter, err := NewIPRateLimiter(rate.Limit(1.0), 5, 1000) + if err != nil { + return nil, err + } + return &faucet{ config: genesis.Config, client: client, @@ -245,6 +254,7 @@ func newFaucet(genesis *core.Genesis, url string, ks *keystore.KeyStore, index [ update: make(chan struct{}, 1), bep2eInfos: bep2eInfos, bep2eAbi: bep2eAbi, + limiter: limiter, }, nil } @@ -272,6 +282,20 @@ func (f *faucet) webHandler(w http.ResponseWriter, r *http.Request) { // apiHandler handles requests for Ether grants and transaction statuses. func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { + ip := r.RemoteAddr + if len(r.Header.Get("X-Forwarded-For")) > 0 { + ips := strings.Split(r.Header.Get("X-Forwarded-For"), ",") + if len(ips) > 0 { + ip = strings.TrimSpace(ips[len(ips)-1]) + } + } + + if !f.limiter.GetLimiter(ip).Allow() { + log.Warn("Too many requests from client: ", "client", ip) + http.Error(w, "Too many requests", http.StatusTooManyRequests) + return + } + upgrader := websocket.Upgrader{CheckOrigin: func(r *http.Request) bool { return true }} conn, err := upgrader.Upgrade(w, r, nil) if err != nil { @@ -625,24 +649,27 @@ func (f *faucet) loop() { balance := new(big.Int).Div(f.balance, ether) for _, conn := range f.conns { - if err := send(conn, map[string]interface{}{ - "funds": balance, - "funded": f.nonce, - "requests": f.reqs, - }, time.Second); err != nil { - log.Warn("Failed to send stats to client", "err", err) - conn.conn.Close() - continue - } - if err := send(conn, head, time.Second); err != nil { - log.Warn("Failed to send header to client", "err", err) - conn.conn.Close() - } + go func(conn *wsConn) { + if err := send(conn, map[string]interface{}{ + "funds": balance, + "funded": f.nonce, + "requests": f.reqs, + }, time.Second); err != nil { + log.Warn("Failed to send stats to client", "err", err) + conn.conn.Close() + return // Exit the goroutine if the first send fails + } + + if err := send(conn, head, time.Second); err != nil { + log.Warn("Failed to send header to client", "err", err) + conn.conn.Close() + } + }(conn) } f.lock.RUnlock() } }() - // Wait for various events and assing to the appropriate background threads + // Wait for various events and assign to the appropriate background threads for { select { case head := <-heads: @@ -656,10 +683,12 @@ func (f *faucet) loop() { // Pending requests updated, stream to clients f.lock.RLock() for _, conn := range f.conns { - if err := send(conn, map[string]interface{}{"requests": f.reqs}, time.Second); err != nil { - log.Warn("Failed to send requests to client", "err", err) - conn.conn.Close() - } + go func(conn *wsConn) { + if err := send(conn, map[string]interface{}{"requests": f.reqs}, time.Second); err != nil { + log.Warn("Failed to send requests to client", "err", err) + conn.conn.Close() + } + }(conn) } f.lock.RUnlock() } diff --git a/cmd/faucet/rate_limiter.go b/cmd/faucet/rate_limiter.go new file mode 100644 index 0000000000..e490c55470 --- /dev/null +++ b/cmd/faucet/rate_limiter.go @@ -0,0 +1,44 @@ +package main + +import ( + lru "github.com/hashicorp/golang-lru" + "golang.org/x/time/rate" +) + +type IPRateLimiter struct { + ips *lru.Cache // LRU cache to store IP addresses and their associated rate limiters + r rate.Limit // the rate limit, e.g., 5 requests per second + b int // the burst size, e.g., allowing a burst of 10 requests at once. The rate limiter gets into action + // only after this number exceeds +} + +func NewIPRateLimiter(r rate.Limit, b int, size int) (*IPRateLimiter, error) { + cache, err := lru.New(size) + if err != nil { + return nil, err + } + + i := &IPRateLimiter{ + ips: cache, + r: r, + b: b, + } + + return i, nil +} + +func (i *IPRateLimiter) addIP(ip string) *rate.Limiter { + limiter := rate.NewLimiter(i.r, i.b) + + i.ips.Add(ip, limiter) + + return limiter +} + +func (i *IPRateLimiter) GetLimiter(ip string) *rate.Limiter { + if limiter, exists := i.ips.Get(ip); exists { + return limiter.(*rate.Limiter) + } + + return i.addIP(ip) +} diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 6ffc150de1..870527434d 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -62,10 +62,10 @@ var ( ArgsUsage: "", Flags: flags.Merge([]cli.Flag{ utils.CachePreimagesFlag, - utils.OverrideCancun, - utils.OverrideHaber, + utils.OverridePassedForkTime, utils.OverrideBohr, utils.OverrideVerkle, + utils.MultiDataBaseFlag, }, utils.DatabaseFlags), Description: ` The init command initializes a new genesis block and definition for the network. @@ -254,13 +254,9 @@ func initGenesis(ctx *cli.Context) error { defer stack.Close() var overrides core.ChainOverrides - if ctx.IsSet(utils.OverrideCancun.Name) { - v := ctx.Uint64(utils.OverrideCancun.Name) - overrides.OverrideCancun = &v - } - if ctx.IsSet(utils.OverrideHaber.Name) { - v := ctx.Uint64(utils.OverrideHaber.Name) - overrides.OverrideHaber = &v + if ctx.IsSet(utils.OverridePassedForkTime.Name) { + v := ctx.Uint64(utils.OverridePassedForkTime.Name) + overrides.OverridePassedForkTime = &v } if ctx.IsSet(utils.OverrideBohr.Name) { v := ctx.Uint64(utils.OverrideBohr.Name) @@ -769,7 +765,7 @@ func parseDumpConfig(ctx *cli.Context, stack *node.Node) (*state.DumpConfig, eth arg := ctx.Args().First() if hashish(arg) { hash := common.HexToHash(arg) - if number := rawdb.ReadHeaderNumber(db.BlockStore(), hash); number != nil { + if number := rawdb.ReadHeaderNumber(db, hash); number != nil { header = rawdb.ReadHeader(db, hash, *number) } else { return nil, nil, common.Hash{}, fmt.Errorf("block %x not found", hash) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index e535dc8155..5c829a2f76 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -185,13 +185,9 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { params.RialtoGenesisHash = common.HexToHash(v) } - if ctx.IsSet(utils.OverrideCancun.Name) { - v := ctx.Uint64(utils.OverrideCancun.Name) - cfg.Eth.OverrideCancun = &v - } - if ctx.IsSet(utils.OverrideHaber.Name) { - v := ctx.Uint64(utils.OverrideHaber.Name) - cfg.Eth.OverrideHaber = &v + if ctx.IsSet(utils.OverridePassedForkTime.Name) { + v := ctx.Uint64(utils.OverridePassedForkTime.Name) + cfg.Eth.OverridePassedForkTime = &v } if ctx.IsSet(utils.OverrideBohr.Name) { v := ctx.Uint64(utils.OverrideBohr.Name) @@ -214,6 +210,9 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { if ctx.IsSet(utils.OverrideBreatheBlockInterval.Name) { params.BreatheBlockInterval = ctx.Uint64(utils.OverrideBreatheBlockInterval.Name) } + if ctx.IsSet(utils.OverrideFixedTurnLength.Name) { + params.FixedTurnLength = ctx.Uint64(utils.OverrideFixedTurnLength.Name) + } backend, eth := utils.RegisterEthService(stack, &cfg.Eth) diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index 0b2017eac4..282f035bb4 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -397,8 +397,8 @@ func inspectTrie(ctx *cli.Context) error { var headerBlockHash common.Hash if ctx.NArg() >= 1 { if ctx.Args().Get(0) == "latest" { - headerHash := rawdb.ReadHeadHeaderHash(db.BlockStore()) - blockNumber = *(rawdb.ReadHeaderNumber(db.BlockStore(), headerHash)) + headerHash := rawdb.ReadHeadHeaderHash(db) + blockNumber = *(rawdb.ReadHeaderNumber(db, headerHash)) } else if ctx.Args().Get(0) == "snapshot" { trieRootHash = rawdb.ReadSnapshotRoot(db) blockNumber = math.MaxUint64 @@ -1212,7 +1212,7 @@ func showMetaData(ctx *cli.Context) error { if err != nil { fmt.Fprintf(os.Stderr, "Error accessing ancients: %v", err) } - data := rawdb.ReadChainMetadataFromMultiDatabase(db) + data := rawdb.ReadChainMetadata(db) data = append(data, []string{"frozen", fmt.Sprintf("%d items", ancients)}) data = append(data, []string{"snapshotGenerator", snapshot.ParseGeneratorStatus(rawdb.ReadSnapshotGenerator(db))}) if b := rawdb.ReadHeadBlock(db); b != nil { @@ -1255,7 +1255,7 @@ func hbss2pbss(ctx *cli.Context) error { defer stack.Close() db := utils.MakeChainDatabase(ctx, stack, false, false) - db.Sync() + db.BlockStore().Sync() stateDiskDb := db.StateStore() defer db.Close() @@ -1273,8 +1273,8 @@ func hbss2pbss(ctx *cli.Context) error { log.Info("hbss2pbss triedb", "scheme", triedb.Scheme()) defer triedb.Close() - headerHash := rawdb.ReadHeadHeaderHash(db.BlockStore()) - blockNumber := rawdb.ReadHeaderNumber(db.BlockStore(), headerHash) + headerHash := rawdb.ReadHeadHeaderHash(db) + blockNumber := rawdb.ReadHeaderNumber(db, headerHash) if blockNumber == nil { log.Error("read header number failed.") return fmt.Errorf("read header number failed") diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 260244cf7f..7e91e5ab0b 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -73,14 +73,14 @@ var ( utils.USBFlag, utils.SmartCardDaemonPathFlag, utils.RialtoHash, - utils.OverrideCancun, - utils.OverrideHaber, + utils.OverridePassedForkTime, utils.OverrideBohr, utils.OverrideVerkle, utils.OverrideFullImmutabilityThreshold, utils.OverrideMinBlocksForBlobRequests, utils.OverrideDefaultExtraReserveForBlobRequests, utils.OverrideBreatheBlockInterval, + utils.OverrideFixedTurnLength, utils.EnablePersonal, utils.TxPoolLocalsFlag, utils.TxPoolNoLocalsFlag, @@ -128,6 +128,7 @@ var ( utils.CacheSnapshotFlag, // utils.CacheNoPrefetchFlag, utils.CachePreimagesFlag, + utils.MultiDataBaseFlag, utils.PersistDiffFlag, utils.DiffBlockFlag, utils.PruneAncientDataFlag, @@ -338,9 +339,6 @@ func prepare(ctx *cli.Context) { 5. Networking is disabled; there is no listen-address, the maximum number of peers is set to 0, and discovery is disabled. `) - - case !ctx.IsSet(utils.NetworkIdFlag.Name): - log.Info("Starting Geth on BSC mainnet...") } // If we're a full node on mainnet without --cache specified, bump default cache allowance if !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) { @@ -375,8 +373,6 @@ func geth(ctx *cli.Context) error { // it unlocks any requested accounts, and starts the RPC/IPC interfaces and the // miner. func startNode(ctx *cli.Context, stack *node.Node, backend ethapi.Backend, isConsole bool) { - debug.Memsize.Add("node", stack) - // Start up the node itself utils.StartNode(ctx, stack, isConsole) diff --git a/cmd/jsutils/README.md b/cmd/jsutils/README.md deleted file mode 100644 index 6fd4dcdf34..0000000000 --- a/cmd/jsutils/README.md +++ /dev/null @@ -1,27 +0,0 @@ -## Requirement - -- nodejs >= v16.20.2 -- npm >= v8.19.4 - -## Prepare -Recommend use [nvm](https://github.com/nvm-sh/nvm) to manage node version. - -Install node.js dependency: -```shell script - npm install -``` -## Run -### 1.Get Validator's Information: Version, MinGasPrice -mainnet validators version -```bash - npm run startMainnet -``` -testnet validators version -```bash - npm run startTestnet -``` - -### 2.Get Transaction Count -```bash -node gettxcount.js --rpc ${url} --startNum ${start} --endNum ${end} --miner ${miner} (optional) -``` \ No newline at end of file diff --git a/cmd/jsutils/check_blobtx.js b/cmd/jsutils/check_blobtx.js deleted file mode 100644 index 2e8fe1ed1e..0000000000 --- a/cmd/jsutils/check_blobtx.js +++ /dev/null @@ -1,51 +0,0 @@ -import { ethers } from "ethers"; -import program from "commander"; - -// depends on ethjs v6.11.0+ for 4844, https://github.com/ethers-io/ethers.js/releases/tag/v6.11.0 -// BSC testnet enabled 4844 on block: 39539137 -// Usage: -// nvm use 20 -// node check_blobtx.js --rpc https://data-seed-prebsc-1-s1.binance.org:8545 --startNum 39539137 -// node check_blobtx.js --rpc https://data-seed-prebsc-1-s1.binance.org:8545 --startNum 39539137 --endNum 40345994 -program.option("--rpc ", "Rpc Server URL"); -program.option("--startNum ", "start block", 0); -program.option("--endNum ", "end block", 0); -program.parse(process.argv); - -const provider = new ethers.JsonRpcProvider(program.rpc); -const main = async () => { - var startBlock = parseInt(program.startNum) - var endBlock = parseInt(program.endNum) - if (isNaN(endBlock) || isNaN(startBlock) || startBlock == 0) { - console.error("invalid input, --startNum", program.startNum, "--end", program.endNum) - return - } - // if --endNum is not specified, set it to the latest block number. - if (endBlock == 0) { - endBlock = await provider.getBlockNumber(); - } - if (startBlock > endBlock) { - console.error("invalid input, startBlock:",startBlock, " endBlock:", endBlock); - return - } - - for (let i = startBlock; i <= endBlock; i++) { - let blockData = await provider.getBlock(i); - console.log("startBlock:",startBlock, "endBlock:", endBlock, "curBlock", i, "blobGasUsed", blockData.blobGasUsed); - if (blockData.blobGasUsed == 0) { - continue - } - for (let txIndex = 0; txIndex<= blockData.transactions.length - 1; txIndex++) { - let txHash = blockData.transactions[txIndex] - let txData = await provider.getTransaction(txHash); - if (txData.type == 3) { - console.log("BlobTx in block:",i, " txIndex:", txIndex, " txHash:", txHash); - } - } - } -}; -main().then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); \ No newline at end of file diff --git a/cmd/jsutils/faucet_request.js b/cmd/jsutils/faucet_request.js deleted file mode 100644 index bd4179747b..0000000000 --- a/cmd/jsutils/faucet_request.js +++ /dev/null @@ -1,49 +0,0 @@ -import { ethers } from "ethers"; -import program from "commander"; - -// Usage: -// node faucet_request.js --rpc localhost:8545 --startNum 39539137 -// node faucet_request.js --rpc localhost:8545 --startNum 39539137 --endNum 40345994 - -// node faucet_request.js --rpc https://data-seed-prebsc-1-s1.bnbchain.org:8545 --startNum 39539137 --endNum 40345994 -program.option("--rpc ", "Rpc Server URL"); -program.option("--startNum ", "start block", 0); -program.option("--endNum ", "end block", 0); -program.parse(process.argv); - -const provider = new ethers.JsonRpcProvider(program.rpc); -const main = async () => { - var startBlock = parseInt(program.startNum) - var endBlock = parseInt(program.endNum) - if (isNaN(endBlock) || isNaN(startBlock) || startBlock == 0) { - console.error("invalid input, --startNum", program.startNum, "--end", program.endNum) - return - } - // if --endNum is not specified, set it to the latest block number. - if (endBlock == 0) { - endBlock = await provider.getBlockNumber(); - } - if (startBlock > endBlock) { - console.error("invalid input, startBlock:",startBlock, " endBlock:", endBlock); - return - } - - let startBalance = await provider.getBalance("0xaa25Aa7a19f9c426E07dee59b12f944f4d9f1DD3", startBlock) - let endBalance = await provider.getBalance("0xaa25Aa7a19f9c426E07dee59b12f944f4d9f1DD3", endBlock) - const faucetAmount = BigInt(0.3 * 10**18); // Convert 0.3 ether to wei as a BigInt - const numFaucetRequest = (startBalance - endBalance) / faucetAmount; - - // Convert BigInt to ether - const startBalanceEth = Number(startBalance) / 10**18; - const endBalanceEth = Number(endBalance) / 10**18; - - console.log(`Start Balance: ${startBalanceEth} ETH`); - console.log(`End Balance: ${endBalanceEth} ETH`); - - console.log("successful faucet request: ",numFaucetRequest); -}; -main().then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/cmd/jsutils/gettxcount.js b/cmd/jsutils/gettxcount.js deleted file mode 100644 index 8bc7f2bdd9..0000000000 --- a/cmd/jsutils/gettxcount.js +++ /dev/null @@ -1,41 +0,0 @@ -import { ethers } from "ethers"; -import program from "commander"; - -program.option("--rpc ", "Rpc"); -program.option("--startNum ", "start num") -program.option("--endNum ", "end num") -// --miner: -// specified: find the max txCounter from the specified validator -// not specified: find the max txCounter from all validators -program.option("--miner ", "miner", "") -program.parse(process.argv); - -const provider = new ethers.JsonRpcProvider(program.rpc) - -const main = async () => { - let txCount = 0; - let num = 0; - console.log("Find the max txs count between", program.startNum, "and", program.endNum); - for (let i = program.startNum; i < program.endNum; i++) { - if (program.miner !== "") { - let blockData = await provider.getBlock(Number(i)) - if (program.miner !== blockData.miner) { - continue - } - } - let x = await provider.send("eth_getBlockTransactionCountByNumber", [ - ethers.toQuantity(i)]); - let a = ethers.toNumber(x) - if (a > txCount) { - num = i; - txCount = a; - } - } - console.log("BlockNum = ", num, "TxCount =", txCount); -}; - -main().then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); \ No newline at end of file diff --git a/cmd/jsutils/getvalidatorversion.js b/cmd/jsutils/getvalidatorversion.js deleted file mode 100644 index 495b913f43..0000000000 --- a/cmd/jsutils/getvalidatorversion.js +++ /dev/null @@ -1,38 +0,0 @@ -import { ethers } from "ethers"; -import program from "commander"; - -program.option("--Rpc ", "Rpc"); -program.option("--Num ", "validator num", 21) -program.parse(process.argv); - -const provider = new ethers.JsonRpcProvider(program.Rpc); - -const main = async () => { - const blockNum = await provider.getBlockNumber(); - console.log(blockNum); - for (let i = 0; i < program.Num; i++) { - let blockData = await provider.getBlock(blockNum - i); - // 1.get Geth client version - let major = ethers.toNumber(ethers.dataSlice(blockData.extraData, 2, 3)) - let minor = ethers.toNumber(ethers.dataSlice(blockData.extraData, 3, 4)) - let patch = ethers.toNumber(ethers.dataSlice(blockData.extraData, 4, 5)) - - // 2.get minimum txGasPrice based on the last non-zero-gasprice transaction - let lastGasPrice = 0 - for (let txIndex = blockData.transactions.length - 1; txIndex >= 0; txIndex--) { - let txHash = blockData.transactions[txIndex] - let txData = await provider.getTransaction(txHash); - if (txData.gasPrice == 0) { - continue - } - lastGasPrice = txData.gasPrice - break - } - console.log(blockData.miner, "version =", major + "." + minor + "." + patch, " MinGasPrice = " + lastGasPrice) - } -}; -main().then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); \ No newline at end of file diff --git a/cmd/jsutils/package.json b/cmd/jsutils/package.json deleted file mode 100644 index 68a76c9aa4..0000000000 --- a/cmd/jsutils/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "jsutils", - "version": "1.0.0", - "type": "module", - "description": "jsUtils for bsc", - "main": "index.js", - "scripts": { - "startMainnet": "node getvalidatorversion.js --Rpc https://bsc-dataseed.bnbchain.org --Num 21", - "startTestnet": "node getvalidatorversion.js --Rpc https://bsc-testnet-dataseed.bnbchain.org --Num 7" - }, - "dependencies": { - "commander": "^3.0.1", - "ethers": "^6.2.3" - }, - "author": "BNB Chain" -} diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index f0b063c7f5..1ea501e31f 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -305,14 +305,9 @@ var ( Usage: "Manually specify the Rialto Genesis Hash, to trigger builtin network logic", Category: flags.EthCategory, } - OverrideCancun = &cli.Uint64Flag{ - Name: "override.cancun", - Usage: "Manually specify the Cancun fork timestamp, overriding the bundled setting", - Category: flags.EthCategory, - } - OverrideHaber = &cli.Uint64Flag{ - Name: "override.haber", - Usage: "Manually specify the Haber fork timestamp, overriding the bundled setting", + OverridePassedForkTime = &cli.Uint64Flag{ + Name: "override.passedforktime", + Usage: "Manually specify the hard fork timestamp except the last one, overriding the bundled setting", Category: flags.EthCategory, } OverrideBohr = &cli.Uint64Flag{ @@ -349,6 +344,12 @@ var ( Value: params.BreatheBlockInterval, Category: flags.EthCategory, } + OverrideFixedTurnLength = &cli.Uint64Flag{ + Name: "override.fixedturnlength", + Usage: "It use fixed or random values for turn length instead of reading from the contract, only for testing purpose", + Value: params.FixedTurnLength, + Category: flags.EthCategory, + } SyncModeFlag = &flags.TextMarshalerFlag{ Name: "syncmode", Usage: `Blockchain sync mode ("nosync")`, @@ -1168,7 +1169,6 @@ var ( DBEngineFlag, StateSchemeFlag, HttpHeaderFlag, - MultiDataBaseFlag, } ) @@ -2088,7 +2088,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { } cfg.Genesis = core.DefaultBSCGenesisBlock() SetDNSDiscoveryDefaults(cfg, params.BSCGenesisHash) - case ctx.Bool(ChapelFlag.Name): + case ctx.Bool(ChapelFlag.Name) || cfg.NetworkId == 97: if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkId = 97 } diff --git a/consensus/consensus.go b/consensus/consensus.go index 7c65acb359..eef9d50d42 100644 --- a/consensus/consensus.go +++ b/consensus/consensus.go @@ -59,6 +59,9 @@ type ChainHeaderReader interface { // GetHighestVerifiedHeader retrieves the highest header verified. GetHighestVerifiedHeader() *types.Header + // GetVerifiedBlockByHash retrieves the highest verified block. + GetVerifiedBlockByHash(hash common.Hash) *types.Header + // ChasingHead return the best chain head of peers. ChasingHead() *types.Header } diff --git a/consensus/parlia/abi.go b/consensus/parlia/abi.go index 0d9ab54cd5..804dcdf7e0 100644 --- a/consensus/parlia/abi.go +++ b/consensus/parlia/abi.go @@ -2306,6 +2306,19 @@ const validatorSetABI = ` ], "stateMutability": "view" }, + { + "inputs": [], + "name": "getTurnLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "type": "function", "name": "getValidators", diff --git a/consensus/parlia/api.go b/consensus/parlia/api.go index 77d58ac6bc..5929e94d1e 100644 --- a/consensus/parlia/api.go +++ b/consensus/parlia/api.go @@ -31,13 +31,7 @@ type API struct { // GetSnapshot retrieves the state snapshot at a given block. func (api *API) GetSnapshot(number *rpc.BlockNumber) (*Snapshot, error) { - // Retrieve the requested block number (or current if none requested) - var header *types.Header - if number == nil || *number == rpc.LatestBlockNumber { - header = api.chain.CurrentHeader() - } else { - header = api.chain.GetHeaderByNumber(uint64(number.Int64())) - } + header := api.getHeader(number) // Ensure we have an actually valid block and return its snapshot if header == nil { return nil, errUnknownBlock @@ -56,13 +50,7 @@ func (api *API) GetSnapshotAtHash(hash common.Hash) (*Snapshot, error) { // GetValidators retrieves the list of validators at the specified block. func (api *API) GetValidators(number *rpc.BlockNumber) ([]common.Address, error) { - // Retrieve the requested block number (or current if none requested) - var header *types.Header - if number == nil || *number == rpc.LatestBlockNumber { - header = api.chain.CurrentHeader() - } else { - header = api.chain.GetHeaderByNumber(uint64(number.Int64())) - } + header := api.getHeader(number) // Ensure we have an actually valid block and return the validators from its snapshot if header == nil { return nil, errUnknownBlock @@ -86,3 +74,65 @@ func (api *API) GetValidatorsAtHash(hash common.Hash) ([]common.Address, error) } return snap.validators(), nil } + +func (api *API) GetJustifiedNumber(number *rpc.BlockNumber) (uint64, error) { + header := api.getHeader(number) + // Ensure we have an actually valid block and return the validators from its snapshot + if header == nil { + return 0, errUnknownBlock + } + snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) + if err != nil || snap.Attestation == nil { + return 0, err + } + return snap.Attestation.TargetNumber, nil +} + +func (api *API) GetTurnLength(number *rpc.BlockNumber) (uint8, error) { + header := api.getHeader(number) + // Ensure we have an actually valid block and return the validators from its snapshot + if header == nil { + return 0, errUnknownBlock + } + snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) + if err != nil || snap.TurnLength == 0 { + return 0, err + } + return snap.TurnLength, nil +} + +func (api *API) GetFinalizedNumber(number *rpc.BlockNumber) (uint64, error) { + header := api.getHeader(number) + // Ensure we have an actually valid block and return the validators from its snapshot + if header == nil { + return 0, errUnknownBlock + } + snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) + if err != nil || snap.Attestation == nil { + return 0, err + } + return snap.Attestation.SourceNumber, nil +} + +func (api *API) getHeader(number *rpc.BlockNumber) (header *types.Header) { + currentHeader := api.chain.CurrentHeader() + + if number == nil || *number == rpc.LatestBlockNumber { + header = currentHeader // current if none requested + } else if *number == rpc.SafeBlockNumber { + justifiedNumber, _, err := api.parlia.GetJustifiedNumberAndHash(api.chain, []*types.Header{currentHeader}) + if err != nil { + return nil + } + header = api.chain.GetHeaderByNumber(justifiedNumber) + } else if *number == rpc.FinalizedBlockNumber { + header = api.parlia.GetFinalizedHeader(api.chain, currentHeader) + } else if *number == rpc.PendingBlockNumber { + return nil // no pending blocks on bsc + } else if *number == rpc.EarliestBlockNumber { + header = api.chain.GetHeaderByNumber(0) + } else { + header = api.chain.GetHeaderByNumber(uint64(number.Int64())) + } + return +} diff --git a/consensus/parlia/bohrFork.go b/consensus/parlia/bohrFork.go new file mode 100644 index 0000000000..7cfe3c2f18 --- /dev/null +++ b/consensus/parlia/bohrFork.go @@ -0,0 +1,91 @@ +package parlia + +import ( + "context" + "errors" + "math/big" + mrand "math/rand" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/systemcontracts" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" +) + +func (p *Parlia) getTurnLength(chain consensus.ChainHeaderReader, header *types.Header) (*uint8, error) { + parent := chain.GetHeaderByHash(header.ParentHash) + if parent == nil { + return nil, errors.New("parent not found") + } + + var turnLength uint8 + if p.chainConfig.IsBohr(parent.Number, parent.Time) { + turnLengthFromContract, err := p.getTurnLengthFromContract(parent) + if err != nil { + return nil, err + } + if turnLengthFromContract == nil { + return nil, errors.New("unexpected error when getTurnLengthFromContract") + } + turnLength = uint8(turnLengthFromContract.Int64()) + } else { + turnLength = defaultTurnLength + } + log.Debug("getTurnLength", "turnLength", turnLength) + + return &turnLength, nil +} + +func (p *Parlia) getTurnLengthFromContract(header *types.Header) (turnLength *big.Int, err error) { + // mock to get turnLength from the contract + if params.FixedTurnLength >= 1 && params.FixedTurnLength <= 9 { + if params.FixedTurnLength == 2 { + return p.getRandTurnLength(header) + } + return big.NewInt(int64(params.FixedTurnLength)), nil + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + method := "getTurnLength" + toAddress := common.HexToAddress(systemcontracts.ValidatorContract) + gas := (hexutil.Uint64)(uint64(math.MaxUint64 / 2)) + + data, err := p.validatorSetABI.Pack(method) + if err != nil { + log.Error("Unable to pack tx for getTurnLength", "error", err) + return nil, err + } + msgData := (hexutil.Bytes)(data) + + blockNr := rpc.BlockNumberOrHashWithHash(header.Hash(), false) + result, err := p.ethAPI.Call(ctx, ethapi.TransactionArgs{ + Gas: &gas, + To: &toAddress, + Data: &msgData, + }, &blockNr, nil, nil) + if err != nil { + return nil, err + } + + if err := p.validatorSetABI.UnpackIntoInterface(&turnLength, method, result); err != nil { + return nil, err + } + + return turnLength, nil +} + +// getRandTurnLength returns a random valid value, used to test switching turn length +func (p *Parlia) getRandTurnLength(header *types.Header) (turnLength *big.Int, err error) { + turnLengths := [8]uint8{1, 3, 4, 5, 6, 7, 8, 9} + r := mrand.New(mrand.NewSource(int64(header.Time))) + lengthIndex := int(r.Int31n(int32(len(turnLengths)))) + return big.NewInt(int64(turnLengths[lengthIndex])), nil +} diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index ea7bfcf210..276c69eb75 100644 --- a/consensus/parlia/parlia.go +++ b/consensus/parlia/parlia.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "errors" "fmt" + "io" "math" "math/big" "math/rand" @@ -54,11 +55,13 @@ const ( inMemoryHeaders = 86400 // Number of recent headers to keep in memory for double sign detection, checkpointInterval = 1024 // Number of blocks after which to save the snapshot to the database - defaultEpochLength = uint64(100) // Default number of blocks of checkpoint to update validatorSet from contract + defaultEpochLength = uint64(200) // Default number of blocks of checkpoint to update validatorSet from contract + defaultTurnLength = uint8(1) // Default consecutive number of blocks a validator receives priority for block production extraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity extraSeal = 65 // Fixed number of extra-data suffix bytes reserved for signer seal nextForkHashSize = 4 // Fixed number of extra-data suffix bytes reserved for nextForkHash. + turnLengthSize = 1 // Fixed number of extra-data suffix bytes reserved for turnLength validatorBytesLengthBeforeLuban = common.AddressLength validatorBytesLength = common.AddressLength + types.BLSPublicKeyLength @@ -127,6 +130,10 @@ var ( // invalid list of validators (i.e. non divisible by 20 bytes). errInvalidSpanValidators = errors.New("invalid validator list on sprint end block") + // errInvalidTurnLength is returned if a block contains an + // invalid length of turn (i.e. no data left after parsing validators). + errInvalidTurnLength = errors.New("invalid turnLength") + // errInvalidMixDigest is returned if a block's mix digest is non-zero. errInvalidMixDigest = errors.New("non-zero mix digest") @@ -137,6 +144,10 @@ var ( // list of validators different than the one the local node calculated. errMismatchingEpochValidators = errors.New("mismatching validator list on epoch block") + // errMismatchingEpochTurnLength is returned if a sprint block contains a + // turn length different than the one the local node calculated. + errMismatchingEpochTurnLength = errors.New("mismatching turn length on epoch block") + // errInvalidDifficulty is returned if the difficulty of a block is missing. errInvalidDifficulty = errors.New("invalid difficulty") @@ -308,6 +319,10 @@ func New( return c } +func (p *Parlia) Period() uint64 { + return p.config.Period +} + func (p *Parlia) IsSystemTransaction(tx *types.Transaction, header *types.Header) (bool, error) { // deploy a contract if tx.To() == nil { @@ -366,6 +381,7 @@ func (p *Parlia) VerifyHeaders(chain consensus.ChainHeaderReader, headers []*typ // On luban fork, we introduce vote attestation into the header's extra field, so extra format is different from before. // Before luban fork: |---Extra Vanity---|---Validators Bytes (or Empty)---|---Extra Seal---| // After luban fork: |---Extra Vanity---|---Validators Number and Validators Bytes (or Empty)---|---Vote Attestation (or Empty)---|---Extra Seal---| +// After bohr fork: |---Extra Vanity---|---Validators Number and Validators Bytes (or Empty)---|---Turn Length (or Empty)---|---Vote Attestation (or Empty)---|---Extra Seal---| func getValidatorBytesFromHeader(header *types.Header, chainConfig *params.ChainConfig, parliaConfig *params.ParliaConfig) []byte { if len(header.Extra) <= extraVanity+extraSeal { return nil @@ -382,11 +398,15 @@ func getValidatorBytesFromHeader(header *types.Header, chainConfig *params.Chain return nil } num := int(header.Extra[extraVanity]) - if num == 0 || len(header.Extra) <= extraVanity+extraSeal+num*validatorBytesLength { - return nil - } start := extraVanity + validatorNumberSize end := start + num*validatorBytesLength + extraMinLen := end + extraSeal + if chainConfig.IsBohr(header.Number, header.Time) { + extraMinLen += turnLengthSize + } + if num == 0 || len(header.Extra) < extraMinLen { + return nil + } return header.Extra[start:end] } @@ -405,11 +425,14 @@ func getVoteAttestationFromHeader(header *types.Header, chainConfig *params.Chai attestationBytes = header.Extra[extraVanity : len(header.Extra)-extraSeal] } else { num := int(header.Extra[extraVanity]) - if len(header.Extra) <= extraVanity+extraSeal+validatorNumberSize+num*validatorBytesLength { - return nil, nil - } start := extraVanity + validatorNumberSize + num*validatorBytesLength + if chainConfig.IsBohr(header.Number, header.Time) { + start += turnLengthSize + } end := len(header.Extra) - extraSeal + if end <= start { + return nil, nil + } attestationBytes = header.Extra[start:end] } @@ -601,15 +624,11 @@ func (p *Parlia) verifyHeader(chain consensus.ChainHeaderReader, header *types.H return fmt.Errorf("invalid excessBlobGas: have %d, expected nil", header.ExcessBlobGas) case header.BlobGasUsed != nil: return fmt.Errorf("invalid blobGasUsed: have %d, expected nil", header.BlobGasUsed) - case header.ParentBeaconRoot != nil: - return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected nil", header.ParentBeaconRoot) case header.WithdrawalsHash != nil: return fmt.Errorf("invalid WithdrawalsHash, have %#x, expected nil", header.WithdrawalsHash) } } else { switch { - case header.ParentBeaconRoot != nil: - return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected nil", header.ParentBeaconRoot) case !header.EmptyWithdrawalsHash(): return errors.New("header has wrong WithdrawalsHash") } @@ -618,6 +637,17 @@ func (p *Parlia) verifyHeader(chain consensus.ChainHeaderReader, header *types.H } } + bohr := chain.Config().IsBohr(header.Number, header.Time) + if !bohr { + if header.ParentBeaconRoot != nil { + return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected nil", header.ParentBeaconRoot) + } + } else { + if header.ParentBeaconRoot == nil || *header.ParentBeaconRoot != (common.Hash{}) { + return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected zero hash", header.ParentBeaconRoot) + } + } + // All basic checks passed, verify cascading fields return p.verifyCascadingFields(chain, header, parents) } @@ -710,13 +740,28 @@ func (p *Parlia) snapshot(chain consensus.ChainHeaderReader, number uint64, hash } } - // If we're at the genesis, snapshot the initial state. - if number == 0 { - checkpoint := chain.GetHeaderByNumber(number) - if checkpoint != nil { - // get checkpoint data - hash := checkpoint.Hash() - + // If we're at the genesis, snapshot the initial state. Alternatively if we have + // piled up more headers than allowed to be reorged (chain reinit from a freezer), + // consider the checkpoint trusted and snapshot it. + // An offset `p.config.Epoch - 1` can ensure getting the right validators. + if number == 0 || ((number+1)%p.config.Epoch == 0 && (len(headers) > int(params.FullImmutabilityThreshold))) { + var ( + checkpoint *types.Header + blockHash common.Hash + ) + if number == 0 { + checkpoint = chain.GetHeaderByNumber(0) + if checkpoint != nil { + blockHash = checkpoint.Hash() + } + } else { + checkpoint = chain.GetHeaderByNumber(number + 1 - p.config.Epoch) + blockHeader := chain.GetHeaderByNumber(number) + if blockHeader != nil { + blockHash = blockHeader.Hash() + } + } + if checkpoint != nil && blockHash != (common.Hash{}) { // get validators from headers validators, voteAddrs, err := parseValidators(checkpoint, p.chainConfig, p.config) if err != nil { @@ -724,11 +769,27 @@ func (p *Parlia) snapshot(chain consensus.ChainHeaderReader, number uint64, hash } // new snapshot - snap = newSnapshot(p.config, p.signatures, number, hash, validators, voteAddrs, p.ethAPI) + snap = newSnapshot(p.config, p.signatures, number, blockHash, validators, voteAddrs, p.ethAPI) + + // get turnLength from headers and use that for new turnLength + turnLength, err := parseTurnLength(checkpoint, p.chainConfig, p.config) + if err != nil { + return nil, err + } + if turnLength != nil { + snap.TurnLength = *turnLength + } + + // snap.Recents is currently empty, which affects the following: + // a. The function SignRecently - This is acceptable since an empty snap.Recents results in a more lenient check. + // b. The function blockTimeVerifyForRamanujanFork - This is also acceptable as it won't be invoked during `snap.apply`. + // c. This may cause a mismatch in the slash systemtx, but the transaction list is not verified during `snap.apply`. + + // snap.Attestation is nil, but Snapshot.updateAttestation will handle it correctly. if err := snap.store(p.db); err != nil { return nil, err } - log.Info("Stored checkpoint snapshot to disk", "number", number, "hash", hash) + log.Info("Stored checkpoint snapshot to disk", "number", number, "hash", blockHash) break } } @@ -885,6 +946,24 @@ func (p *Parlia) prepareValidators(header *types.Header) error { return nil } +func (p *Parlia) prepareTurnLength(chain consensus.ChainHeaderReader, header *types.Header) error { + if header.Number.Uint64()%p.config.Epoch != 0 || + !p.chainConfig.IsBohr(header.Number, header.Time) { + return nil + } + + turnLength, err := p.getTurnLength(chain, header) + if err != nil { + return err + } + + if turnLength != nil { + header.Extra = append(header.Extra, *turnLength) + } + + return nil +} + func (p *Parlia) assembleVoteAttestation(chain consensus.ChainHeaderReader, header *types.Header) error { if !p.chainConfig.IsLuban(header.Number) || header.Number.Uint64() < 2 { return nil @@ -1016,6 +1095,9 @@ func (p *Parlia) Prepare(chain consensus.ChainHeaderReader, header *types.Header return err } + if err := p.prepareTurnLength(chain, header); err != nil { + return err + } // add extra seal space header.Extra = append(header.Extra, make([]byte, extraSeal)...) @@ -1066,6 +1148,30 @@ func (p *Parlia) verifyValidators(header *types.Header) error { return nil } +func (p *Parlia) verifyTurnLength(chain consensus.ChainHeaderReader, header *types.Header) error { + if header.Number.Uint64()%p.config.Epoch != 0 || + !p.chainConfig.IsBohr(header.Number, header.Time) { + return nil + } + + turnLengthFromHeader, err := parseTurnLength(header, p.chainConfig, p.config) + if err != nil { + return err + } + if turnLengthFromHeader != nil { + turnLength, err := p.getTurnLength(chain, header) + if err != nil { + return err + } + if turnLength != nil && *turnLength == *turnLengthFromHeader { + log.Debug("verifyTurnLength", "turnLength", *turnLength) + return nil + } + } + + return errMismatchingEpochTurnLength +} + func (p *Parlia) distributeFinalityReward(chain consensus.ChainHeaderReader, state *state.StateDB, header *types.Header, cx core.ChainContext, txs *[]*types.Transaction, receipts *[]*types.Receipt, systemTxs *[]*types.Transaction, usedGas *uint64, mining bool) error { @@ -1160,6 +1266,10 @@ func (p *Parlia) Finalize(chain consensus.ChainHeaderReader, header *types.Heade return err } + if err := p.verifyTurnLength(chain, header); err != nil { + return err + } + cx := chainContext{Chain: chain, parlia: p} parent := chain.GetHeaderByHash(header.ParentHash) @@ -1186,7 +1296,7 @@ func (p *Parlia) Finalize(chain consensus.ChainHeaderReader, header *types.Heade } } if header.Difficulty.Cmp(diffInTurn) != 0 { - spoiledVal := snap.supposeValidator() + spoiledVal := snap.inturnValidator() signedRecently := false if p.chainConfig.IsPlato(header.Number) { signedRecently = snap.SignRecently(spoiledVal) @@ -1277,7 +1387,7 @@ func (p *Parlia) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header * if err != nil { return nil, nil, err } - spoiledVal := snap.supposeValidator() + spoiledVal := snap.inturnValidator() signedRecently := false if p.chainConfig.IsPlato(header.Number) { signedRecently = snap.SignRecently(spoiledVal) @@ -1359,7 +1469,7 @@ func (p *Parlia) IsActiveValidatorAt(chain consensus.ChainHeaderReader, header * func (p *Parlia) VerifyVote(chain consensus.ChainHeaderReader, vote *types.VoteEnvelope) error { targetNumber := vote.Data.TargetNumber targetHash := vote.Data.TargetHash - header := chain.GetHeaderByHash(targetHash) + header := chain.GetVerifiedBlockByHash(targetHash) if header == nil { log.Warn("BlockHeader at current voteBlockNumber is nil", "targetNumber", targetNumber, "targetHash", targetHash) return errors.New("BlockHeader at current voteBlockNumber is nil") @@ -1430,10 +1540,13 @@ func (p *Parlia) Delay(chain consensus.ChainReader, header *types.Header, leftOv delay = delay - *leftOver } - // The blocking time should be no more than half of period - half := time.Duration(p.config.Period) * time.Second / 2 - if delay > half { - delay = half + // The blocking time should be no more than half of period when snap.TurnLength == 1 + timeForMining := time.Duration(p.config.Period) * time.Second / 2 + if !snap.lastBlockInOneTurn(header.Number.Uint64()) { + timeForMining = time.Duration(p.config.Period) * time.Second * 2 / 3 + } + if delay > timeForMining { + delay = timeForMining } return &delay } @@ -1591,11 +1704,35 @@ func CalcDifficulty(snap *Snapshot, signer common.Address) *big.Int { return new(big.Int).Set(diffNoTurn) } +func encodeSigHeaderWithoutVoteAttestation(w io.Writer, header *types.Header, chainId *big.Int) { + err := rlp.Encode(w, []interface{}{ + chainId, + header.ParentHash, + header.UncleHash, + header.Coinbase, + header.Root, + header.TxHash, + header.ReceiptHash, + header.Bloom, + header.Difficulty, + header.Number, + header.GasLimit, + header.GasUsed, + header.Time, + header.Extra[:extraVanity], // this will panic if extra is too short, should check before calling encodeSigHeaderWithoutVoteAttestation + header.MixDigest, + header.Nonce, + }) + if err != nil { + panic("can't encode: " + err.Error()) + } +} + // SealHash returns the hash of a block without vote attestation prior to it being sealed. // So it's not the real hash of a block, just used as unique id to distinguish task func (p *Parlia) SealHash(header *types.Header) (hash common.Hash) { hasher := sha3.NewLegacyKeccak256() - types.EncodeSigHeaderWithoutVoteAttestation(hasher, header, p.chainConfig.ChainID) + encodeSigHeaderWithoutVoteAttestation(hasher, header, p.chainConfig.ChainID) hasher.Sum(hash[:0]) return hash } @@ -1901,42 +2038,40 @@ func (p *Parlia) GetFinalizedHeader(chain consensus.ChainHeaderReader, header *t // =========================== utility function ========================== func (p *Parlia) backOffTime(snap *Snapshot, header *types.Header, val common.Address) uint64 { if snap.inturn(val) { + log.Debug("backOffTime", "blockNumber", header.Number, "in turn validator", val) return 0 } else { delay := initialBackOffTime validators := snap.validators() if p.chainConfig.IsPlanck(header.Number) { - // reverse the key/value of snap.Recents to get recentsMap - recentsMap := make(map[common.Address]uint64, len(snap.Recents)) - bound := uint64(0) - if n, limit := header.Number.Uint64(), uint64(len(validators)/2+1); n > limit { - bound = n - limit - } - for seen, recent := range snap.Recents { - if seen <= bound { - continue - } - recentsMap[recent] = seen + counts := snap.countRecents() + for addr, seenTimes := range counts { + log.Debug("backOffTime", "blockNumber", header.Number, "validator", addr, "seenTimes", seenTimes) } // The backOffTime does not matter when a validator has signed recently. - if _, ok := recentsMap[val]; ok { + if snap.signRecentlyByCounts(val, counts) { return 0 } - inTurnAddr := validators[(snap.Number+1)%uint64(len(validators))] - if _, ok := recentsMap[inTurnAddr]; ok { + inTurnAddr := snap.inturnValidator() + if snap.signRecentlyByCounts(inTurnAddr, counts) { log.Debug("in turn validator has recently signed, skip initialBackOffTime", "inTurnAddr", inTurnAddr) delay = 0 } - // Exclude the recently signed validators + // Exclude the recently signed validators and the in turn validator temp := make([]common.Address, 0, len(validators)) for _, addr := range validators { - if _, ok := recentsMap[addr]; ok { + if snap.signRecentlyByCounts(addr, counts) { continue } + if p.chainConfig.IsBohr(header.Number, header.Time) { + if addr == inTurnAddr { + continue + } + } temp = append(temp, addr) } validators = temp @@ -1954,7 +2089,11 @@ func (p *Parlia) backOffTime(snap *Snapshot, header *types.Header, val common.Ad return 0 } - s := rand.NewSource(int64(snap.Number)) + randSeed := snap.Number + if p.chainConfig.IsBohr(header.Number, header.Time) { + randSeed = header.Number.Uint64() / uint64(snap.TurnLength) + } + s := rand.NewSource(int64(randSeed)) r := rand.New(s) n := len(validators) backOffSteps := make([]uint64, 0, n) diff --git a/consensus/parlia/parlia_test.go b/consensus/parlia/parlia_test.go index b03f747537..afd30b86e8 100644 --- a/consensus/parlia/parlia_test.go +++ b/consensus/parlia/parlia_test.go @@ -22,22 +22,44 @@ func TestImpactOfValidatorOutOfService(t *testing.T) { testCases := []struct { totalValidators int downValidators int + turnLength int }{ - {3, 1}, - {5, 2}, - {10, 1}, - {10, 4}, - {21, 1}, - {21, 3}, - {21, 5}, - {21, 10}, + {3, 1, 1}, + {5, 2, 1}, + {10, 1, 2}, + {10, 4, 2}, + {21, 1, 3}, + {21, 3, 3}, + {21, 5, 4}, + {21, 10, 5}, } for _, tc := range testCases { - simulateValidatorOutOfService(tc.totalValidators, tc.downValidators) + simulateValidatorOutOfService(tc.totalValidators, tc.downValidators, tc.turnLength) } } -func simulateValidatorOutOfService(totalValidators int, downValidators int) { +// refer Snapshot.SignRecently +func signRecently(idx int, recents map[uint64]int, turnLength int) bool { + recentSignTimes := 0 + for _, signIdx := range recents { + if signIdx == idx { + recentSignTimes += 1 + } + } + return recentSignTimes >= turnLength +} + +// refer Snapshot.minerHistoryCheckLen +func minerHistoryCheckLen(totalValidators int, turnLength int) uint64 { + return uint64(totalValidators/2+1)*uint64(turnLength) - 1 +} + +// refer Snapshot.inturnValidator +func inturnValidator(totalValidators int, turnLength int, height int) int { + return height / turnLength % totalValidators +} + +func simulateValidatorOutOfService(totalValidators int, downValidators int, turnLength int) { downBlocks := 10000 recoverBlocks := 10000 recents := make(map[uint64]int) @@ -55,12 +77,7 @@ func simulateValidatorOutOfService(totalValidators int, downValidators int) { delete(validators, down[i]) } isRecentSign := func(idx int) bool { - for _, signIdx := range recents { - if signIdx == idx { - return true - } - } - return false + return signRecently(idx, recents, turnLength) } isInService := func(idx int) bool { return validators[idx] @@ -68,10 +85,10 @@ func simulateValidatorOutOfService(totalValidators int, downValidators int) { downDelay := uint64(0) for h := 1; h <= downBlocks; h++ { - if limit := uint64(totalValidators/2 + 1); uint64(h) >= limit { + if limit := minerHistoryCheckLen(totalValidators, turnLength) + 1; uint64(h) >= limit { delete(recents, uint64(h)-limit) } - proposer := h % totalValidators + proposer := inturnValidator(totalValidators, turnLength, h) if !isInService(proposer) || isRecentSign(proposer) { candidates := make(map[int]bool, totalValidators/2) for v := range validators { @@ -99,10 +116,10 @@ func simulateValidatorOutOfService(totalValidators int, downValidators int) { recoverDelay := uint64(0) lastseen := downBlocks for h := downBlocks + 1; h <= downBlocks+recoverBlocks; h++ { - if limit := uint64(totalValidators/2 + 1); uint64(h) >= limit { + if limit := minerHistoryCheckLen(totalValidators, turnLength) + 1; uint64(h) >= limit { delete(recents, uint64(h)-limit) } - proposer := h % totalValidators + proposer := inturnValidator(totalValidators, turnLength, h) if !isInService(proposer) || isRecentSign(proposer) { lastseen = h candidates := make(map[int]bool, totalValidators/2) diff --git a/consensus/parlia/snapshot.go b/consensus/parlia/snapshot.go index 0da0929e7c..339736771d 100644 --- a/consensus/parlia/snapshot.go +++ b/consensus/parlia/snapshot.go @@ -22,6 +22,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "sort" lru "github.com/hashicorp/golang-lru" @@ -43,6 +44,7 @@ type Snapshot struct { Number uint64 `json:"number"` // Block number where the snapshot was created Hash common.Hash `json:"hash"` // Block hash where the snapshot was created + TurnLength uint8 `json:"turn_length"` // Length of `turn`, meaning the consecutive number of blocks a validator receives priority for block production Validators map[common.Address]*ValidatorInfo `json:"validators"` // Set of authorized validators at this moment Recents map[uint64]common.Address `json:"recents"` // Set of recent validators for spam protections RecentForkHashes map[uint64]string `json:"recent_fork_hashes"` // Set of recent forkHash @@ -72,6 +74,7 @@ func newSnapshot( sigCache: sigCache, Number: number, Hash: hash, + TurnLength: defaultTurnLength, Recents: make(map[uint64]common.Address), RecentForkHashes: make(map[uint64]string), Validators: make(map[common.Address]*ValidatorInfo), @@ -114,6 +117,10 @@ func loadSnapshot(config *params.ParliaConfig, sigCache *lru.ARCCache, db ethdb. if err := json.Unmarshal(blob, snap); err != nil { return nil, err } + if snap.TurnLength == 0 { // no TurnLength field in old snapshots + snap.TurnLength = defaultTurnLength + } + snap.config = config snap.sigCache = sigCache snap.ethAPI = ethAPI @@ -138,6 +145,7 @@ func (s *Snapshot) copy() *Snapshot { sigCache: s.sigCache, Number: s.Number, Hash: s.Hash, + TurnLength: s.TurnLength, Validators: make(map[common.Address]*ValidatorInfo), Recents: make(map[uint64]common.Address), RecentForkHashes: make(map[uint64]string), @@ -210,17 +218,45 @@ func (s *Snapshot) updateAttestation(header *types.Header, chainConfig *params.C } } -func (s *Snapshot) SignRecently(validator common.Address) bool { +func (s *Snapshot) versionHistoryCheckLen() uint64 { + return uint64(len(s.Validators)) * uint64(s.TurnLength) +} + +func (s *Snapshot) minerHistoryCheckLen() uint64 { + return (uint64(len(s.Validators))/2+1)*uint64(s.TurnLength) - 1 +} + +func (s *Snapshot) countRecents() map[common.Address]uint8 { + leftHistoryBound := uint64(0) // the bound is excluded + checkHistoryLength := s.minerHistoryCheckLen() + if s.Number > checkHistoryLength { + leftHistoryBound = s.Number - checkHistoryLength + } + counts := make(map[common.Address]uint8, len(s.Validators)) for seen, recent := range s.Recents { - if recent == validator { - if limit := uint64(len(s.Validators)/2 + 1); s.Number+1 < limit || seen > s.Number+1-limit { - return true - } + if seen <= leftHistoryBound || recent == (common.Address{}) /*when seen == `epochKey`*/ { + continue + } + counts[recent] += 1 + } + return counts +} + +func (s *Snapshot) signRecentlyByCounts(validator common.Address, counts map[common.Address]uint8) bool { + if seenTimes, ok := counts[validator]; ok && seenTimes >= s.TurnLength { + if seenTimes > s.TurnLength { + log.Warn("produce more blocks than expected!", "validator", validator, "seenTimes", seenTimes) } + return true } + return false } +func (s *Snapshot) SignRecently(validator common.Address) bool { + return s.signRecentlyByCounts(validator, s.countRecents()) +} + func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderReader, parents []*types.Header, chainConfig *params.ChainConfig) (*Snapshot, error) { // Allow passing in no headers for cleaner code if len(headers) == 0 { @@ -247,10 +283,10 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea for _, header := range headers { number := header.Number.Uint64() // Delete the oldest validator from the recent list to allow it signing again - if limit := uint64(len(snap.Validators)/2 + 1); number >= limit { + if limit := snap.minerHistoryCheckLen() + 1; number >= limit { delete(snap.Recents, number-limit) } - if limit := uint64(len(snap.Validators)); number >= limit { + if limit := snap.versionHistoryCheckLen(); number >= limit { delete(snap.RecentForkHashes, number-limit) } // Resolve the authorization key and check against signers @@ -261,19 +297,47 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea if _, ok := snap.Validators[validator]; !ok { return nil, errUnauthorizedValidator(validator.String()) } - for _, recent := range snap.Recents { - if recent == validator { + if chainConfig.IsBohr(header.Number, header.Time) { + if snap.SignRecently(validator) { return nil, errRecentlySigned } + } else { + for _, recent := range snap.Recents { + if recent == validator { + return nil, errRecentlySigned + } + } } snap.Recents[number] = validator + snap.RecentForkHashes[number] = hex.EncodeToString(header.Extra[extraVanity-nextForkHashSize : extraVanity]) + snap.updateAttestation(header, chainConfig, s.config) // change validator set - if number > 0 && number%s.config.Epoch == uint64(len(snap.Validators)/2) { - checkpointHeader := FindAncientHeader(header, uint64(len(snap.Validators)/2), chain, parents) + if number > 0 && number%s.config.Epoch == snap.minerHistoryCheckLen() { + epochKey := math.MaxUint64 - header.Number.Uint64()/s.config.Epoch // impossible used as a block number + if chainConfig.IsBohr(header.Number, header.Time) { + // after switching the validator set, snap.Validators may become larger, + // then the unexpected second switch will happen, just skip it. + if _, ok := snap.Recents[epochKey]; ok { + continue + } + } + + checkpointHeader := FindAncientHeader(header, snap.minerHistoryCheckLen(), chain, parents) if checkpointHeader == nil { return nil, consensus.ErrUnknownAncestor } + oldVersionsLen := snap.versionHistoryCheckLen() + // get turnLength from headers and use that for new turnLength + turnLength, err := parseTurnLength(checkpointHeader, chainConfig, s.config) + if err != nil { + return nil, err + } + if turnLength != nil { + snap.TurnLength = *turnLength + log.Debug("validator set switch", "turnLength", *turnLength) + } + // get validators from headers and use that for new validator set newValArr, voteAddrs, err := parseValidators(checkpointHeader, chainConfig, s.config) if err != nil { @@ -289,18 +353,18 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea } } } - oldLimit := len(snap.Validators)/2 + 1 - newLimit := len(newVals)/2 + 1 - if newLimit < oldLimit { - for i := 0; i < oldLimit-newLimit; i++ { - delete(snap.Recents, number-uint64(newLimit)-uint64(i)) - } - } - oldLimit = len(snap.Validators) - newLimit = len(newVals) - if newLimit < oldLimit { - for i := 0; i < oldLimit-newLimit; i++ { - delete(snap.RecentForkHashes, number-uint64(newLimit)-uint64(i)) + if chainConfig.IsBohr(header.Number, header.Time) { + // BEP-404: Clear Miner History when Switching Validators Set + snap.Recents = make(map[uint64]common.Address) + snap.Recents[epochKey] = common.Address{} + log.Debug("Recents are cleared up", "blockNumber", number) + } else { + oldLimit := len(snap.Validators)/2 + 1 + newLimit := len(newVals)/2 + 1 + if newLimit < oldLimit { + for i := 0; i < oldLimit-newLimit; i++ { + delete(snap.Recents, number-uint64(newLimit)-uint64(i)) + } } } snap.Validators = newVals @@ -310,11 +374,10 @@ func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainHeaderRea snap.Validators[val].Index = idx + 1 // offset by 1 } } + for i := snap.versionHistoryCheckLen(); i < oldVersionsLen; i++ { + delete(snap.RecentForkHashes, number-i) + } } - - snap.updateAttestation(header, chainConfig, s.config) - - snap.RecentForkHashes[number] = hex.EncodeToString(header.Extra[extraVanity-nextForkHashSize : extraVanity]) } snap.Number += uint64(len(headers)) snap.Hash = headers[len(headers)-1].Hash() @@ -331,17 +394,20 @@ func (s *Snapshot) validators() []common.Address { return validators } +// lastBlockInOneTurn returns if the block at height `blockNumber` is the last block in current turn. +func (s *Snapshot) lastBlockInOneTurn(blockNumber uint64) bool { + return (blockNumber+1)%uint64(s.TurnLength) == 0 +} + // inturn returns if a validator at a given block height is in-turn or not. func (s *Snapshot) inturn(validator common.Address) bool { - validators := s.validators() - offset := (s.Number + 1) % uint64(len(validators)) - return validators[offset] == validator + return s.inturnValidator() == validator } -// inturnValidator returns the validator at a given block height. +// inturnValidator returns the validator for the following block height. func (s *Snapshot) inturnValidator() common.Address { validators := s.validators() - offset := (s.Number + 1) % uint64(len(validators)) + offset := (s.Number + 1) / uint64(s.TurnLength) % uint64(len(validators)) return validators[offset] } @@ -379,12 +445,6 @@ func (s *Snapshot) indexOfVal(validator common.Address) int { return -1 } -func (s *Snapshot) supposeValidator() common.Address { - validators := s.validators() - index := (s.Number + 1) % uint64(len(validators)) - return validators[index] -} - func parseValidators(header *types.Header, chainConfig *params.ChainConfig, parliaConfig *params.ParliaConfig) ([]common.Address, []types.BLSPublicKey, error) { validatorsBytes := getValidatorBytesFromHeader(header, chainConfig, parliaConfig) if len(validatorsBytes) == 0 { @@ -410,6 +470,24 @@ func parseValidators(header *types.Header, chainConfig *params.ChainConfig, parl return cnsAddrs, voteAddrs, nil } +func parseTurnLength(header *types.Header, chainConfig *params.ChainConfig, parliaConfig *params.ParliaConfig) (*uint8, error) { + if header.Number.Uint64()%parliaConfig.Epoch != 0 || + !chainConfig.IsBohr(header.Number, header.Time) { + return nil, nil + } + + if len(header.Extra) <= extraVanity+extraSeal { + return nil, errInvalidSpanValidators + } + num := int(header.Extra[extraVanity]) + pos := extraVanity + validatorNumberSize + num*validatorBytesLength + if len(header.Extra) <= pos { + return nil, errInvalidTurnLength + } + turnLength := header.Extra[pos] + return &turnLength, nil +} + func FindAncientHeader(header *types.Header, ite uint64, chain consensus.ChainHeaderReader, candidateParents []*types.Header) *types.Header { ancient := header for i := uint64(1); i <= ite; i++ { diff --git a/core/blockchain.go b/core/blockchain.go index ba14777ddc..bcf2954a85 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -262,23 +262,25 @@ type BlockChain struct { triesInMemory uint64 txIndexer *txIndexer // Transaction indexer, might be nil if not enabled - hc *HeaderChain - rmLogsFeed event.Feed - chainFeed event.Feed - chainSideFeed event.Feed - chainHeadFeed event.Feed - chainBlockFeed event.Feed - logsFeed event.Feed - blockProcFeed event.Feed - finalizedHeaderFeed event.Feed - scope event.SubscriptionScope - genesisBlock *types.Block + hc *HeaderChain + rmLogsFeed event.Feed + chainFeed event.Feed + chainSideFeed event.Feed + chainHeadFeed event.Feed + chainBlockFeed event.Feed + logsFeed event.Feed + blockProcFeed event.Feed + finalizedHeaderFeed event.Feed + highestVerifiedBlockFeed event.Feed + scope event.SubscriptionScope + genesisBlock *types.Block // This mutex synchronizes chain write operations. // Readers don't need to take it, they can just read the database. chainmu *syncx.ClosableMutex highestVerifiedHeader atomic.Pointer[types.Header] + highestVerifiedBlock atomic.Pointer[types.Header] currentBlock atomic.Pointer[types.Header] // Current head of the chain currentSnapBlock atomic.Pointer[types.Header] // Current head of snap-sync currentFinalBlock atomic.Pointer[types.Header] // Latest (consensus) finalized block @@ -408,6 +410,7 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis } bc.highestVerifiedHeader.Store(nil) + bc.highestVerifiedBlock.Store(nil) bc.currentBlock.Store(genesisBlock.Header()) bc.currentSnapBlock.Store(genesisBlock.Header()) bc.chasingHead.Store(nil) @@ -538,20 +541,13 @@ func (bc *BlockChain) cacheDiffLayer(diffLayer *types.DiffLayer, diffLayerCh cha } } -func (bc *BlockChain) cacheBlock(hash common.Hash, block *types.Block) { - bc.blockCache.Add(hash, block) - if bc.chainConfig.IsCancun(block.Number(), block.Time()) { - bc.sidecarsCache.Add(hash, block.Sidecars()) - } -} - // empty returns an indicator whether the blockchain is empty. // Note, it's a special case that we connect a non-empty ancient // database with an empty node, so that we can plugin the ancient // into node seamlessly. func (bc *BlockChain) empty() bool { genesis := bc.genesisBlock.Hash() - for _, hash := range []common.Hash{rawdb.ReadHeadBlockHash(bc.db.BlockStore()), rawdb.ReadHeadHeaderHash(bc.db.BlockStore()), rawdb.ReadHeadFastBlockHash(bc.db.BlockStore())} { + for _, hash := range []common.Hash{rawdb.ReadHeadBlockHash(bc.db), rawdb.ReadHeadHeaderHash(bc.db), rawdb.ReadHeadFastBlockHash(bc.db)} { if hash != genesis { return false } @@ -587,7 +583,7 @@ func (bc *BlockChain) getFinalizedNumber(header *types.Header) uint64 { // assumes that the chain manager mutex is held. func (bc *BlockChain) loadLastState() error { // Restore the last known head block - head := rawdb.ReadHeadBlockHash(bc.db.BlockStore()) + head := rawdb.ReadHeadBlockHash(bc.db) if head == (common.Hash{}) { // Corrupt or empty database, init from scratch log.Warn("Empty database, resetting chain") @@ -609,7 +605,7 @@ func (bc *BlockChain) loadLastState() error { // Restore the last known head header headHeader := headBlock.Header() - if head := rawdb.ReadHeadHeaderHash(bc.db.BlockStore()); head != (common.Hash{}) { + if head := rawdb.ReadHeadHeaderHash(bc.db); head != (common.Hash{}) { if header := bc.GetHeaderByHash(head); header != nil { headHeader = header } @@ -620,7 +616,7 @@ func (bc *BlockChain) loadLastState() error { bc.currentSnapBlock.Store(headBlock.Header()) headFastBlockGauge.Update(int64(headBlock.NumberU64())) - if head := rawdb.ReadHeadFastBlockHash(bc.db.BlockStore()); head != (common.Hash{}) { + if head := rawdb.ReadHeadFastBlockHash(bc.db); head != (common.Hash{}) { if block := bc.GetBlockByHash(head); block != nil { bc.currentSnapBlock.Store(block.Header()) headFastBlockGauge.Update(int64(block.NumberU64())) @@ -988,7 +984,7 @@ func (bc *BlockChain) setHeadBeyondRoot(head uint64, time uint64, root common.Ha // intent afterwards is full block importing, delete the chain segment // between the stateful-block and the sethead target. var wipe bool - frozen, _ := bc.db.Ancients() + frozen, _ := bc.db.BlockStore().Ancients() if headNumber+1 < frozen { wipe = pivot == nil || headNumber >= *pivot } @@ -997,11 +993,11 @@ func (bc *BlockChain) setHeadBeyondRoot(head uint64, time uint64, root common.Ha // Rewind the header chain, deleting all block bodies until then delFn := func(db ethdb.KeyValueWriter, hash common.Hash, num uint64) { // Ignore the error here since light client won't hit this path - frozen, _ := bc.db.Ancients() + frozen, _ := bc.db.BlockStore().Ancients() if num+1 <= frozen { // Truncate all relative data(header, total difficulty, body, receipt // and canonical hash) from ancient store. - if _, err := bc.db.TruncateHead(num); err != nil { + if _, err := bc.db.BlockStore().TruncateHead(num); err != nil { log.Crit("Failed to truncate ancient data", "number", num, "err", err) } // Remove the hash <-> number mapping from the active store. @@ -1278,7 +1274,7 @@ func (bc *BlockChain) Stop() { if !bc.cacheConfig.TrieDirtyDisabled { triedb := bc.triedb var once sync.Once - for _, offset := range []uint64{0, 1, TriesInMemory - 1} { + for _, offset := range []uint64{0, 1, bc.TriesInMemory() - 1} { if number := bc.CurrentBlock().Number.Uint64(); number > offset { recent := bc.GetBlockByNumber(number - offset) log.Info("Writing cached state to disk", "block", recent.Number(), "hash", recent.Hash(), "root", recent.Root()) @@ -1444,9 +1440,9 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ // Ensure genesis is in ancients. if first.NumberU64() == 1 { - if frozen, _ := bc.db.Ancients(); frozen == 0 { + if frozen, _ := bc.db.BlockStore().Ancients(); frozen == 0 { td := bc.genesisBlock.Difficulty() - writeSize, err := rawdb.WriteAncientBlocks(bc.db, []*types.Block{bc.genesisBlock}, []types.Receipts{nil}, td) + writeSize, err := rawdb.WriteAncientBlocks(bc.db.BlockStore(), []*types.Block{bc.genesisBlock}, []types.Receipts{nil}, td) if err != nil { log.Error("Error writing genesis to ancients", "err", err) return 0, err @@ -1464,7 +1460,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ // Write all chain data to ancients. td := bc.GetTd(first.Hash(), first.NumberU64()) - writeSize, err := rawdb.WriteAncientBlocksWithBlobs(bc.db, blockChain, receiptChain, td) + writeSize, err := rawdb.WriteAncientBlocksWithBlobs(bc.db.BlockStore(), blockChain, receiptChain, td) if err != nil { log.Error("Error importing chain data to ancients", "err", err) return 0, err @@ -1472,7 +1468,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ size += writeSize // Sync the ancient store explicitly to ensure all data has been flushed to disk. - if err := bc.db.Sync(); err != nil { + if err := bc.db.BlockStore().Sync(); err != nil { return 0, err } // Update the current snap block because all block data is now present in DB. @@ -1480,7 +1476,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ if !updateHead(blockChain[len(blockChain)-1]) { // We end up here if the header chain has reorg'ed, and the blocks/receipts // don't match the canonical chain. - if _, err := bc.db.TruncateHead(previousSnapBlock + 1); err != nil { + if _, err := bc.db.BlockStore().TruncateHead(previousSnapBlock + 1); err != nil { log.Error("Can't truncate ancient store after failed insert", "err", err) } return 0, errSideChainReceipts @@ -1500,7 +1496,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ rawdb.DeleteBlockWithoutNumber(blockBatch, block.Hash(), block.NumberU64()) } // Delete side chain hash-to-number mappings. - for _, nh := range rawdb.ReadAllHashesInRange(bc.db, first.NumberU64(), last.NumberU64()) { + for _, nh := range rawdb.ReadAllHashesInRange(bc.db.BlockStore(), first.NumberU64(), last.NumberU64()) { if _, canon := canonHashes[nh.Hash]; !canon { rawdb.DeleteHeader(blockBatch, nh.Hash, nh.Number) } @@ -1686,6 +1682,12 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. if err := blockBatch.Write(); err != nil { log.Crit("Failed to write block into disk", "err", err) } + bc.hc.tdCache.Add(block.Hash(), externTd) + bc.blockCache.Add(block.Hash(), block) + bc.cacheReceipts(block.Hash(), receipts, block) + if bc.chainConfig.IsCancun(block.Number(), block.Time()) { + bc.sidecarsCache.Add(block.Hash(), block.Sidecars()) + } wg.Done() }() @@ -1710,7 +1712,7 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. // Flush limits are not considered for the first TriesInMemory blocks. current := block.NumberU64() - if current <= TriesInMemory { + if current <= bc.TriesInMemory() { return nil } // If we exceeded our memory allowance, flush matured singleton nodes to disk @@ -1808,14 +1810,19 @@ func (bc *BlockChain) WriteBlockAndSetHead(block *types.Block, receipts []*types // writeBlockAndSetHead is the internal implementation of WriteBlockAndSetHead. // This function expects the chain mutex to be held. func (bc *BlockChain) writeBlockAndSetHead(block *types.Block, receipts []*types.Receipt, logs []*types.Log, state *state.StateDB, emitHeadEvent bool) (status WriteStatus, err error) { - if err := bc.writeBlockWithState(block, receipts, state); err != nil { - return NonStatTy, err - } currentBlock := bc.CurrentBlock() reorg, err := bc.forker.ReorgNeededWithFastFinality(currentBlock, block.Header()) if err != nil { return NonStatTy, err } + if reorg { + bc.highestVerifiedBlock.Store(types.CopyHeader(block.Header())) + bc.highestVerifiedBlockFeed.Send(HighestVerifiedBlockEvent{Header: block.Header()}) + } + + if err := bc.writeBlockWithState(block, receipts, state); err != nil { + return NonStatTy, err + } if reorg { // Reorganise the chain if the parent is not the head block if block.ParentHash() != currentBlock.Hash() { @@ -2163,8 +2170,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) vtime := time.Since(vstart) proctime := time.Since(start) // processing + validation - bc.cacheBlock(block.Hash(), block) - // Update the metrics touched during block processing and validation accountReadTimer.Update(statedb.AccountReads) // Account reads are complete(in processing) storageReadTimer.Update(statedb.StorageReads) // Storage reads are complete(in processing) @@ -2196,8 +2201,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) return it.index, err } - bc.cacheReceipts(block.Hash(), receipts, block) - // Update the metrics touched during block commit accountCommitTimer.Update(statedb.AccountCommits) // Account commits are complete, we can mark them storageCommitTimer.Update(statedb.StorageCommits) // Storage commits are complete, we can mark them @@ -2277,26 +2280,11 @@ func (bc *BlockChain) updateHighestVerifiedHeader(header *types.Header) { if header == nil || header.Number == nil { return } - currentHeader := bc.highestVerifiedHeader.Load() - if currentHeader == nil { - bc.highestVerifiedHeader.Store(types.CopyHeader(header)) - return - } - - newParentTD := bc.GetTd(header.ParentHash, header.Number.Uint64()-1) - if newParentTD == nil { - newParentTD = big.NewInt(0) - } - oldParentTD := bc.GetTd(currentHeader.ParentHash, currentHeader.Number.Uint64()-1) - if oldParentTD == nil { - oldParentTD = big.NewInt(0) - } - newTD := big.NewInt(0).Add(newParentTD, header.Difficulty) - oldTD := big.NewInt(0).Add(oldParentTD, currentHeader.Difficulty) - - if newTD.Cmp(oldTD) > 0 { + currentBlock := bc.CurrentBlock() + reorg, err := bc.forker.ReorgNeededWithFastFinality(currentBlock, header) + if err == nil && reorg { bc.highestVerifiedHeader.Store(types.CopyHeader(header)) - return + log.Trace("updateHighestVerifiedHeader", "number", header.Number.Uint64(), "hash", header.Hash()) } } diff --git a/core/blockchain_reader.go b/core/blockchain_reader.go index fb11f2cee1..9af896435f 100644 --- a/core/blockchain_reader.go +++ b/core/blockchain_reader.go @@ -98,6 +98,15 @@ func (bc *BlockChain) GetHeaderByHash(hash common.Hash) *types.Header { return bc.hc.GetHeaderByHash(hash) } +// GetVerifiedBlockByHash retrieves the header of a verified block, it may be only in memory. +func (bc *BlockChain) GetVerifiedBlockByHash(hash common.Hash) *types.Header { + highestVerifiedBlock := bc.highestVerifiedBlock.Load() + if highestVerifiedBlock != nil && highestVerifiedBlock.Hash() == hash { + return highestVerifiedBlock + } + return bc.hc.GetHeaderByHash(hash) +} + // GetHeaderByNumber retrieves a block header from the database by number, // caching it (associated with its hash) if found. func (bc *BlockChain) GetHeaderByNumber(number uint64) *types.Header { @@ -225,7 +234,7 @@ func (bc *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts { if receipts, ok := bc.receiptsCache.Get(hash); ok { return receipts } - number := rawdb.ReadHeaderNumber(bc.db.BlockStore(), hash) + number := rawdb.ReadHeaderNumber(bc.db, hash) if number == nil { return nil } @@ -480,6 +489,11 @@ func (bc *BlockChain) SubscribeChainHeadEvent(ch chan<- ChainHeadEvent) event.Su return bc.scope.Track(bc.chainHeadFeed.Subscribe(ch)) } +// SubscribeHighestVerifiedBlockEvent registers a subscription of HighestVerifiedBlockEvent. +func (bc *BlockChain) SubscribeHighestVerifiedHeaderEvent(ch chan<- HighestVerifiedBlockEvent) event.Subscription { + return bc.scope.Track(bc.highestVerifiedBlockFeed.Subscribe(ch)) +} + // SubscribeChainBlockEvent registers a subscription of ChainBlockEvent. func (bc *BlockChain) SubscribeChainBlockEvent(ch chan<- ChainHeadEvent) event.Subscription { return bc.scope.Track(bc.chainBlockFeed.Subscribe(ch)) @@ -508,7 +522,7 @@ func (bc *BlockChain) SubscribeFinalizedHeaderEvent(ch chan<- FinalizedHeaderEve // AncientTail retrieves the tail the ancients blocks func (bc *BlockChain) AncientTail() (uint64, error) { - tail, err := bc.db.Tail() + tail, err := bc.db.BlockStore().Tail() if err != nil { return 0, err } diff --git a/core/chain_indexer.go b/core/chain_indexer.go index 6ccca69e52..f5fce72588 100644 --- a/core/chain_indexer.go +++ b/core/chain_indexer.go @@ -227,8 +227,8 @@ func (c *ChainIndexer) eventLoop(currentHeader *types.Header, events chan ChainH // Reorg to the common ancestor if needed (might not exist in light sync mode, skip reorg then) // TODO(karalabe, zsfelfoldi): This seems a bit brittle, can we detect this case explicitly? - if rawdb.ReadCanonicalHash(c.chainDb.BlockStore(), prevHeader.Number.Uint64()) != prevHash { - if h := rawdb.FindCommonAncestor(c.chainDb.BlockStore(), prevHeader, header); h != nil { + if rawdb.ReadCanonicalHash(c.chainDb, prevHeader.Number.Uint64()) != prevHash { + if h := rawdb.FindCommonAncestor(c.chainDb, prevHeader, header); h != nil { c.newHead(h.Number.Uint64(), true) } } diff --git a/core/chain_makers.go b/core/chain_makers.go index 0592210dba..29306c5222 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -486,7 +486,7 @@ func (cm *chainMaker) makeHeader(parent *types.Block, state *state.StateDB, engi if cm.config.Parlia != nil { header.WithdrawalsHash = &types.EmptyWithdrawalsHash } - if cm.config.Parlia == nil { + if cm.config.Parlia == nil || cm.config.IsBohr(header.Number, header.Time) { header.ParentBeaconRoot = new(common.Hash) } } @@ -621,6 +621,10 @@ func (cm *chainMaker) GetHighestVerifiedHeader() *types.Header { panic("not supported") } +func (cm *chainMaker) GetVerifiedBlockByHash(hash common.Hash) *types.Header { + return cm.GetHeaderByHash(hash) +} + func (cm *chainMaker) ChasingHead() *types.Header { panic("not supported") } diff --git a/core/events.go b/core/events.go index ce8bcca744..ff69cfb4a9 100644 --- a/core/events.go +++ b/core/events.go @@ -50,3 +50,5 @@ type ChainSideEvent struct { } type ChainHeadEvent struct{ Block *types.Block } + +type HighestVerifiedBlockEvent struct{ Header *types.Header } diff --git a/core/forkchoice.go b/core/forkchoice.go index 3be956068d..4e931ccf50 100644 --- a/core/forkchoice.go +++ b/core/forkchoice.go @@ -86,9 +86,16 @@ func (f *ForkChoice) ReorgNeeded(current *types.Header, extern *types.Header) (b localTD = f.chain.GetTd(current.Hash(), current.Number.Uint64()) externTd = f.chain.GetTd(extern.Hash(), extern.Number.Uint64()) ) - if localTD == nil || externTd == nil { + if localTD == nil { return false, errors.New("missing td") } + if externTd == nil { + ptd := f.chain.GetTd(extern.ParentHash, extern.Number.Uint64()-1) + if ptd == nil { + return false, consensus.ErrUnknownAncestor + } + externTd = new(big.Int).Add(ptd, extern.Difficulty) + } // Accept the new header as the chain head if the transition // is already triggered. We assume all the headers after the // transition come from the trusted consensus layer. @@ -114,9 +121,19 @@ func (f *ForkChoice) ReorgNeeded(current *types.Header, extern *types.Header) (b if f.preserve != nil { currentPreserve, externPreserve = f.preserve(current), f.preserve(extern) } - reorg = !currentPreserve && (externPreserve || - extern.Time < current.Time || - extern.Time == current.Time && f.rand.Float64() < 0.5) + choiceRules := func() bool { + if extern.Time == current.Time { + doubleSign := (extern.Coinbase == current.Coinbase) + if doubleSign { + return extern.Hash().Cmp(current.Hash()) < 0 + } else { + return f.rand.Float64() < 0.5 + } + } else { + return extern.Time < current.Time + } + } + reorg = !currentPreserve && (externPreserve || choiceRules()) } return reorg, nil } diff --git a/core/genesis.go b/core/genesis.go index d6aae918fa..60d45f86ae 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -216,10 +216,9 @@ func (e *GenesisMismatchError) Error() string { // ChainOverrides contains the changes to chain config // Typically, these modifications involve hardforks that are not enabled on the BSC mainnet, intended for testing purposes. type ChainOverrides struct { - OverrideCancun *uint64 - OverrideHaber *uint64 - OverrideBohr *uint64 - OverrideVerkle *uint64 + OverridePassedForkTime *uint64 + OverrideBohr *uint64 + OverrideVerkle *uint64 } // SetupGenesisBlock writes or updates the genesis block in db. @@ -245,11 +244,14 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *triedb.Database, g } applyOverrides := func(config *params.ChainConfig) { if config != nil { - if overrides != nil && overrides.OverrideCancun != nil { - config.CancunTime = overrides.OverrideCancun - } - if overrides != nil && overrides.OverrideHaber != nil { - config.HaberTime = overrides.OverrideHaber + if overrides != nil && overrides.OverridePassedForkTime != nil { + config.ShanghaiTime = overrides.OverridePassedForkTime + config.KeplerTime = overrides.OverridePassedForkTime + config.FeynmanTime = overrides.OverridePassedForkTime + config.FeynmanFixTime = overrides.OverridePassedForkTime + config.CancunTime = overrides.OverridePassedForkTime + config.HaberTime = overrides.OverridePassedForkTime + config.HaberFixTime = overrides.OverridePassedForkTime } if overrides != nil && overrides.OverrideBohr != nil { config.BohrTime = overrides.OverrideBohr @@ -452,7 +454,7 @@ func (g *Genesis) ToBlock() *types.Block { // EIP-4788: The parentBeaconBlockRoot of the genesis block is always // the zero hash. This is because the genesis block does not have a parent // by definition. - if conf.Parlia == nil { + if conf.Parlia == nil || conf.IsBohr(num, g.Timestamp) { head.ParentBeaconRoot = new(common.Hash) } diff --git a/core/headerchain.go b/core/headerchain.go index 38d07d8265..0d7f7f857d 100644 --- a/core/headerchain.go +++ b/core/headerchain.go @@ -428,6 +428,10 @@ func (hc *HeaderChain) GetHighestVerifiedHeader() *types.Header { return nil } +func (hc *HeaderChain) GetVerifiedBlockByHash(hash common.Hash) *types.Header { + return hc.GetHeaderByHash(hash) +} + func (hc *HeaderChain) ChasingHead() *types.Header { return nil } @@ -684,7 +688,7 @@ func (hc *HeaderChain) setHead(headBlock uint64, headTime uint64, updateFn Updat // we don't end up with dangling daps in the database var nums []uint64 if origin { - for n := num + 1; len(rawdb.ReadAllHashes(hc.chainDb, n)) > 0; n++ { + for n := num + 1; len(rawdb.ReadAllHashes(hc.chainDb.BlockStore(), n)) > 0; n++ { nums = append([]uint64{n}, nums...) // suboptimal, but we don't really expect this path } origin = false @@ -694,7 +698,7 @@ func (hc *HeaderChain) setHead(headBlock uint64, headTime uint64, updateFn Updat // Remove the related data from the database on all sidechains for _, num := range nums { // Gather all the side fork hashes - hashes := rawdb.ReadAllHashes(hc.chainDb, num) + hashes := rawdb.ReadAllHashes(hc.chainDb.BlockStore(), num) if len(hashes) == 0 { // No hashes in the database whatsoever, probably frozen already hashes = append(hashes, hdr.Hash()) diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index a96376d344..af3cb01cee 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -34,6 +34,15 @@ import ( "golang.org/x/exp/slices" ) +// Support Multi-Database Based on Data Pattern, the Chaindata will be divided into three stores: BlockStore, StateStore, and ChainStore, +// according to data schema and read/write behavior. When using the following data interfaces, you should take note of the following: +// +// 1) Block-Related Data: For CanonicalHash, Header, Body, Td, Receipts, and BlobSidecars, the Write, Delete, and Iterator +// operations should carefully ensure that the database being used is BlockStore. +// 2) Meta-Related Data: For HeaderNumber, HeadHeaderHash, HeadBlockHash, HeadFastBlockHash, and FinalizedBlockHash, the +// Write and Delete operations should carefully ensure that the database being used is BlockStore. +// 3) Ancient Data: When using a multi-database, Ancient data will use the BlockStore. + // ReadCanonicalHash retrieves the hash assigned to a canonical block number. func ReadCanonicalHash(db ethdb.Reader, number uint64) common.Hash { var data []byte @@ -144,8 +153,8 @@ func ReadAllCanonicalHashes(db ethdb.Iteratee, from uint64, to uint64, limit int } // ReadHeaderNumber returns the header number assigned to a hash. -func ReadHeaderNumber(db ethdb.KeyValueReader, hash common.Hash) *uint64 { - data, _ := db.Get(headerNumberKey(hash)) +func ReadHeaderNumber(db ethdb.MultiDatabaseReader, hash common.Hash) *uint64 { + data, _ := db.BlockStoreReader().Get(headerNumberKey(hash)) if len(data) != 8 { return nil } @@ -170,8 +179,8 @@ func DeleteHeaderNumber(db ethdb.KeyValueWriter, hash common.Hash) { } // ReadHeadHeaderHash retrieves the hash of the current canonical head header. -func ReadHeadHeaderHash(db ethdb.KeyValueReader) common.Hash { - data, _ := db.Get(headHeaderKey) +func ReadHeadHeaderHash(db ethdb.MultiDatabaseReader) common.Hash { + data, _ := db.BlockStoreReader().Get(headHeaderKey) if len(data) == 0 { return common.Hash{} } @@ -186,8 +195,8 @@ func WriteHeadHeaderHash(db ethdb.KeyValueWriter, hash common.Hash) { } // ReadHeadBlockHash retrieves the hash of the current canonical head block. -func ReadHeadBlockHash(db ethdb.KeyValueReader) common.Hash { - data, _ := db.Get(headBlockKey) +func ReadHeadBlockHash(db ethdb.MultiDatabaseReader) common.Hash { + data, _ := db.BlockStoreReader().Get(headBlockKey) if len(data) == 0 { return common.Hash{} } @@ -202,8 +211,8 @@ func WriteHeadBlockHash(db ethdb.KeyValueWriter, hash common.Hash) { } // ReadHeadFastBlockHash retrieves the hash of the current fast-sync head block. -func ReadHeadFastBlockHash(db ethdb.KeyValueReader) common.Hash { - data, _ := db.Get(headFastBlockKey) +func ReadHeadFastBlockHash(db ethdb.MultiDatabaseReader) common.Hash { + data, _ := db.BlockStoreReader().Get(headFastBlockKey) if len(data) == 0 { return common.Hash{} } @@ -218,8 +227,8 @@ func WriteHeadFastBlockHash(db ethdb.KeyValueWriter, hash common.Hash) { } // ReadFinalizedBlockHash retrieves the hash of the finalized block. -func ReadFinalizedBlockHash(db ethdb.KeyValueReader) common.Hash { - data, _ := db.Get(headFinalizedBlockKey) +func ReadFinalizedBlockHash(db ethdb.MultiDatabaseReader) common.Hash { + data, _ := db.BlockStoreReader().Get(headFinalizedBlockKey) if len(data) == 0 { return common.Hash{} } @@ -297,7 +306,7 @@ func ReadHeaderRange(db ethdb.Reader, number uint64, count uint64) []rlp.RawValu // It's ok to request block 0, 1 item count = number + 1 } - limit, _ := db.Ancients() + limit, _ := db.BlockStoreReader().Ancients() // First read live blocks if i >= limit { // If we need to read live blocks, we need to figure out the hash first @@ -317,7 +326,7 @@ func ReadHeaderRange(db ethdb.Reader, number uint64, count uint64) []rlp.RawValu return rlpHeaders } // read remaining from ancients, cap at 2M - data, err := db.AncientRange(ChainFreezerHeaderTable, i+1-count, count, 2*1024*1024) + data, err := db.BlockStoreReader().AncientRange(ChainFreezerHeaderTable, i+1-count, count, 2*1024*1024) if err != nil { log.Error("Failed to read headers from freezer", "err", err) return rlpHeaders @@ -468,7 +477,7 @@ func ReadCanonicalBodyRLP(db ethdb.Reader, number uint64) rlp.RawValue { // Block is not in ancients, read from leveldb by hash and number. // Note: ReadCanonicalHash cannot be used here because it also // calls ReadAncients internally. - hash, _ := db.Get(headerHashKey(number)) + hash, _ := db.BlockStoreReader().Get(headerHashKey(number)) data, _ = db.BlockStoreReader().Get(blockBodyKey(number, common.BytesToHash(hash))) return nil }) @@ -516,6 +525,13 @@ func WriteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64, body *t WriteBodyRLP(db, hash, number, data) } +// DeleteBody removes all block body data associated with a hash. +func DeleteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { + if err := db.Delete(blockBodyKey(number, hash)); err != nil { + log.Crit("Failed to delete block body", "err", err) + } +} + func WriteDiffLayer(db ethdb.KeyValueWriter, hash common.Hash, layer *types.DiffLayer) { data, err := rlp.EncodeToBytes(layer) if err != nil { @@ -554,13 +570,6 @@ func DeleteDiffLayer(db ethdb.KeyValueWriter, blockHash common.Hash) { } } -// DeleteBody removes all block body data associated with a hash. -func DeleteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { - if err := db.Delete(blockBodyKey(number, hash)); err != nil { - log.Crit("Failed to delete block body", "err", err) - } -} - // ReadTdRLP retrieves a block's total difficulty corresponding to the hash in RLP encoding. func ReadTdRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { var data []byte @@ -884,7 +893,7 @@ func WriteAncientBlocks(db ethdb.AncientWriter, blocks []*types.Block, receipts // ReadBlobSidecarsRLP retrieves all the transaction blobs belonging to a block in RLP encoding. func ReadBlobSidecarsRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { var data []byte - db.ReadAncients(func(reader ethdb.AncientReaderOp) error { + db.BlockStoreReader().ReadAncients(func(reader ethdb.AncientReaderOp) error { // Check if the data is in ancients if isCanon(reader, number, hash) { data, _ = reader.Ancient(ChainFreezerBlobSidecarTable, number) @@ -1093,24 +1102,24 @@ func FindCommonAncestor(db ethdb.Reader, a, b *types.Header) *types.Header { // ReadHeadHeader returns the current canonical head header. func ReadHeadHeader(db ethdb.Reader) *types.Header { - headHeaderHash := ReadHeadHeaderHash(db.BlockStoreReader()) + headHeaderHash := ReadHeadHeaderHash(db) if headHeaderHash == (common.Hash{}) { return nil } - headHeaderNumber := ReadHeaderNumber(db.BlockStoreReader(), headHeaderHash) + headHeaderNumber := ReadHeaderNumber(db, headHeaderHash) if headHeaderNumber == nil { return nil } - return ReadHeader(db.BlockStoreReader(), headHeaderHash, *headHeaderNumber) + return ReadHeader(db, headHeaderHash, *headHeaderNumber) } // ReadHeadBlock returns the current canonical head block. func ReadHeadBlock(db ethdb.Reader) *types.Block { - headBlockHash := ReadHeadBlockHash(db.BlockStoreReader()) + headBlockHash := ReadHeadBlockHash(db) if headBlockHash == (common.Hash{}) { return nil } - headBlockNumber := ReadHeaderNumber(db.BlockStoreReader(), headBlockHash) + headBlockNumber := ReadHeaderNumber(db, headBlockHash) if headBlockNumber == nil { return nil } diff --git a/core/rawdb/accessors_indexes.go b/core/rawdb/accessors_indexes.go index 95fc1d7806..4f2ef0a880 100644 --- a/core/rawdb/accessors_indexes.go +++ b/core/rawdb/accessors_indexes.go @@ -42,7 +42,7 @@ func ReadTxLookupEntry(db ethdb.Reader, hash common.Hash) *uint64 { } // Database v4-v5 tx lookup format just stores the hash if len(data) == common.HashLength { - return ReadHeaderNumber(db.BlockStoreReader(), common.BytesToHash(data)) + return ReadHeaderNumber(db, common.BytesToHash(data)) } // Finally try database v3 tx lookup format var entry LegacyTxLookupEntry diff --git a/core/rawdb/ancient_utils.go b/core/rawdb/ancient_utils.go index 1df7ec9082..33e1e02bfc 100644 --- a/core/rawdb/ancient_utils.go +++ b/core/rawdb/ancient_utils.go @@ -18,6 +18,8 @@ package rawdb import ( "fmt" + "io" + "os" "path/filepath" "github.com/ethereum/go-ethereum/common" @@ -98,6 +100,18 @@ func inspectFreezers(db ethdb.Database) ([]freezerInfo, error) { if err != nil { return nil, err } + + file, err := os.Open(filepath.Join(datadir, StateFreezerName)) + if err != nil { + return nil, err + } + defer file.Close() + // if state freezer folder has been pruned, there is no need for inspection + _, err = file.Readdirnames(1) + if err == io.EOF { + continue + } + f, err := NewStateFreezer(datadir, true, 0) if err != nil { return nil, err diff --git a/core/rawdb/chain_freezer.go b/core/rawdb/chain_freezer.go index 31dd80c320..3a18281100 100644 --- a/core/rawdb/chain_freezer.go +++ b/core/rawdb/chain_freezer.go @@ -58,7 +58,8 @@ type chainFreezer struct { wg sync.WaitGroup trigger chan chan struct{} // Manual blocking freeze trigger, test determinism - freezeEnv atomic.Value + freezeEnv atomic.Value + waitEnvTimes int multiDatabase bool } @@ -91,7 +92,7 @@ func (f *chainFreezer) Close() error { // readHeadNumber returns the number of chain head block. 0 is returned if the // block is unknown or not available yet. -func (f *chainFreezer) readHeadNumber(db ethdb.KeyValueReader) uint64 { +func (f *chainFreezer) readHeadNumber(db ethdb.Reader) uint64 { hash := ReadHeadBlockHash(db) if hash == (common.Hash{}) { log.Error("Head block is not reachable") @@ -107,7 +108,7 @@ func (f *chainFreezer) readHeadNumber(db ethdb.KeyValueReader) uint64 { // readFinalizedNumber returns the number of finalized block. 0 is returned // if the block is unknown or not available yet. -func (f *chainFreezer) readFinalizedNumber(db ethdb.KeyValueReader) uint64 { +func (f *chainFreezer) readFinalizedNumber(db ethdb.Reader) uint64 { hash := ReadFinalizedBlockHash(db) if hash == (common.Hash{}) { return 0 @@ -122,7 +123,7 @@ func (f *chainFreezer) readFinalizedNumber(db ethdb.KeyValueReader) uint64 { // freezeThreshold returns the threshold for chain freezing. It's determined // by formula: max(finality, HEAD-params.FullImmutabilityThreshold). -func (f *chainFreezer) freezeThreshold(db ethdb.KeyValueReader) (uint64, error) { +func (f *chainFreezer) freezeThreshold(db ethdb.Reader) (uint64, error) { var ( head = f.readHeadNumber(db) final = f.readFinalizedNumber(db) @@ -178,19 +179,6 @@ func (f *chainFreezer) freeze(db ethdb.KeyValueStore) { } } - // check freezer env first, it must wait a while when the env is necessary - err := f.checkFreezerEnv() - if err == missFreezerEnvErr { - log.Warn("Freezer need related env, may wait for a while", "err", err) - backoff = true - continue - } - if err != nil { - log.Error("Freezer check FreezerEnv err", "err", err) - backoff = true - continue - } - var ( frozen uint64 threshold uint64 @@ -200,6 +188,7 @@ func (f *chainFreezer) freeze(db ethdb.KeyValueStore) { hash common.Hash number *uint64 head *types.Header + err error ) // use finalized block as the chain freeze indicator was used for multiDatabase feature, if multiDatabase is false, keep 9W blocks in db @@ -282,6 +271,18 @@ func (f *chainFreezer) freeze(db ethdb.KeyValueStore) { last = first + freezerBatchLimit } } + + // check env first before chain freeze, it must wait when the env is necessary + if err := f.checkFreezerEnv(); err != nil { + f.waitEnvTimes++ + if f.waitEnvTimes%30 == 0 { + log.Warn("Freezer need related env, may wait for a while, and it's not a issue when non-import block", "err", err) + return + } + backoff = true + continue + } + // Seems we have data ready to be frozen, process in usable batches var ( start = time.Now() @@ -544,14 +545,7 @@ func (f *chainFreezer) checkFreezerEnv() error { if exist { return nil } - blobFrozen, err := f.TableAncients(ChainFreezerBlobSidecarTable) - if err != nil { - return err - } - if blobFrozen > 0 { - return missFreezerEnvErr - } - return nil + return missFreezerEnvErr } func isCancun(env *ethdb.FreezerEnv, num *big.Int, time uint64) bool { diff --git a/core/rawdb/chain_iterator.go b/core/rawdb/chain_iterator.go index 3870401085..f82df9d969 100644 --- a/core/rawdb/chain_iterator.go +++ b/core/rawdb/chain_iterator.go @@ -35,16 +35,16 @@ import ( // injects into the database the block hash->number mappings. func InitDatabaseFromFreezer(db ethdb.Database) { // If we can't access the freezer or it's empty, abort - frozen, err := db.ItemAmountInAncient() + frozen, err := db.BlockStore().ItemAmountInAncient() if err != nil || frozen == 0 { return } var ( - batch = db.NewBatch() + batch = db.BlockStore().NewBatch() start = time.Now() logged = start.Add(-7 * time.Second) // Unindex during import is fast, don't double log hash common.Hash - offset = db.AncientOffSet() + offset = db.BlockStore().AncientOffSet() ) for i := uint64(0) + offset; i < frozen+offset; i++ { // We read 100K hashes at a time, for a total of 3.2M @@ -52,7 +52,7 @@ func InitDatabaseFromFreezer(db ethdb.Database) { if i+count > frozen+offset { count = frozen + offset - i } - data, err := db.AncientRange(ChainFreezerHashTable, i, count, 32*count) + data, err := db.BlockStore().AncientRange(ChainFreezerHashTable, i, count, 32*count) if err != nil { log.Crit("Failed to init database from freezer", "err", err) } @@ -100,7 +100,7 @@ func iterateTransactions(db ethdb.Database, from uint64, to uint64, reverse bool number uint64 rlp rlp.RawValue } - if offset := db.AncientOffSet(); offset > from { + if offset := db.BlockStore().AncientOffSet(); offset > from { from = offset } if to <= from { @@ -122,7 +122,7 @@ func iterateTransactions(db ethdb.Database, from uint64, to uint64, reverse bool } defer close(rlpCh) for n != end { - data := ReadCanonicalBodyRLP(db.BlockStore(), n) + data := ReadCanonicalBodyRLP(db, n) // Feed the block to the aggregator, or abort on interrupt select { case rlpCh <- &numberRlp{n, data}: @@ -187,7 +187,7 @@ func iterateTransactions(db ethdb.Database, from uint64, to uint64, reverse bool // signal received. func indexTransactions(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}, hook func(uint64) bool, report bool) { // short circuit for invalid range - if offset := db.AncientOffSet(); offset > from { + if offset := db.BlockStore().AncientOffSet(); offset > from { from = offset } if from >= to { @@ -286,7 +286,7 @@ func indexTransactionsForTesting(db ethdb.Database, from uint64, to uint64, inte // signal received. func unindexTransactions(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}, hook func(uint64) bool, report bool) { // short circuit for invalid range - if offset := db.AncientOffSet(); offset > from { + if offset := db.BlockStore().AncientOffSet(); offset > from { from = offset } if from >= to { diff --git a/core/rawdb/database.go b/core/rawdb/database.go index ad4e3f81c0..5049ade332 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -61,8 +61,10 @@ func (frdb *freezerdb) BlockStoreReader() ethdb.Reader { } func (frdb *freezerdb) BlockStoreWriter() ethdb.Writer { - // TODO implement me - panic("implement me") + if frdb.blockStore == nil { + return frdb + } + return frdb.blockStore } // AncientDatadir returns the path of root ancient directory. @@ -116,6 +118,13 @@ func (frdb *freezerdb) StateStore() ethdb.Database { return frdb.stateStore } +func (frdb *freezerdb) GetStateStore() ethdb.Database { + if frdb.stateStore != nil { + return frdb.stateStore + } + return frdb +} + func (frdb *freezerdb) SetStateStore(state ethdb.Database) { if frdb.stateStore != nil { frdb.stateStore.Close() @@ -254,6 +263,13 @@ func (db *nofreezedb) SetStateStore(state ethdb.Database) { db.stateStore = state } +func (db *nofreezedb) GetStateStore() ethdb.Database { + if db.stateStore != nil { + return db.stateStore + } + return db +} + func (db *nofreezedb) StateStoreReader() ethdb.Reader { if db.stateStore != nil { return db.stateStore @@ -403,6 +419,7 @@ func (db *emptyfreezedb) Sync() error { func (db *emptyfreezedb) DiffStore() ethdb.KeyValueStore { return db } func (db *emptyfreezedb) SetDiffStore(diff ethdb.KeyValueStore) {} func (db *emptyfreezedb) StateStore() ethdb.Database { return db } +func (db *emptyfreezedb) GetStateStore() ethdb.Database { return db } func (db *emptyfreezedb) SetStateStore(state ethdb.Database) {} func (db *emptyfreezedb) StateStoreReader() ethdb.Reader { return db } func (db *emptyfreezedb) BlockStore() ethdb.Database { return db } @@ -518,8 +535,17 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, ancient string, namespace st // Create the idle freezer instance frdb, err := newChainFreezer(resolveChainFreezerDir(ancient), namespace, readonly, offset, multiDatabase) + + // We are creating the freezerdb here because the validation logic for db and freezer below requires certain interfaces + // that need a database type. Therefore, we are pre-creating it for subsequent use. + freezerDb := &freezerdb{ + ancientRoot: ancient, + KeyValueStore: db, + AncientStore: frdb, + AncientFreezer: frdb, + } if err != nil { - printChainMetadata(db) + printChainMetadata(freezerDb) return nil, err } @@ -555,10 +581,10 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, ancient string, namespace st // the freezer and the key-value store. frgenesis, err := frdb.Ancient(ChainFreezerHashTable, 0) if err != nil { - printChainMetadata(db) + printChainMetadata(freezerDb) return nil, fmt.Errorf("failed to retrieve genesis from ancient %v", err) } else if !bytes.Equal(kvgenesis, frgenesis) { - printChainMetadata(db) + printChainMetadata(freezerDb) return nil, fmt.Errorf("genesis mismatch: %#x (leveldb) != %#x (ancients)", kvgenesis, frgenesis) } // Key-value store and freezer belong to the same network. Ensure that they @@ -566,7 +592,7 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, ancient string, namespace st if kvhash, _ := db.Get(headerHashKey(frozen)); len(kvhash) == 0 { // Subsequent header after the freezer limit is missing from the database. // Reject startup if the database has a more recent head. - if head := *ReadHeaderNumber(db, ReadHeadHeaderHash(db)); head > frozen-1 { + if head := *ReadHeaderNumber(freezerDb, ReadHeadHeaderHash(freezerDb)); head > frozen-1 { // Find the smallest block stored in the key-value store // in range of [frozen, head] var number uint64 @@ -576,7 +602,7 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, ancient string, namespace st } } // We are about to exit on error. Print database metadata before exiting - printChainMetadata(db) + printChainMetadata(freezerDb) return nil, fmt.Errorf("gap in the chain between ancients [0 - #%d] and leveldb [#%d - #%d] ", frozen-1, number, head) } @@ -591,11 +617,11 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, ancient string, namespace st // store, otherwise we'll end up missing data. We check block #1 to decide // if we froze anything previously or not, but do take care of databases with // only the genesis block. - if ReadHeadHeaderHash(db) != common.BytesToHash(kvgenesis) { + if ReadHeadHeaderHash(freezerDb) != common.BytesToHash(kvgenesis) { // Key-value store contains more data than the genesis block, make sure we // didn't freeze anything yet. if kvblob, _ := db.Get(headerHashKey(1)); len(kvblob) == 0 { - printChainMetadata(db) + printChainMetadata(freezerDb) return nil, errors.New("ancient chain segments already extracted, please set --datadir.ancient to the correct path") } // Block #1 is still in the database, we're allowed to init a new freezer @@ -617,12 +643,7 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, ancient string, namespace st frdb.wg.Done() }() } - return &freezerdb{ - ancientRoot: ancient, - KeyValueStore: db, - AncientStore: frdb, - AncientFreezer: frdb, - }, nil + return freezerDb, nil } // NewMemoryDatabase creates an ephemeral in-memory key-value database without a @@ -1238,7 +1259,7 @@ func DeleteTrieState(db ethdb.Database) error { } // printChainMetadata prints out chain metadata to stderr. -func printChainMetadata(db ethdb.KeyValueStore) { +func printChainMetadata(db ethdb.Reader) { fmt.Fprintf(os.Stderr, "Chain metadata\n") for _, v := range ReadChainMetadata(db) { fmt.Fprintf(os.Stderr, " %s\n", strings.Join(v, ": ")) @@ -1249,7 +1270,7 @@ func printChainMetadata(db ethdb.KeyValueStore) { // ReadChainMetadata returns a set of key/value pairs that contains information // about the database chain status. This can be used for diagnostic purposes // when investigating the state of the node. -func ReadChainMetadata(db ethdb.KeyValueStore) [][]string { +func ReadChainMetadata(db ethdb.Reader) [][]string { pp := func(val *uint64) string { if val == nil { return "" @@ -1271,26 +1292,3 @@ func ReadChainMetadata(db ethdb.KeyValueStore) [][]string { } return data } - -func ReadChainMetadataFromMultiDatabase(db ethdb.Database) [][]string { - pp := func(val *uint64) string { - if val == nil { - return "" - } - return fmt.Sprintf("%d (%#x)", *val, *val) - } - data := [][]string{ - {"databaseVersion", pp(ReadDatabaseVersion(db))}, - {"headBlockHash", fmt.Sprintf("%v", ReadHeadBlockHash(db.BlockStore()))}, - {"headFastBlockHash", fmt.Sprintf("%v", ReadHeadFastBlockHash(db.BlockStore()))}, - {"headHeaderHash", fmt.Sprintf("%v", ReadHeadHeaderHash(db.BlockStore()))}, - {"lastPivotNumber", pp(ReadLastPivotNumber(db))}, - {"len(snapshotSyncStatus)", fmt.Sprintf("%d bytes", len(ReadSnapshotSyncStatus(db)))}, - {"snapshotDisabled", fmt.Sprintf("%v", ReadSnapshotDisabled(db))}, - {"snapshotJournal", fmt.Sprintf("%d bytes", len(ReadSnapshotJournal(db)))}, - {"snapshotRecoveryNumber", pp(ReadSnapshotRecoveryNumber(db))}, - {"snapshotRoot", fmt.Sprintf("%v", ReadSnapshotRoot(db))}, - {"txIndexTail", pp(ReadTxIndexTail(db))}, - } - return data -} diff --git a/core/rawdb/freezer.go b/core/rawdb/freezer.go index e1dc46bde3..dbdb7c937e 100644 --- a/core/rawdb/freezer.go +++ b/core/rawdb/freezer.go @@ -541,41 +541,6 @@ func gcKvStore(db ethdb.KeyValueStore, ancients []common.Hash, first uint64, fro } batch.Reset() - // Step into the future and delete and dangling side chains - if frozen > 0 { - tip := frozen - nfdb := &nofreezedb{KeyValueStore: db} - for len(dangling) > 0 { - drop := make(map[common.Hash]struct{}) - for _, hash := range dangling { - log.Debug("Dangling parent from freezer", "number", tip-1, "hash", hash) - drop[hash] = struct{}{} - } - children := ReadAllHashes(db, tip) - for i := 0; i < len(children); i++ { - // Dig up the child and ensure it's dangling - child := ReadHeader(nfdb, children[i], tip) - if child == nil { - log.Error("Missing dangling header", "number", tip, "hash", children[i]) - continue - } - if _, ok := drop[child.ParentHash]; !ok { - children = append(children[:i], children[i+1:]...) - i-- - continue - } - // Delete all block data associated with the child - log.Debug("Deleting dangling block", "number", tip, "hash", children[i], "parent", child.ParentHash) - DeleteBlock(batch, children[i], tip) - } - dangling = children - tip++ - } - if err := batch.Write(); err != nil { - log.Crit("Failed to delete dangling side blocks", "err", err) - } - } - // Log something friendly for the user context := []interface{}{ "blocks", frozen - first, "elapsed", common.PrettyDuration(time.Since(start)), "number", frozen - 1, diff --git a/core/rawdb/freezer_table.go b/core/rawdb/freezer_table.go index 2158bc4b0e..74152ee7be 100644 --- a/core/rawdb/freezer_table.go +++ b/core/rawdb/freezer_table.go @@ -127,6 +127,11 @@ func newFreezerTable(path, name string, disableSnappy, readonly bool) (*freezerT return newTable(path, name, metrics.NilMeter{}, metrics.NilMeter{}, metrics.NilGauge{}, freezerTableSize, disableSnappy, readonly) } +// newAdditionTable opens the given path as a addition table. +func newAdditionTable(path, name string, disableSnappy, readonly bool) (*freezerTable, error) { + return openAdditionTable(path, name, metrics.NilMeter{}, metrics.NilMeter{}, metrics.NilGauge{}, freezerTableSize, disableSnappy, readonly) +} + // newTable opens a freezer table, creating the data and index files if they are // non-existent. Both files are truncated to the shortest common length to ensure // they don't go out of sync. diff --git a/core/rawdb/prunedfreezer.go b/core/rawdb/prunedfreezer.go index 51c7729758..c772ca7630 100644 --- a/core/rawdb/prunedfreezer.go +++ b/core/rawdb/prunedfreezer.go @@ -8,6 +8,8 @@ import ( "sync/atomic" "time" + "golang.org/x/exp/slices" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" @@ -68,26 +70,43 @@ func newPrunedFreezer(datadir string, db ethdb.KeyValueStore, offset uint64) (*p func (f *prunedfreezer) repair(datadir string) error { offset := atomic.LoadUint64(&f.frozen) // compatible freezer - min := uint64(math.MaxUint64) + minItems := uint64(math.MaxUint64) for name, disableSnappy := range chainFreezerNoSnappy { - table, err := newFreezerTable(datadir, name, disableSnappy, false) + var ( + table *freezerTable + err error + ) + if slices.Contains(additionTables, name) { + table, err = newAdditionTable(datadir, name, disableSnappy, false) + } else { + table, err = newFreezerTable(datadir, name, disableSnappy, false) + } if err != nil { return err } + // addition tables only align head + if slices.Contains(additionTables, name) { + if EmptyTable(table) { + continue + } + } items := table.items.Load() - if min > items { - min = items + if minItems > items { + minItems = items } table.Close() } - log.Info("Read ancientdb item counts", "items", min) - offset += min - if frozen := ReadFrozenOfAncientFreezer(f.db); frozen > offset { - offset = frozen - } + // If the dataset has undergone a prune block, the offset is a non-zero value, otherwise the offset is a zero value. + // The minItems is the value relative to offset + offset += minItems - atomic.StoreUint64(&f.frozen, offset) + // FrozenOfAncientFreezer is the progress of the last prune-freezer freeze. + frozenInDB := ReadFrozenOfAncientFreezer(f.db) + maxOffset := max(offset, frozenInDB) + log.Info("Read ancient db item counts", "items", minItems, "frozen", maxOffset) + + atomic.StoreUint64(&f.frozen, maxOffset) if err := f.Sync(); err != nil { return nil } @@ -138,12 +157,12 @@ func (f *prunedfreezer) AncientOffSet() uint64 { // MigrateTable processes the entries in a given table in sequence // converting them to a new format if they're of an old format. -func (db *prunedfreezer) MigrateTable(kind string, convert convertLegacyFn) error { +func (f *prunedfreezer) MigrateTable(kind string, convert convertLegacyFn) error { return errNotSupported } // AncientDatadir returns an error as we don't have a backing chain freezer. -func (db *prunedfreezer) AncientDatadir() (string, error) { +func (f *prunedfreezer) AncientDatadir() (string, error) { return "", errNotSupported } @@ -299,9 +318,8 @@ func (f *prunedfreezer) freeze() { log.Error("Append ancient err", "number", f.frozen, "hash", hash, "err", err) break } - if hash != (common.Hash{}) { - ancients = append(ancients, hash) - } + // may include common.Hash{}, will be delete in gcKvStore + ancients = append(ancients, hash) } // Batch of blocks have been frozen, flush them before wiping from leveldb if err := f.Sync(); err != nil { diff --git a/core/rawdb/table.go b/core/rawdb/table.go index c4a029bcad..7fc182b7c5 100644 --- a/core/rawdb/table.go +++ b/core/rawdb/table.go @@ -251,6 +251,10 @@ func (t *table) SetStateStore(state ethdb.Database) { panic("not implement") } +func (t *table) GetStateStore() ethdb.Database { + return nil +} + func (t *table) StateStoreReader() ethdb.Reader { return nil } diff --git a/core/state/statedb.go b/core/state/statedb.go index 95406ffba8..525da23b0f 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -933,8 +933,8 @@ func (s *StateDB) copyInternal(doPrefetch bool) *StateDB { // along with their original values. state.accounts = copySet(s.accounts) state.storages = copy2DSet(s.storages) - state.accountsOrigin = copySet(state.accountsOrigin) - state.storagesOrigin = copy2DSet(state.storagesOrigin) + state.accountsOrigin = copySet(s.accountsOrigin) + state.storagesOrigin = copy2DSet(s.storagesOrigin) // Deep copy the logs occurred in the scope of block for hash, logs := range s.logs { diff --git a/core/state/sync.go b/core/state/sync.go index 411b54eab0..2b07f1b061 100644 --- a/core/state/sync.go +++ b/core/state/sync.go @@ -25,7 +25,7 @@ import ( ) // NewStateSync creates a new state trie download scheduler. -func NewStateSync(root common.Hash, database ethdb.KeyValueReader, onLeaf func(keys [][]byte, leaf []byte) error, scheme string) *trie.Sync { +func NewStateSync(root common.Hash, database ethdb.Database, onLeaf func(keys [][]byte, leaf []byte) error, scheme string) *trie.Sync { // Register the storage slot callback if the external callback is specified. var onSlot func(keys [][]byte, path []byte, leaf []byte, parent common.Hash, parentPath []byte) error if onLeaf != nil { diff --git a/core/state/sync_test.go b/core/state/sync_test.go index adb3ff9495..211b0be9f6 100644 --- a/core/state/sync_test.go +++ b/core/state/sync_test.go @@ -268,7 +268,7 @@ func testIterativeStateSync(t *testing.T, count int, commit bool, bypath bool, s } } batch := dstDb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -369,7 +369,7 @@ func testIterativeDelayedStateSync(t *testing.T, scheme string) { nodeProcessed = len(nodeResults) } batch := dstDb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -469,7 +469,7 @@ func testIterativeRandomStateSync(t *testing.T, count int, scheme string) { } } batch := dstDb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -575,7 +575,7 @@ func testIterativeRandomDelayedStateSync(t *testing.T, scheme string) { } } batch := dstDb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -688,7 +688,7 @@ func testIncompleteStateSync(t *testing.T, scheme string) { } } batch := dstDb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() diff --git a/core/state_processor.go b/core/state_processor.go index 2af0d514fe..9ef227ccc2 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -231,6 +231,13 @@ func ApplyTransaction(config *params.ChainConfig, bc ChainContext, author *commo // ProcessBeaconBlockRoot applies the EIP-4788 system call to the beacon block root // contract. This method is exported to be used in tests. func ProcessBeaconBlockRoot(beaconRoot common.Hash, vmenv *vm.EVM, statedb *state.StateDB) { + // Return immediately if beaconRoot equals the zero hash when using the Parlia engine. + if beaconRoot == (common.Hash{}) { + if chainConfig := vmenv.ChainConfig(); chainConfig != nil && chainConfig.Parlia != nil { + return + } + } + // If EIP-4788 is enabled, we need to invoke the beaconroot storage contract with // the new root msg := &Message{ diff --git a/core/systemcontracts/bohr/chapel/StakeHubContract b/core/systemcontracts/bohr/chapel/StakeHubContract new file mode 100644 index 0000000000..16df0f4116 --- /dev/null +++ b/core/systemcontracts/bohr/chapel/StakeHubContract @@ -0,0 +1 @@ +608060405260043610620003ff5760003560e01c80638456cb59116200020f578063cbb04d9d1162000123578063e992aaf511620000ad578063f80a34021162000078578063f80a34021462000c98578063fb50b31f1462000cbd578063fc0c5ff11462000ce2578063ff69ab611462000cfa57600080fd5b8063e992aaf51462000c15578063efdbf0e11462000c2d578063f1f74d841462000c69578063f1fad1041462000c8157600080fd5b8063d8ca511f11620000ee578063d8ca511f1462000ba8578063daacdb661462000bc0578063dbda7fb31462000bd8578063e8f67c3b1462000bfd57600080fd5b8063cbb04d9d1462000b04578063d115a2061462000b45578063d6ca429d1462000b5e578063d7c2dfc81462000b8357600080fd5b8063ac43175111620001a5578063bff02e201162000170578063bff02e201462000a91578063c38fbec81462000ac7578063c473318f1462000aec578063c8509d8114620008e557600080fd5b8063ac4317511462000a0f578063b187bd261462000a34578063baa7199e1462000a54578063bdceadf31462000a7957600080fd5b80638cd22b2211620001e65780638cd22b22146200097a578063982ef0a7146200099f578063a43569b314620009b6578063aad3ec9614620009ea57600080fd5b80638456cb59146200090a57806386d5450614620009225780638a4d3fa8146200095c57600080fd5b806349f41a42116200031357806364028fbd116200029d57806375cc7d89116200026857806375cc7d89146200089057806376e7d6d614620008b55780638129fc1c14620008cd578063831d65d114620008e557600080fd5b806364028fbd14620007cb578063663706d314620007e25780636ec01b2714620008135780636f8e2fa4146200086b57600080fd5b80634e6fd6c411620002de5780634e6fd6c4146200073257806359491871146200074a5780635e7cc1c9146200076f57806363a036b5146200079457600080fd5b806349f41a4214620006995780634a49ac4c14620006be5780634bf6c88214620006e35780634d99dd16146200070d57600080fd5b80631fa8882b1162000395578063417c73a71162000360578063417c73a714620005e5578063449ecfe6146200060a57806345211bfd146200062f5780634838d165146200065457600080fd5b80631fa8882b14620005555780632b727c86146200056e5780632e8e8c7114620005935780633840998814620005cd57600080fd5b8063092193ab11620003d6578063092193ab14620004a05780630e9fbf5114620004b75780631182b87514620004dc57806317b4f353146200051057600080fd5b8063046f7da2146200041f578063059ddd2214620004375780630661806e146200047957600080fd5b366200041a5760345460ff166001146200041857600080fd5b005b600080fd5b3480156200042c57600080fd5b506200041862000d12565b3480156200044457600080fd5b506200045c620004563660046200991e565b62000da4565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200048657600080fd5b506200049160365481565b60405190815260200162000470565b62000418620004b13660046200991e565b620011cc565b348015620004c457600080fd5b5062000418620004d636600462009982565b6200181d565b348015620004e957600080fd5b5062000501620004fb366004620099c7565b62001b49565b60405162000470919062009a7a565b3480156200051d57600080fd5b506200045c6200052f36600462009b70565b80516020818301810180516045825292820191909301209152546001600160a01b031681565b3480156200056257600080fd5b50620004916201518081565b3480156200057b57600080fd5b506200045c6200058d3660046200991e565b62001ebc565b348015620005a057600080fd5b506200045c620005b23660046200991e565b604d602052600090815260409020546001600160a01b031681565b348015620005da57600080fd5b506200049160375481565b348015620005f257600080fd5b5062000418620006043660046200991e565b62001f11565b3480156200061757600080fd5b5062000418620006293660046200991e565b62001f93565b3480156200063c57600080fd5b50620004186200064e3660046200991e565b62002178565b3480156200066157600080fd5b5062000688620006733660046200991e565b60016020526000908152604090205460ff1681565b604051901515815260200162000470565b348015620006a657600080fd5b5062000418620006b83660046200991e565b62002377565b348015620006cb57600080fd5b5062000418620006dd3660046200991e565b62002593565b348015620006f057600080fd5b50620006fa600881565b60405160ff909116815260200162000470565b3480156200071a57600080fd5b50620004186200072c36600462009bc5565b6200260f565b3480156200073f57600080fd5b506200045c61dead81565b3480156200075757600080fd5b50620004186200076936600462009c03565b62002c3f565b3480156200077c57600080fd5b50620004186200078e36600462009c73565b62003a38565b348015620007a157600080fd5b50620007b9620007b336600462009c93565b62003c62565b60405162000470949392919062009cfc565b62000418620007dc36600462009db8565b62004307565b348015620007ef57600080fd5b5062000491620008013660046200991e565b60446020526000908152604090205481565b3480156200082057600080fd5b5062000838620008323660046200991e565b6200498b565b6040805182516001600160401b039081168252602080850151821690830152928201519092169082015260600162000470565b3480156200087857600080fd5b50620005016200088a3660046200991e565b62004a30565b3480156200089d57600080fd5b5062000418620008af3660046200991e565b62004e5c565b348015620008c257600080fd5b5062000491603d5481565b348015620008da57600080fd5b50620004186200502e565b348015620008f257600080fd5b506200041862000904366004620099c7565b62005345565b3480156200091757600080fd5b5062000418620053af565b3480156200092f57600080fd5b506200045c620009413660046200991e565b6043602052600090815260409020546001600160a01b031681565b3480156200096957600080fd5b5062000491670de0b6b3a764000081565b3480156200098757600080fd5b50620004916200099936600462009bc5565b62005447565b62000418620009b036600462009e90565b62005500565b348015620009c357600080fd5b50620009db620009d53660046200991e565b62005b9d565b60405162000470919062009ece565b348015620009f757600080fd5b506200041862000a0936600462009bc5565b62005e8a565b34801562000a1c57600080fd5b506200041862000a2e36600462009f4b565b62005ef7565b34801562000a4157600080fd5b5060005462010000900460ff1662000688565b34801562000a6157600080fd5b506200041862000a733660046200a004565b62006d96565b34801562000a8657600080fd5b5062000491603c5481565b34801562000a9e57600080fd5b5062000ab662000ab036600462009c93565b62006f63565b60405162000470939291906200a060565b34801562000ad457600080fd5b506200041862000ae63660046200991e565b6200713f565b34801562000af957600080fd5b506200049160385481565b34801562000b1157600080fd5b5062000b2962000b233660046200991e565b62007401565b6040805193845291151560208401529082015260600162000470565b34801562000b5257600080fd5b5062000491620186a081565b34801562000b6b57600080fd5b506200041862000b7d3660046200a0bd565b62007844565b34801562000b9057600080fd5b506200041862000ba23660046200a1a6565b62007a6a565b34801562000bb557600080fd5b5062000491603b5481565b34801562000bcd57600080fd5b506200049160495481565b34801562000be557600080fd5b506200045c62000bf73660046200991e565b62007b60565b34801562000c0a57600080fd5b506200049160355481565b34801562000c2257600080fd5b5062000491603a5481565b34801562000c3a57600080fd5b506200049162000c4c36600462009b70565b805160208183018101805160468252928201919093012091525481565b34801562000c7657600080fd5b5062000491603e5481565b34801562000c8e57600080fd5b50620006fa601181565b34801562000ca557600080fd5b506200049162000cb736600462009bc5565b62007f8a565b34801562000cca57600080fd5b506200041862000cdc36600462009f4b565b62007ffb565b34801562000cef57600080fd5b506200049160395481565b34801562000d0757600080fd5b5062000491604a5481565b600054630100000090046001600160a01b0316331462000d45576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff1662000d6f57604051636cd6020160e01b815260040160405180910390fd5b6000805462ff0000191681556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f99190a1565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162000e0f906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462000e3d906200a20c565b801562000e8e5780601f1062000e625761010080835404028352916020019162000e8e565b820191906000526020600020905b81548152906001019060200180831162000e7057829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462000eb9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462000ee7906200a20c565b801562000f385780601f1062000f0c5761010080835404028352916020019162000f38565b820191906000526020600020905b81548152906001019060200180831162000f1a57829003601f168201915b5050505050815260200160018201805462000f53906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462000f81906200a20c565b801562000fd25780601f1062000fa65761010080835404028352916020019162000fd2565b820191906000526020600020905b81548152906001019060200180831162000fb457829003601f168201915b5050505050815260200160028201805462000fed906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200101b906200a20c565b80156200106c5780601f1062001040576101008083540402835291602001916200106c565b820191906000526020600020905b8154815290600101906020018083116200104e57829003601f168201915b5050505050815260200160038201805462001087906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620010b5906200a20c565b8015620011065780601f10620010da5761010080835404028352916020019162001106565b820191906000526020600020905b815481529060010190602001808311620010e857829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620011a5575050509190925250509051949350505050565b3361100014620011f857604051630f22c43960e41b815261100060048201526024015b60405180910390fd5b6001600160a01b0380821660009081526043602090815260408083205484168084526041835281842082516101808101845281548716815260018201548716948101949094526002810154909516918301919091526003840154606083015260048401805491949160808401919062001271906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200129f906200a20c565b8015620012f05780601f10620012c457610100808354040283529160200191620012f0565b820191906000526020600020905b815481529060010190602001808311620012d257829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200131b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462001349906200a20c565b80156200139a5780601f106200136e576101008083540402835291602001916200139a565b820191906000526020600020905b8154815290600101906020018083116200137c57829003601f168201915b50505050508152602001600182018054620013b5906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620013e3906200a20c565b8015620014345780601f10620014085761010080835404028352916020019162001434565b820191906000526020600020905b8154815290600101906020018083116200141657829003601f168201915b505050505081526020016002820180546200144f906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200147d906200a20c565b8015620014ce5780601f10620014a257610100808354040283529160200191620014ce565b820191906000526020600020905b815481529060010190602001808311620014b057829003601f168201915b50505050508152602001600382018054620014e9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462001517906200a20c565b8015620015685780601f106200153c5761010080835404028352916020019162001568565b820191906000526020600020905b8154815290600101906020018083116200154a57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162001607575050509190925250505060408101519091506001600160a01b031615806200164457508060e001515b156200170157604051611002903490600081818185875af1925050503d80600081146200168e576040519150601f19603f3d011682016040523d82523d6000602084013e62001693565b606091505b505050816001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d604051620016f49060208082526011908201527024a72b20a624a22fab20a624a220aa27a960791b604082015260600190565b60405180910390a2505050565b60408181015160c0830151519151632f303ebb60e11b81526001600160401b0390921660048301526001600160a01b031690635e607d769034906024016000604051808303818588803b1580156200175857600080fd5b505af11580156200176d573d6000803e3d6000fd5b5050505050816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea634604051620017ae91815260200190565b60405180910390a26040808201519051633041949b60e01b815261200591633041949b91620017e3919086906004016200a242565b600060405180830381600087803b158015620017fe57600080fd5b505af115801562001813573d6000803e3d6000fd5b5050505050505b50565b33611001146200184557604051630f22c43960e41b81526110016004820152602401620011ef565b60005462010000900460ff16156200187057604051631785c68160e01b815260040160405180910390fd5b600060458383604051620018869291906200a25c565b908152604051908190036020019020546001600160a01b03169050620018ae603f8262008265565b620018cc5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038116600090815260416020526040812090620018f462015180426200a282565b604a546000828152604b602052604090205491925011620019285760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b60205260408120805460019290620019499084906200a2a5565b90915550506040516046906200196390879087906200a25c565b908152602001604051809103902054600014158015620019b45750426201518060468787604051620019979291906200a25c565b908152602001604051809103902054620019b291906200a2a5565b105b15620019d357604051631898eb6b60e01b815260040160405180910390fd5b600080620019e385600262008288565b915091508162001a0657604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562001a59573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7f91906200a2bb565b905062001a8d858362008312565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600260405162001acd939291906200a2eb565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162001b0b916001600160a01b0316908a906004016200a242565b600060405180830381600087803b15801562001b2657600080fd5b505af115801562001b3b573d6000803e3d6000fd5b505050505050505050505050565b6060336120001462001b7357604051630f22c43960e41b81526120006004820152602401620011ef565b60005462010000900460ff161562001b9e57604051631785c68160e01b815260040160405180910390fd5b6034805460ff19166001179055604080516020601f8501819004810282018101909252838152600091829162001bef918790879081908401838280828437600092019190915250620084d992505050565b915091508062001c125760405163035ede3560e21b815260040160405180910390fd5b816060015160000362001c38575050604080516000815260208101909152905062001eab565b606082015160405163e04c83a760e01b81526000916110049163e04c83a79162001c689160040190815260200190565b6020604051808303816000875af115801562001c88573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cae91906200a31a565b90508062001d555782602001516001600160a01b031683600001516001600160a01b03167fa9084c89a291b43bc984e045671d394974730a159b9a826b577bb148ab504c3a8560600151600160405162001d0a9291906200a33a565b60405180910390a385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965062001eab95505050505050565b600062001d62846200863c565b9050600081600481111562001d7b5762001d7b6200a2d5565b0362001d9d575050604080516000815260208101909152925062001eab915050565b6040516000906110049047908381818185875af1925050503d806000811462001de3576040519150601f19603f3d011682016040523d82523d6000602084013e62001de8565b606091505b505090508062001e0b576040516312171d8360e31b815260040160405180910390fd5b84602001516001600160a01b031685600001516001600160a01b03167fa9084c89a291b43bc984e045671d394974730a159b9a826b577bb148ab504c3a87606001518560405162001e5e9291906200a33a565b60405180910390a387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092985062001eab975050505050505050565b6034805460ff191690559392505050565b60008162001ecc603f8262008265565b62001eea5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160205260409020600d01541691505b50919050565b600054630100000090046001600160a01b0316331462001f44576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a250565b60005462010000900460ff161562001fbe57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562001ff05760405163b1d02c3d60e01b815260040160405180910390fd5b8062001ffe603f8262008265565b6200201c5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166000908152604160205260409020600a81015460ff166200205a57604051634b6b857d60e01b815260040160405180910390fd5b6036546002820154604051630913db4760e01b81526001600160a01b03868116600483015290911690630913db4790602401602060405180830381865afa158015620020aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d091906200a2bb565b1015620020f0576040516317b204bf60e11b815260040160405180910390fd5b4281600b01541115620021165760405163170cb76760e21b815260040160405180910390fd5b600a8101805460ff1916905560498054600191906000906200213a9084906200a361565b90915550506040516001600160a01b038416907f9390b453426557da5ebdc31f19a37753ca04addf656d32f35232211bb2af3f1990600090a2505050565b60005462010000900460ff1615620021a357604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620021d55760405163b1d02c3d60e01b815260040160405180910390fd5b620021df62008ca5565b620021ec603f8262008265565b6200220a5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166200223257604051636520611b60e11b815260040160405180910390fd5b6001600160a01b03828116600090815260436020526040902054161515806200227357506001600160a01b03821660009081526047602052604090205460ff165b156200229257604051631e6f587560e11b815260040160405180910390fd5b60006200229e62008ca5565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620022d19062015180906200a2a5565b1115620022f157604051631f92cdbd60e11b815260040160405180910390fd5b80546001600160a01b039081166000908152604460209081526040808320429081905585548986166001600160a01b031991821681178855600c88019290925581855260439093528184208054958816959093168517909255519092917f6e4e747ca35203f16401c69805c7dd52fff67ef60b0ebc5c7fe16890530f223591a350505050565b3362002385603f8262008265565b620023a35760405163056e881160e01b815260040160405180910390fd5b60005462010000900460ff1615620023ce57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620024005760405163b1d02c3d60e01b815260040160405180910390fd5b6001600160a01b038281166000908152604d602052604090205416156200243a5760405163bebdc75760e01b815260040160405180910390fd5b62002447603f8362008265565b15620024665760405163bebdc75760e01b815260040160405180910390fd5b336000818152604160205260409020600d01546001600160a01b039081169084168103620024a75760405163bebdc75760e01b815260040160405180910390fd5b6001600160a01b03811615620024de576001600160a01b0381166000908152604d6020526040902080546001600160a01b03191690555b6001600160a01b038281166000908152604160205260409020600d0180546001600160a01b03191691861691821790551562002543576001600160a01b038481166000908152604d6020526040902080546001600160a01b0319169184169190911790555b836001600160a01b0316816001600160a01b0316836001600160a01b03167fcbb728765de145e99c00e8ae32a325231e850359b7b8a6da3b84d672ab3f1d0a60405160405180910390a450505050565b600054630100000090046001600160a01b03163314620025c6576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe0db3499b7fdc3da4cddff5f45d694549c19835e7f719fb5606d3ad1a5de40119190a250565b60005462010000900460ff16156200263a57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200266c5760405163b1d02c3d60e01b815260040160405180910390fd5b816200267a603f8262008265565b620026985760405163056e881160e01b815260040160405180910390fd5b81600003620026ba57604051639811e0c760e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002722906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002750906200a20c565b8015620027a15780601f106200277557610100808354040283529160200191620027a1565b820191906000526020600020905b8154815290600101906020018083116200278357829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620027cc906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620027fa906200a20c565b80156200284b5780601f106200281f576101008083540402835291602001916200284b565b820191906000526020600020905b8154815290600101906020018083116200282d57829003601f168201915b5050505050815260200160018201805462002866906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002894906200a20c565b8015620028e55780601f10620028b957610100808354040283529160200191620028e5565b820191906000526020600020905b815481529060010190602001808311620028c757829003601f168201915b5050505050815260200160028201805462002900906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200292e906200a20c565b80156200297f5780601f1062002953576101008083540402835291602001916200297f565b820191906000526020600020905b8154815290600101906020018083116200296157829003601f168201915b505050505081526020016003820180546200299a906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620029c8906200a20c565b801562002a195780601f10620029ed5761010080835404028352916020019162002a19565b820191906000526020600020905b815481529060010190602001808311620029fb57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162002ab8575050509190925250505060408082015190516326ccee8b60e11b81526001600160a01b0385811660048301526024820188905292935060009290911690634d99dd16906044016020604051808303816000875af115801562002b32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b5891906200a2bb565b9050826001600160a01b0316866001600160a01b03167f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b40829802878460405162002ba9929190918252602082015260400190565b60405180910390a3856001600160a01b0316836001600160a01b03160362002bd65762002bd68662008ce6565b6040808301519051633041949b60e01b815261200591633041949b9162002c03919087906004016200a242565b600060405180830381600087803b15801562002c1e57600080fd5b505af115801562002c33573d6000803e3d6000fd5b50505050505050505050565b60005462010000900460ff161562002c6a57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002c9c5760405163b1d02c3d60e01b815260040160405180910390fd5b8362002caa603f8262008265565b62002cc85760405163056e881160e01b815260040160405180910390fd5b8362002cd6603f8262008265565b62002cf45760405163056e881160e01b815260040160405180910390fd5b6034805460ff19166001179055600084900362002d2457604051639811e0c760e01b815260040160405180910390fd5b846001600160a01b0316866001600160a01b03160362002d575760405163f0e3e62960e01b815260040160405180910390fd5b6001600160a01b038087166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002dbf906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002ded906200a20c565b801562002e3e5780601f1062002e125761010080835404028352916020019162002e3e565b820191906000526020600020905b81548152906001019060200180831162002e2057829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002e69906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002e97906200a20c565b801562002ee85780601f1062002ebc5761010080835404028352916020019162002ee8565b820191906000526020600020905b81548152906001019060200180831162002eca57829003601f168201915b5050505050815260200160018201805462002f03906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002f31906200a20c565b801562002f825780601f1062002f565761010080835404028352916020019162002f82565b820191906000526020600020905b81548152906001019060200180831162002f6457829003601f168201915b5050505050815260200160028201805462002f9d906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002fcb906200a20c565b80156200301c5780601f1062002ff0576101008083540402835291602001916200301c565b820191906000526020600020905b81548152906001019060200180831162002ffe57829003601f168201915b5050505050815260200160038201805462003037906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003065906200a20c565b8015620030b65780601f106200308a57610100808354040283529160200191620030b6565b820191906000526020600020905b8154815290600101906020018083116200309857829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200315557505050919092525050506001600160a01b03808916600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620031e0906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200320e906200a20c565b80156200325f5780601f1062003233576101008083540402835291602001916200325f565b820191906000526020600020905b8154815290600101906020018083116200324157829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200328a906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620032b8906200a20c565b8015620033095780601f10620032dd5761010080835404028352916020019162003309565b820191906000526020600020905b815481529060010190602001808311620032eb57829003601f168201915b5050505050815260200160018201805462003324906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003352906200a20c565b8015620033a35780601f106200337757610100808354040283529160200191620033a3565b820191906000526020600020905b8154815290600101906020018083116200338557829003601f168201915b50505050508152602001600282018054620033be906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620033ec906200a20c565b80156200343d5780601f1062003411576101008083540402835291602001916200343d565b820191906000526020600020905b8154815290600101906020018083116200341f57829003601f168201915b5050505050815260200160038201805462003458906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003486906200a20c565b8015620034d75780601f10620034ab57610100808354040283529160200191620034d7565b820191906000526020600020905b815481529060010190602001808311620034b957829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620035765750505050508152505090508060e001518015620035b95750876001600160a01b0316836001600160a01b031614155b15620035d857604051636468920360e01b815260040160405180910390fd5b60408083015190516352e82ce560e11b81526001600160a01b038581166004830152602482018a9052600092169063a5d059ca906044016020604051808303816000875af11580156200362f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200365591906200a2bb565b90506037548110156200367b5760405163dc6f0bdd60e01b815260040160405180910390fd5b896001600160a01b0316846001600160a01b03161480156200371057506036546040808501519051630913db4760e01b81526001600160a01b038d8116600483015290911690630913db4790602401602060405180830381865afa158015620036e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200370e91906200a2bb565b105b156200372f576040516317b204bf60e11b815260040160405180910390fd5b6000620186a0603a54836200374591906200a377565b6200375191906200a282565b9050600083604001516001600160a01b03168260405160006040518083038185875af1925050503d8060008114620037a6576040519150601f19603f3d011682016040523d82523d6000602084013e620037ab565b606091505b5050905080620037ce576040516312171d8360e31b815260040160405180910390fd5b620037da82846200a361565b60408086015190516317066a5760e21b81526001600160a01b03898116600483015292955060009290911690635c19a95c90869060240160206040518083038185885af115801562003830573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200385791906200a2bb565b9050866001600160a01b03168c6001600160a01b03168e6001600160a01b03167ffdac6e81913996d95abcc289e90f2d8bd235487ce6fe6f821e7d21002a1915b48e8589604051620038bc939291909283526020830191909152604082015260600190565b60405180910390a46040805160028082526060820183526000926020830190803683370190505090508660400151816000815181106200390057620039006200a391565b60200260200101906001600160a01b031690816001600160a01b0316815250508560400151816001815181106200393b576200393b6200a391565b6001600160a01b0390921660209283029190910190910152604051634484077560e01b8152612005906344840775906200397c9084908c906004016200a3a7565b600060405180830381600087803b1580156200399757600080fd5b505af1158015620039ac573d6000803e3d6000fd5b505050508a1562003a1e576120056001600160a01b031663e5ed5b1e898f6040518363ffffffff1660e01b8152600401620039e99291906200a242565b600060405180830381600087803b15801562003a0457600080fd5b505af115801562003a19573d6000803e3d6000fd5b505050505b50506034805460ff19169055505050505050505050505050565b60005462010000900460ff161562003a6357604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562003a955760405163b1d02c3d60e01b815260040160405180910390fd5b62003a9f62008ca5565b62003aac603f8262008265565b62003aca5760405163056e881160e01b815260040160405180910390fd5b600062003ad662008ca5565b6001600160a01b0381166000908152604160205260409020600c81015491925090429062003b099062015180906200a2a5565b111562003b2957604051631f92cdbd60e11b815260040160405180910390fd5b60098101546001600160401b03600160401b9091048116908516111562003b635760405163dc81db8560e01b815260040160405180910390fd5b60098101546000906001600160401b03908116908616101562003ba157600982015462003b9b9086906001600160401b03166200a3d3565b62003bbb565b600982015462003bbb906001600160401b0316866200a3d3565b60098301546001600160401b039182169250600160801b90041681111562003bf65760405163dc81db8560e01b815260040160405180910390fd5b60098201805467ffffffffffffffff19166001600160401b03871690811790915542600c8401556040519081526001600160a01b038416907f78cdd96edf59e09cfd4d26ef6ef6c92d166effe6a40970c54821206d541932cb9060200160405180910390a25050505050565b6060806060600062003c75603f62008e0c565b905080861015620042fe57841562003c8e578462003c90565b805b945060008562003ca188846200a361565b1162003cb95762003cb387836200a361565b62003cbb565b855b9050806001600160401b0381111562003cd85762003cd862009a8f565b60405190808252806020026020018201604052801562003d02578160200160208202803683370190505b509450806001600160401b0381111562003d205762003d2062009a8f565b60405190808252806020026020018201604052801562003d4a578160200160208202803683370190505b509350806001600160401b0381111562003d685762003d6862009a8f565b60405190808252806020026020018201604052801562003d9d57816020015b606081526020019060019003908162003d875790505b50925060005b81811015620042fb57600062003dc762003dbe838b6200a2a5565b603f9062008e17565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180549495509193909291608084019162003e34906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003e62906200a20c565b801562003eb35780601f1062003e875761010080835404028352916020019162003eb3565b820191906000526020600020905b81548152906001019060200180831162003e9557829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462003ede906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003f0c906200a20c565b801562003f5d5780601f1062003f315761010080835404028352916020019162003f5d565b820191906000526020600020905b81548152906001019060200180831162003f3f57829003601f168201915b5050505050815260200160018201805462003f78906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003fa6906200a20c565b801562003ff75780601f1062003fcb5761010080835404028352916020019162003ff7565b820191906000526020600020905b81548152906001019060200180831162003fd957829003601f168201915b5050505050815260200160028201805462004012906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004040906200a20c565b8015620040915780601f10620040655761010080835404028352916020019162004091565b820191906000526020600020905b8154815290600101906020018083116200407357829003601f168201915b50505050508152602001600382018054620040ac906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620040da906200a20c565b80156200412b5780601f10620040ff576101008083540402835291602001916200412b565b820191906000526020600020905b8154815290600101906020018083116200410d57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620041ca57505050505081525050905080600001518884815181106200420357620042036200a391565b60200260200101906001600160a01b031690816001600160a01b0316815250508060e001516200429c5780604001516001600160a01b03166315d1f8986040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200429691906200a2bb565b6200429f565b60005b878481518110620042b457620042b46200a391565b6020026020010181815250508060800151868481518110620042da57620042da6200a391565b6020026020010181905250505080620042f3906200a3f6565b905062003da3565b50505b92959194509250565b60005462010000900460ff16156200433257604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620043645760405163b1d02c3d60e01b815260040160405180910390fd5b3362004372603f8262008265565b156200439157604051635f28f62b60e01b815260040160405180910390fd5b6001600160a01b038181166000908152604d60205260409020541615620043cb57604051631a0a9b9f60e21b815260040160405180910390fd5b6001600160a01b03888116600090815260436020526040902054161515806200440c57506001600160a01b03881660009081526047602052604090205460ff165b156200442b57604051631e6f587560e11b815260040160405180910390fd5b60006001600160a01b0316604588886040516200444a9291906200a25c565b908152604051908190036020019020546001600160a01b031614158062004494575060488787604051620044809291906200a25c565b9081526040519081900360200190205460ff165b15620044b3576040516311fdb94760e01b815260040160405180910390fd5b6000620044c183806200a412565b604051602001620044d49291906200a25c565b60408051601f1981840301815291815281516020928301206000818152604290935291205490915060ff16156200451e5760405163c0bf414360e01b815260040160405180910390fd5b600062004534670de0b6b3a7640000346200a361565b90506036548110156200455a576040516317b204bf60e11b815260040160405180910390fd5b6001600160a01b038a166200458257604051636520611b60e11b815260040160405180910390fd5b61138862004597604087016020880162009c73565b6001600160401b03161180620045dd5750620045ba604086016020870162009c73565b6001600160401b0316620045d2602087018762009c73565b6001600160401b0316115b806200461c5750620045f6604086016020870162009c73565b6001600160401b031662004611606087016040880162009c73565b6001600160401b0316115b156200463b5760405163dc81db8560e01b815260040160405180910390fd5b620046866200464b85806200a412565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062008e2592505050565b620046a457604051635dba5ad760e01b815260040160405180910390fd5b620046b3838a8a8a8a62008fc7565b620046d157604051631647e3cb60e11b815260040160405180910390fd5b60006200471f84620046e487806200a412565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620090f792505050565b90506200472e603f85620091f8565b506000838152604260209081526040808320805460ff191660019081179091556001600160a01b0380891680865260419094529190932080548f83166001600160a01b031991821617825593810180548516909317909255600282018054918516919093161790915542600382015560048101620047ae8b8d836200a4ba565b508560058201620047c082826200a582565b5087905060098201620047d482826200a6bb565b505042600c8201556001600160a01b038c81166000908152604360205260409081902080546001600160a01b0319169288169290921790915551859060459062004822908e908e906200a25c565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316856001600160a01b03168d6001600160a01b03167faecd9fb95e79c75a3a1de93362c6be5fe6ab65770d8614be583884161cd8228d8e8e604051620048a59291906200a78b565b60405180910390a460408051848152602081018590526001600160a01b0387169182916000805160206200bc92833981519152910160405180910390a360408051670de0b6b3a7640000808252602082015261dead916001600160a01b038816916000805160206200bc92833981519152910160405180910390a3604051633041949b60e01b815261200590633041949b906200494990859089906004016200a242565b600060405180830381600087803b1580156200496457600080fd5b505af115801562004979573d6000803e3d6000fd5b50505050505050505050505050505050565b604080516060810182526000808252602082018190529181019190915281620049b6603f8262008265565b620049d45760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b031660009081526041602090815260409182902082516060810184526009909101546001600160401b038082168352600160401b8204811693830193909352600160801b90049091169181019190915290565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608281019190915260048401805491949160808401919062004a9d906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004acb906200a20c565b801562004b1c5780601f1062004af05761010080835404028352916020019162004b1c565b820191906000526020600020905b81548152906001019060200180831162004afe57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462004b47906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004b75906200a20c565b801562004bc65780601f1062004b9a5761010080835404028352916020019162004bc6565b820191906000526020600020905b81548152906001019060200180831162004ba857829003601f168201915b5050505050815260200160018201805462004be1906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004c0f906200a20c565b801562004c605780601f1062004c345761010080835404028352916020019162004c60565b820191906000526020600020905b81548152906001019060200180831162004c4257829003601f168201915b5050505050815260200160028201805462004c7b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004ca9906200a20c565b801562004cfa5780601f1062004cce5761010080835404028352916020019162004cfa565b820191906000526020600020905b81548152906001019060200180831162004cdc57829003601f168201915b5050505050815260200160038201805462004d15906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004d43906200a20c565b801562004d945780601f1062004d685761010080835404028352916020019162004d94565b820191906000526020600020905b81548152906001019060200180831162004d7657829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162004e335750505091909252505050608001519392505050565b336110011462004e8457604051630f22c43960e41b81526110016004820152602401620011ef565b6001600160a01b038082166000908152604360205260409020541662004eac603f8262008265565b62004eca5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038181166000908152604160205260408082206002810154603b54925163045bc4d160e41b81526004810193909352909316906345bc4d10906024016020604051808303816000875af115801562004f2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f5391906200a2bb565b90506000603d544262004f6791906200a2a5565b905062004f75838262008312565b836001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28284600160405162004fb5939291906200a2eb565b60405180910390a26002830154604051633041949b60e01b815261200591633041949b9162004ff3916001600160a01b03169088906004016200a242565b600060405180830381600087803b1580156200500e57600080fd5b505af115801562005023573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156200504f5750600054600160ff909116105b806200506b5750303b1580156200506b575060005460ff166001145b620050d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620011ef565b6000805460ff191660011790558015620050f4576000805461ff0019166101001790555b334114620051155760405163022d8c9560e31b815260040160405180910390fd5b3a1562005135576040516383f1b1d360e01b815260040160405180910390fd5b611388603555686c6b935b8bbd400000603655670de0b6b3a7640000603755600960385562093a806039556002603a819055678ac7230489e80000603b55680ad78ebc5ac6200000603c556202a300603d5562069780603e55604a5560408051610220810190915261020080825260609182916200ba926020830139806020019051810190620051c691906200a7c7565b915060405180610360016040528061034081526020016200bcb26103409139806020019051810190620051fa91906200a86b565b905060005b825181101562005269576001604760008584815181106200522457620052246200a391565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905562005261816200a3f6565b9050620051ff565b5060005b8151811015620052da57600160488383815181106200529057620052906200a391565b6020026020010151604051620052a791906200a968565b908152604051908190036020019020805491151560ff19909216919091179055620052d2816200a3f6565b90506200526d565b50620052fa7330151da466ec8ab345bef3d6983023e050fb06736200920f565b505080156200181a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b33612000146200536d57604051630f22c43960e41b81526120006004820152602401620011ef565b7faa5ba621c8b3d7d05bb9e51a7506108251d4d5dbe542ca66fc7bb52aacb02b65838383604051620053a2939291906200a986565b60405180910390a1505050565b600054630100000090046001600160a01b03163314620053e2576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff16156200540d57604051631785c68160e01b815260040160405180910390fd5b6000805462ff00001916620100001781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b600062005456603f8462008265565b620054745760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383811660009081526041602052604090819020600201549051636bbf224960e01b815260048101859052911690636bbf2249906024015b602060405180830381865afa158015620054d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054f791906200a2bb565b90505b92915050565b60005462010000900460ff16156200552b57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200555d5760405163b1d02c3d60e01b815260040160405180910390fd5b816200556b603f8262008265565b620055895760405163056e881160e01b815260040160405180910390fd5b6037543490811015620055af5760405163dc6f0bdd60e01b815260040160405180910390fd5b6001600160a01b038085166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162005617906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005645906200a20c565b8015620056965780601f106200566a5761010080835404028352916020019162005696565b820191906000526020600020905b8154815290600101906020018083116200567857829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620056c1906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620056ef906200a20c565b8015620057405780601f10620057145761010080835404028352916020019162005740565b820191906000526020600020905b8154815290600101906020018083116200572257829003601f168201915b505050505081526020016001820180546200575b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005789906200a20c565b8015620057da5780601f10620057ae57610100808354040283529160200191620057da565b820191906000526020600020905b815481529060010190602001808311620057bc57829003601f168201915b50505050508152602001600282018054620057f5906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005823906200a20c565b8015620058745780601f10620058485761010080835404028352916020019162005874565b820191906000526020600020905b8154815290600101906020018083116200585657829003601f168201915b505050505081526020016003820180546200588f906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620058bd906200a20c565b80156200590e5780601f10620058e2576101008083540402835291602001916200590e565b820191906000526020600020905b815481529060010190602001808311620058f057829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620059ad5750505050508152505090508060e001518015620059f05750856001600160a01b0316826001600160a01b031614155b1562005a0f57604051636468920360e01b815260040160405180910390fd5b60408082015190516317066a5760e21b81526001600160a01b0384811660048301526000921690635c19a95c90869060240160206040518083038185885af115801562005a60573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062005a8791906200a2bb565b9050826001600160a01b0316876001600160a01b03166000805160206200bc92833981519152838760405162005ac7929190918252602082015260400190565b60405180910390a36040808301519051633041949b60e01b815261200591633041949b9162005afc919087906004016200a242565b600060405180830381600087803b15801562005b1757600080fd5b505af115801562005b2c573d6000803e3d6000fd5b50505050851562001813576040516372f6ad8f60e11b81526120059063e5ed5b1e9062005b609086908b906004016200a242565b600060405180830381600087803b15801562005b7b57600080fd5b505af115801562005b90573d6000803e3d6000fd5b5050505050505050505050565b62005bc96040518060800160405280606081526020016060815260200160608152602001606081525090565b8162005bd7603f8262008265565b62005bf55760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383166000908152604160205260409081902081516080810190925260050180548290829062005c2c906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005c5a906200a20c565b801562005cab5780601f1062005c7f5761010080835404028352916020019162005cab565b820191906000526020600020905b81548152906001019060200180831162005c8d57829003601f168201915b5050505050815260200160018201805462005cc6906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005cf4906200a20c565b801562005d455780601f1062005d195761010080835404028352916020019162005d45565b820191906000526020600020905b81548152906001019060200180831162005d2757829003601f168201915b5050505050815260200160028201805462005d60906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005d8e906200a20c565b801562005ddf5780601f1062005db35761010080835404028352916020019162005ddf565b820191906000526020600020905b81548152906001019060200180831162005dc157829003601f168201915b5050505050815260200160038201805462005dfa906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005e28906200a20c565b801562005e795780601f1062005e4d5761010080835404028352916020019162005e79565b820191906000526020600020905b81548152906001019060200180831162005e5b57829003601f168201915b505050505081525050915050919050565b60005462010000900460ff161562005eb557604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562005ee75760405163b1d02c3d60e01b815260040160405180910390fd5b62005ef38282620092a8565b5050565b336110071462005f1f57604051630f22c43960e41b81526110076004820152602401620011ef565b62005f8c6040518060400160405280601081526020016f1d1c985b9cd9995c91d85cd31a5b5a5d60821b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006047576020811462005fbe5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f840181900481028201810190925282815260009162006001918585808385018382808284376000920191909152509293925050620094119050565b90506108fc81108062006015575061271081115b156200603e5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60355562006d51565b620060b86040518060400160405280601481526020017336b4b729b2b6332232b632b3b0ba34b7b721272160611b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620061825760208114620060ea5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200612d918585808385018382808284376000920191909152509293925050620094119050565b9050683635c9adc5dea0000081108062006150575069152d02c7e14af680000081115b15620061795784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60365562006d51565b620061f5604051806040016040528060168152602001756d696e44656c65676174696f6e424e424368616e676560501b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620062bc5760208114620062275783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200626a918585808385018382808284376000920191909152509293925050620094119050565b905067016345785d8a00008110806200628a5750678ac7230489e8000081115b15620062b35784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60375562006d51565b6200632d604051806040016040528060148152602001736d6178456c656374656456616c696461746f727360601b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620063e557602081146200635f5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f8401819004810282018101909252828152600091620063a2918585808385018382808284376000920191909152509293925050620094119050565b9050801580620063b357506101f481115b15620063dc5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60385562006d51565b6200644e6040518060400160405280600c81526020016b1d5b989bdb9914195c9a5bd960a21b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b156200650b5760208114620064805783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f8401819004810282018101909252828152600091620064c3918585808385018382808284376000920191909152509293925050620094119050565b90506203f480811080620064d9575062278d0081115b15620065025784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60395562006d51565b6200657960405180604001604052806011815260200170726564656c65676174654665655261746560781b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620066265760208114620065ab5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f8401819004810282018101909252828152600091620065ee918585808385018382808284376000920191909152509293925050620094119050565b905060648111156200661d5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603a5562006d51565b6200669660405180604001604052806013815260200172191bdddb9d1a5b5954db185cda105b5bdd5b9d606a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620067575760208114620066c85783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200670b918585808385018382808284376000920191909152509293925050620094119050565b9050674563918244f40000811080620067255750603c5481115b156200674e5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603b5562006d51565b620067c56040518060400160405280601181526020017019995b1bdb9e54db185cda105b5bdd5b9d607a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620068885760208114620067f75783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200683a918585808385018382808284376000920191909152509293925050620094119050565b905068056bc75e2d63100000811080620068565750603b548111155b156200687f5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603c5562006d51565b620068f56040518060400160405280601081526020016f646f776e74696d654a61696c54696d6560801b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620069b25760208114620069275783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200696a918585808385018382808284376000920191909152509293925050620094119050565b90506202a300811080620069805750603e548110155b15620069a95784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603d5562006d51565b62006a1d6040518060400160405280600e81526020016d66656c6f6e794a61696c54696d6560901b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006ada576020811462006a4f5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f840181900481028201810190925282815260009162006a92918585808385018382808284376000920191909152509293925050620094119050565b9050620d2f0081108062006aa85750603d548111155b1562006ad15784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603e5562006d51565b62006b546040518060400160405280601c81526020017f6d617846656c6f6e794265747765656e42726561746865426c6f636b0000000081525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006c00576020811462006b865783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f840181900481028201810190925282815260009162006bc9918585808385018382808284376000920191909152509293925050620094119050565b90508060000362006bf75784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604a5562006d51565b62006c6e6040518060400160405280601181526020017039ba30b5b2a43ab1283937ba32b1ba37b960791b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006d2e576014811462006ca05783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b600062006ce8601484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620094119050565b90506001600160a01b03811662006d1c5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b62006d278162009416565b5062006d51565b838383836040516325ee20d560e21b8152600401620011ef94939291906200a9a5565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e6338484848460405162006d8894939291906200a9a5565b60405180910390a150505050565b60005462010000900460ff161562006dc157604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562006df35760405163b1d02c3d60e01b815260040160405180910390fd5b816000816001600160401b0381111562006e115762006e1162009a8f565b60405190808252806020026020018201604052801562006e3b578160200160208202803683370190505b5090506000805b8381101562006f395762006e8487878381811062006e645762006e646200a391565b905060200201602081019062006e7b91906200991e565b603f9062008265565b62006ea25760405163056e881160e01b815260040160405180910390fd5b6041600088888481811062006ebb5762006ebb6200a391565b905060200201602081019062006ed291906200991e565b6001600160a01b039081168252602082019290925260400160002060020154845191169250829084908390811062006f0e5762006f0e6200a391565b6001600160a01b039092166020928302919091019091015262006f31816200a3f6565b905062006e42565b50604051634484077560e01b81526120059063448407759062002c0390859088906004016200a3a7565b606080600062006f74603f62008e0c565b9050808510156200713857831562006f8d578362006f8f565b805b935060008462006fa087846200a361565b1162006fb85762006fb286836200a361565b62006fba565b845b9050806001600160401b0381111562006fd75762006fd762009a8f565b60405190808252806020026020018201604052801562007001578160200160208202803683370190505b509350806001600160401b038111156200701f576200701f62009a8f565b60405190808252806020026020018201604052801562007049578160200160208202803683370190505b50925060005b8181101562007135576200706862003dbe82896200a2a5565b8582815181106200707d576200707d6200a391565b60200260200101906001600160a01b031690816001600160a01b03168152505060416000868381518110620070b657620070b66200a391565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020160009054906101000a90046001600160a01b03168482815181106200710a576200710a6200a391565b6001600160a01b03909216602092830291909101909101526200712d816200a3f6565b90506200704f565b50505b9250925092565b33611001146200716757604051630f22c43960e41b81526110016004820152602401620011ef565b60005462010000900460ff16156200719257604051631785c68160e01b815260040160405180910390fd5b6001600160a01b0380821660009081526043602052604090205416620071ba603f8262008265565b620071d85760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260408120906200720062015180426200a282565b604a546000828152604b602052604090205491925011620072345760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b60205260408120805460019290620072559084906200a2a5565b90915550506001600160a01b03841660009081526044602052604090205415801590620072aa57506001600160a01b0384166000908152604460205260409020544290620072a89062015180906200a2a5565b105b15620072c9576040516330abb81d60e21b815260040160405180910390fd5b600080620072d985600062008288565b9150915081620072fc57604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af11580156200734f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200737591906200a2bb565b905062007383858362008312565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb283836000604051620073c3939291906200a2eb565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162005b60916001600160a01b0316908a906004016200a242565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384938493849390929160808401919062007472906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620074a0906200a20c565b8015620074f15780601f10620074c557610100808354040283529160200191620074f1565b820191906000526020600020905b815481529060010190602001808311620074d357829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200751c906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200754a906200a20c565b80156200759b5780601f106200756f576101008083540402835291602001916200759b565b820191906000526020600020905b8154815290600101906020018083116200757d57829003601f168201915b50505050508152602001600182018054620075b6906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620075e4906200a20c565b8015620076355780601f10620076095761010080835404028352916020019162007635565b820191906000526020600020905b8154815290600101906020018083116200761757829003601f168201915b5050505050815260200160028201805462007650906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200767e906200a20c565b8015620076cf5780601f10620076a357610100808354040283529160200191620076cf565b820191906000526020600020905b815481529060010190602001808311620076b157829003601f168201915b50505050508152602001600382018054620076ea906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007718906200a20c565b8015620077695780601f106200773d5761010080835404028352916020019162007769565b820191906000526020600020905b8154815290600101906020018083116200774b57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620078085750505091909252505050606081015160e0820151610100909201519097919650945092505050565b60005462010000900460ff16156200786f57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620078a15760405163b1d02c3d60e01b815260040160405180910390fd5b620078ab62008ca5565b620078b8603f8262008265565b620078d65760405163056e881160e01b815260040160405180910390fd5b6000620078e262008ca5565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620079159062015180906200a2a5565b11156200793557604051631f92cdbd60e11b815260040160405180910390fd5b60058101805462007946906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007974906200a20c565b8015620079c55780601f106200799957610100808354040283529160200191620079c5565b820191906000526020600020905b815481529060010190602001808311620079a757829003601f168201915b5050508287525085916005840191508190620079e290826200a9d0565b5060208201516001820190620079f990826200a9d0565b506040820151600282019062007a1090826200a9d0565b506060820151600382019062007a2790826200a9d0565b505042600c830155506040516001600160a01b038316907f85d6366b336ade7f106987ec7a8eac1e8799e508aeab045a39d2f63e0dc969d990600090a250505050565b60005462010000900460ff161562007a9557604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562007ac75760405163b1d02c3d60e01b815260040160405180910390fd5b82811462007ae8576040516341abc80160e01b815260040160405180910390fd5b60005b8381101562007b595762007b4685858381811062007b0d5762007b0d6200a391565b905060200201602081019062007b2491906200991e565b84848481811062007b395762007b396200a391565b90506020020135620092a8565b62007b51816200a3f6565b905062007aeb565b5050505050565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162007bcb906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007bf9906200a20c565b801562007c4a5780601f1062007c1e5761010080835404028352916020019162007c4a565b820191906000526020600020905b81548152906001019060200180831162007c2c57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462007c75906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007ca3906200a20c565b801562007cf45780601f1062007cc85761010080835404028352916020019162007cf4565b820191906000526020600020905b81548152906001019060200180831162007cd657829003601f168201915b5050505050815260200160018201805462007d0f906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007d3d906200a20c565b801562007d8e5780601f1062007d625761010080835404028352916020019162007d8e565b820191906000526020600020905b81548152906001019060200180831162007d7057829003601f168201915b5050505050815260200160028201805462007da9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007dd7906200a20c565b801562007e285780601f1062007dfc5761010080835404028352916020019162007e28565b820191906000526020600020905b81548152906001019060200180831162007e0a57829003601f168201915b5050505050815260200160038201805462007e43906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007e71906200a20c565b801562007ec25780601f1062007e965761010080835404028352916020019162007ec2565b820191906000526020600020905b81548152906001019060200180831162007ea457829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162007f615750505091909252505050604001519392505050565b600062007f99603f8462008265565b62007fb75760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038381166000908152604160205260409081902060020154905163aa1966cd60e01b81526004810185905291169063aa1966cd90602401620054b3565b60005462010000900460ff16156200802657604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620080585760405163b1d02c3d60e01b815260040160405180910390fd5b6200806262008ca5565b6200806f603f8262008265565b6200808d5760405163056e881160e01b815260040160405180910390fd5b60006200809962008ca5565b9050620080aa818787878762008fc7565b620080c857604051631647e3cb60e11b815260040160405180910390fd5b60006001600160a01b031660458787604051620080e79291906200a25c565b908152604051908190036020019020546001600160a01b0316141580620081315750604886866040516200811d9291906200a25c565b9081526040519081900360200190205460ff165b1562008150576040516311fdb94760e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260409020600c81015442906200817f9062015180906200a2a5565b11156200819f57604051631f92cdbd60e11b815260040160405180910390fd5b42604682600401604051620081b591906200aa98565b9081526040519081900360200190205560048101620081d68789836200a4ba565b5042600c8201556040518290604590620081f4908a908a906200a25c565b90815260405190819003602001812080546001600160a01b039384166001600160a01b0319909116179055908316907f783156582145bd0ff7924fae6953ba054cf1233eb60739a200ddb10de068ff0d9062008254908a908a906200a78b565b60405180910390a250505050505050565b6001600160a01b03811660009081526001830160205260408120541515620054f7565b60008060008484604051602001620082a29291906200ab16565b60408051601f1981840301815291815281516020928301206000818152604c90935291205490915042811115620082e2576000809350935050506200830b565b603e54620082f190426200a2a5565b6000928352604c6020526040909220829055506001925090505b9250929050565b8154604051631507fdb760e11b81526001600160a01b03909116600482015261100090632a0ffb6e90602401600060405180830381600087803b1580156200835957600080fd5b505af11580156200836e573d6000803e3d6000fd5b505050506000600162008382603f62008e0c565b6200838e91906200a361565b60495410801591506200844c5760405163d31f968d60e01b81526110006004820152600860248201526120009063d31f968d90604401602060405180830381865afa158015620083e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200840891906200a31a565b6200844c5760018301546040516001600160a01b03909116907f2afdc18061ac21cff7d9f11527ab9c8dec6fabd4edf6f894ed634bebd6a20d4590600090a2505050565b82600b01548211156200846157600b83018290555b600a83015460ff16620084d457600a8301805460ff1916600190811790915560498054600090620084949084906200a2a5565b909155505060018301546040516001600160a01b03909116907f4905ac32602da3fb8b4b7b00c285e5fc4c6c2308cc908b4a1e4e9625a29c90a390600090a25b505050565b604080516080808201835260008083526020808401829052838501829052606080850183905285519384018652828452838201839052838601839052830182905284518086018652828152810182905284518086019095528551855285810190850152919282906200854b9062009482565b90506000805b6200855c83620094f5565b156200862f57806000036200859157620085806200857a846200951b565b6200957f565b6001600160a01b031684526200861c565b80600103620085bd57620085a96200857a846200951b565b6001600160a01b031660208501526200861c565b80600203620085e957620085d56200857a846200951b565b6001600160a01b031660408501526200861c565b8060030362008616576200860762008601846200951b565b62009597565b6060850152600191506200861c565b6200862f565b62008627816200a3f6565b905062008551565b5091959194509092505050565b6020808201516001600160a01b031660009081526001909152604081205460ff168062008674575060208201516001600160a01b0316155b156200868257506004919050565b81516200869290603f9062008265565b6200869f57506002919050565b81516001600160a01b039081166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929391926080840191906200870b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462008739906200a20c565b80156200878a5780601f106200875e576101008083540402835291602001916200878a565b820191906000526020600020905b8154815290600101906020018083116200876c57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620087b5906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620087e3906200a20c565b8015620088345780601f10620088085761010080835404028352916020019162008834565b820191906000526020600020905b8154815290600101906020018083116200881657829003601f168201915b505050505081526020016001820180546200884f906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200887d906200a20c565b8015620088ce5780601f10620088a257610100808354040283529160200191620088ce565b820191906000526020600020905b815481529060010190602001808311620088b057829003601f168201915b50505050508152602001600282018054620088e9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462008917906200a20c565b8015620089685780601f106200893c5761010080835404028352916020019162008968565b820191906000526020600020905b8154815290600101906020018083116200894a57829003601f168201915b5050505050815260200160038201805462008983906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620089b1906200a20c565b801562008a025780601f10620089d65761010080835404028352916020019162008a02565b820191906000526020600020905b815481529060010190602001808311620089e457829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162008aa15750505050508152505090508060e00151801562008aec575082600001516001600160a01b031683602001516001600160a01b031614155b1562008afb5750600392915050565b6040808201516060850151602086015192516317066a5760e21b81526001600160a01b03938416600482015260009390921691635c19a95c919060240160206040518083038185885af115801562008b57573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062008b7e91906200a2bb565b905083602001516001600160a01b031684600001516001600160a01b03166000805160206200bc9283398151915283876060015160405162008bca929190918252602082015260400190565b60405180910390a383602001516001600160a01b031684600001516001600160a01b03167f607b17598da6bdca05650a2fc08bd2bc8e38c3236806a0fa8e0daabc1d6cb1d883876060015160405162008c2d929190918252602082015260400190565b60405180910390a360408083015160208601519151633041949b60e01b815261200592633041949b9262008c67929091906004016200a242565b600060405180830381600087803b15801562008c8257600080fd5b505af115801562008c97573d6000803e3d6000fd5b506000979650505050505050565b336000908152604d60205260408120546001600160a01b03161562008ce15750336000908152604d60205260409020546001600160a01b031690565b503390565b6001600160a01b0381166000908152604160205260409020600a81015460ff161562008d10575050565b6036546002820154604051630913db4760e01b81526001600160a01b03858116600483015290911690630913db4790602401602060405180830381865afa15801562008d60573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008d8691906200a2bb565b101562005ef35762008da881603d544262008da291906200a2a5565b62008312565b80546040516335409f7f60e01b81526001600160a01b039091166004820152611000906335409f7f90602401600060405180830381600087803b15801562008def57600080fd5b505af115801562008e04573d6000803e3d6000fd5b505050505050565b6000620054fa825490565b6000620054f783836200966f565b60008082905060038151108062008e3d575060098151115b1562008e4c5750600092915050565b60418160008151811062008e645762008e646200a391565b016020015160f81c108062008e965750605a8160008151811062008e8c5762008e8c6200a391565b016020015160f81c115b1562008ea55750600092915050565b60015b815181101562008fbd57603082828151811062008ec95762008ec96200a391565b016020015160f81c108062008efa5750603982828151811062008ef05762008ef06200a391565b016020015160f81c115b801562008f4a5750604182828151811062008f195762008f196200a391565b016020015160f81c108062008f4a5750605a82828151811062008f405762008f406200a391565b016020015160f81c115b801562008f9a5750606182828151811062008f695762008f696200a391565b016020015160f81c108062008f9a5750607a82828151811062008f905762008f906200a391565b016020015160f81c115b1562008faa575060009392505050565b62008fb5816200a3f6565b905062008ea8565b5060019392505050565b600060308414158062008fdb575060608214155b1562008fea57506000620090ee565b6000868686466040516020016200900594939291906200ab54565b60408051808303601f1901815282825280516020918201208184528383019092529092506000919060208201818036833701905050905081602082015260008186868a8a6040516020016200905f9594939291906200ab81565b60408051808303601f190181526001808452838301909252925060009190602082018180368337019050509050815160016020830182602086016066600019fa620090a957600080fd5b50600081600081518110620090c257620090c26200a391565b016020015160f81c905060018114620090e457600095505050505050620090ee565b6001955050505050505b95945050505050565b60008061200361dead6040516200910e90620098fa565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562009151573d6000803e3d6000fd5b509050806001600160a01b031663f399e22e3486866040518463ffffffff1660e01b8152600401620091859291906200abb9565b6000604051808303818588803b1580156200919f57600080fd5b505af1158015620091b4573d6000803e3d6000fd5b50506040516001600160a01b038086169450881692507fd481492e4e93bb36b4c12a5af93f03be3bf04b454dfbc35dd2663fa26f44d5b09150600090a39392505050565b6000620054f7836001600160a01b0384166200969c565b600054610100900460ff166200927c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620011ef565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b81620092b6603f8262008265565b620092d45760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03838116600090815260416020526040808220600201549051635569f64b60e11b8152336004820152602481018690529192169063aad3ec96906044016020604051808303816000875af115801562009338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200935e91906200a2bb565b9050336001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd399268383604051620093a691815260200190565b60405180910390a350505050565b600081604051602001620093c991906200a968565b6040516020818303038152906040528051906020012083604051602001620093f291906200a968565b6040516020818303038152906040528051906020012014905092915050565b015190565b600080546040516001600160a01b0380851693630100000090930416917f44fc1b38a4abaa91ebd1b628a5b259a698f86238c8217d68f516e87769c60c0b91a3600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6040805160808101825260009181018281526060820183905281526020810191909152620094b082620096ee565b620094ba57600080fd5b6000620094cb836020015162009721565b8360200151620094dc91906200a2a5565b6040805180820190915293845260208401525090919050565b805180516020820151600092916200950d916200a2a5565b836020015110915050919050565b60408051808201909152600080825260208201526200953a82620094f5565b6200954457600080fd5b602082015160006200955682620097b0565b90506200956481836200a2a5565b60209485015260408051808201909152908152928301525090565b80516000906015146200959157600080fd5b620054fa825b805160009015801590620095ad57508151602110155b620095b757600080fd5b6000620095c8836020015162009721565b90508083600001511015620096205760405162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f66667365740000000000006044820152606401620011ef565b8251600090620096329083906200a361565b90506000808386602001516200964991906200a2a5565b90508051915060208310156200966657826020036101000a820491505b50949350505050565b60008260000182815481106200968957620096896200a391565b9060005260206000200154905092915050565b6000818152600183016020526040812054620096e557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620054fa565b506000620054fa565b805160009081036200970257506000919050565b6020820151805160001a9060c082101562008fbd575060009392505050565b8051600090811a60808110156200973b5750600092915050565b60b881108062009758575060c0811080159062009758575060f881105b15620097675750600192915050565b60c0811015620097a2576200977f600160b86200abdf565b6200978e9060ff16826200a361565b6200979b9060016200a2a5565b9392505050565b6200977f600160f86200abdf565b80516000908190811a6080811015620097cd5760019150620098f3565b60b8811015620097f957620097e46080826200a361565b620097f19060016200a2a5565b9150620098f3565b60c08110156200987257600060b78203600186019550806020036101000a8651049150600181018201935050808310156200986b5760405162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b6044820152606401620011ef565b50620098f3565b60f88110156200988957620097e460c0826200a361565b600060f78203600186019550806020036101000a865104915060018101820193505080831015620098f15760405162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b6044820152606401620011ef565b505b5092915050565b610e96806200abfc83390190565b6001600160a01b03811681146200181a57600080fd5b6000602082840312156200993157600080fd5b81356200979b8162009908565b60008083601f8401126200995157600080fd5b5081356001600160401b038111156200996957600080fd5b6020830191508360208285010111156200830b57600080fd5b600080602083850312156200999657600080fd5b82356001600160401b03811115620099ad57600080fd5b620099bb858286016200993e565b90969095509350505050565b600080600060408486031215620099dd57600080fd5b833560ff81168114620099ef57600080fd5b925060208401356001600160401b0381111562009a0b57600080fd5b62009a19868287016200993e565b9497909650939450505050565b60005b8381101562009a4357818101518382015260200162009a29565b50506000910152565b6000815180845262009a6681602086016020860162009a26565b601f01601f19169290920160200192915050565b602081526000620054f7602083018462009a4c565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562009aca5762009aca62009a8f565b60405290565b604051601f8201601f191681016001600160401b038111828210171562009afb5762009afb62009a8f565b604052919050565b60006001600160401b0382111562009b1f5762009b1f62009a8f565b50601f01601f191660200190565b600062009b4462009b3e8462009b03565b62009ad0565b905082815283838301111562009b5957600080fd5b828260208301376000602084830101529392505050565b60006020828403121562009b8357600080fd5b81356001600160401b0381111562009b9a57600080fd5b8201601f8101841362009bac57600080fd5b62009bbd8482356020840162009b2d565b949350505050565b6000806040838503121562009bd957600080fd5b823562009be68162009908565b946020939093013593505050565b80151581146200181a57600080fd5b6000806000806080858703121562009c1a57600080fd5b843562009c278162009908565b9350602085013562009c398162009908565b925060408501359150606085013562009c528162009bf4565b939692955090935050565b6001600160401b03811681146200181a57600080fd5b60006020828403121562009c8657600080fd5b81356200979b8162009c5d565b6000806040838503121562009ca757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101562009cf15781516001600160a01b03168752958201959082019060010162009cca565b509495945050505050565b60808152600062009d11608083018762009cb6565b82810360208481019190915286518083528782019282019060005b8181101562009d4a5784518352938301939183019160010162009d2c565b5050848103604086015286518082528282019350600581901b8201830183890160005b8381101562009d9f57601f1985840301875262009d8c83835162009a4c565b9686019692509085019060010162009d6d565b5050809550505050505082606083015295945050505050565b600080600080600080600087890360e081121562009dd557600080fd5b883562009de28162009908565b975060208901356001600160401b038082111562009dff57600080fd5b62009e0d8c838d016200993e565b909950975060408b013591508082111562009e2757600080fd5b62009e358c838d016200993e565b90975095508591506060605f198401121562009e5057600080fd5b60608b01945060c08b013592508083111562009e6b57600080fd5b505088016080818b03121562009e8057600080fd5b8091505092959891949750929550565b6000806040838503121562009ea457600080fd5b823562009eb18162009908565b9150602083013562009ec38162009bf4565b809150509250929050565b60208152600082516080602084015262009eec60a084018262009a4c565b90506020840151601f198085840301604086015262009f0c838362009a4c565b9250604086015191508085840301606086015262009f2b838362009a4c565b9250606086015191508085840301608086015250620090ee828262009a4c565b6000806000806040858703121562009f6257600080fd5b84356001600160401b038082111562009f7a57600080fd5b62009f88888389016200993e565b9096509450602087013591508082111562009fa257600080fd5b5062009fb1878288016200993e565b95989497509550505050565b60008083601f84011262009fd057600080fd5b5081356001600160401b0381111562009fe857600080fd5b6020830191508360208260051b85010111156200830b57600080fd5b6000806000604084860312156200a01a57600080fd5b83356001600160401b038111156200a03157600080fd5b6200a03f8682870162009fbd565b90945092505060208401356200a0558162009908565b809150509250925092565b6060815260006200a075606083018662009cb6565b82810360208401526200a089818662009cb6565b915050826040830152949350505050565b600082601f8301126200a0ac57600080fd5b620054f78383356020850162009b2d565b6000602082840312156200a0d057600080fd5b81356001600160401b03808211156200a0e857600080fd5b90830190608082860312156200a0fd57600080fd5b6200a10762009aa5565b8235828111156200a11757600080fd5b6200a125878286016200a09a565b8252506020830135828111156200a13b57600080fd5b6200a149878286016200a09a565b6020830152506040830135828111156200a16257600080fd5b6200a170878286016200a09a565b6040830152506060830135828111156200a18957600080fd5b6200a197878286016200a09a565b60608301525095945050505050565b600080600080604085870312156200a1bd57600080fd5b84356001600160401b03808211156200a1d557600080fd5b6200a1e38883890162009fbd565b909650945060208701359150808211156200a1fd57600080fd5b5062009fb18782880162009fbd565b600181811c908216806200a22157607f821691505b60208210810362001f0b57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0392831681529116602082015260400190565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826200a2a057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620054fa57620054fa6200a26c565b6000602082840312156200a2ce57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600383106200a30c576200a30c6200a2d5565b826040830152949350505050565b6000602082840312156200a32d57600080fd5b81516200979b8162009bf4565b82815260408101600583106200a354576200a3546200a2d5565b8260208301529392505050565b81810381811115620054fa57620054fa6200a26c565b8082028115828204841417620054fa57620054fa6200a26c565b634e487b7160e01b600052603260045260246000fd5b6040815260006200a3bc604083018562009cb6565b905060018060a01b03831660208301529392505050565b6001600160401b03828116828216039080821115620098f357620098f36200a26c565b6000600182016200a40b576200a40b6200a26c565b5060010190565b6000808335601e198436030181126200a42a57600080fd5b8301803591506001600160401b038211156200a44557600080fd5b6020019150368190038213156200830b57600080fd5b601f821115620084d457600081815260208120601f850160051c810160208610156200a4845750805b601f850160051c820191505b8181101562008e04578281556001016200a490565b600019600383901b1c191660019190911b1790565b6001600160401b038311156200a4d4576200a4d462009a8f565b6200a4ec836200a4e583546200a20c565b836200a45b565b6000601f8411600181146200a51f57600085156200a50a5750838201355b6200a51686826200a4a5565b84555062007b59565b600083815260209020601f19861690835b828110156200a55257868501358255602094850194600190920191016200a530565b50868210156200a5705760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6200a58e82836200a412565b6001600160401b038111156200a5a8576200a5a862009a8f565b6200a5c0816200a5b985546200a20c565b856200a45b565b6000601f8211600181146200a5f357600083156200a5de5750838201355b6200a5ea84826200a4a5565b8655506200a650565b600085815260209020601f19841690835b828110156200a62657868501358255602094850194600190920191016200a604565b50848210156200a6445760001960f88660031b161c19848701351681555b505060018360011b0185555b505050506200a66360208301836200a412565b6200a6738183600186016200a4ba565b50506200a68460408301836200a412565b6200a6948183600286016200a4ba565b50506200a6a560608301836200a412565b6200a6b58183600386016200a4ba565b50505050565b81356200a6c88162009c5d565b6001600160401b03811690508154816001600160401b0319821617835560208401356200a6f58162009c5d565b6fffffffffffffffff0000000000000000604091821b166fffffffffffffffffffffffffffffffff198316841781178555908501356200a7358162009c5d565b6001600160c01b0319929092169092179190911760809190911b67ffffffffffffffff60801b1617905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600062009bbd6020830184866200a762565b60006001600160401b038211156200a7bd576200a7bd62009a8f565b5060051b60200190565b600060208083850312156200a7db57600080fd5b82516001600160401b038111156200a7f257600080fd5b8301601f810185136200a80457600080fd5b80516200a81562009b3e826200a7a1565b81815260059190911b820183019083810190878311156200a83557600080fd5b928401925b828410156200a8605783516200a8508162009908565b825292840192908401906200a83a565b979650505050505050565b600060208083850312156200a87f57600080fd5b82516001600160401b03808211156200a89757600080fd5b818501915085601f8301126200a8ac57600080fd5b81516200a8bd62009b3e826200a7a1565b81815260059190911b830184019084810190888311156200a8dd57600080fd5b8585015b838110156200a95b578051858111156200a8fb5760008081fd5b8601603f81018b136200a90e5760008081fd5b8781015160406200a92362009b3e8362009b03565b8281528d828486010111156200a9395760008081fd5b6200a94a838c830184870162009a26565b86525050509186019186016200a8e1565b5098975050505050505050565b600082516200a97c81846020870162009a26565b9190910192915050565b60ff84168152604060208201526000620090ee6040830184866200a762565b6040815260006200a9bb6040830186886200a762565b82810360208401526200a8608185876200a762565b81516001600160401b038111156200a9ec576200a9ec62009a8f565b6200aa04816200a9fd84546200a20c565b846200a45b565b602080601f8311600181146200aa3857600084156200aa235750858301515b6200aa2f85826200a4a5565b86555062008e04565b600085815260208120601f198616915b828110156200aa69578886015182559484019460019091019084016200aa48565b50858210156200aa885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200aaa8816200a20c565b600182811680156200aac357600181146200aad9576200ab0a565b60ff19841687528215158302870194506200ab0a565b8760005260208060002060005b858110156200ab015781548a8201529084019082016200aae6565b50505082870194505b50929695505050505050565b6bffffffffffffffffffffffff198360601b1681526000600383106200ab40576200ab406200a2d5565b5060f89190911b6014820152601501919050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b600086516200ab95818460208b0162009a26565b82018587823760009086019081528385823760009301928352509095945050505050565b6001600160a01b038316815260406020820181905260009062009bbd9083018462009a4c565b60ff8281168282160390811115620054fa57620054fa6200a26c56fe608060405260405162000e9638038062000e96833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e6f60279139620002f8565b9392505050565b60006200018060008051602062000e4f83398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e4f83398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61087580620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000001284214b9b9c85549ab3d2b972df0deef66ac2c9000000000000000000000000a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0000000000000000000000000980a75ecd1309ea12fa2ed87a8744fbfc9b863d5000000000000000000000000b71b214cb885500844365e95cd9942c7276e7fd800000000000000000000000035552c16704d214347f29fa77f77da6d75d7c752000000000000000000000000f474cf03cceff28abc65c9cbae594f725c80e12d00000000000000000000000096c5d20b2a975c050e4220be276ace4892f4b41a00000000000000000000000047788386d0ed6c748e03a53160b4b30ed3748cc5000000000000000000000000bdfbc016c1bd481f5d8ca6f754f4b200a7ed66ce000000000000000000000000372e4887005ec21a5aff9ff62eda9e7713e3643700000000000000000000000055c968cf3430f3ba0534ef49ff4b3fbc9086c7ce000000000000000000000000136bd6343049c9690569db79dcd9208a57d342ad000000000000000000000000977ecef7de795cd248d77fd0d080ce3a35dec013000000000000000000000000b334ced91dff560bc9b5b3c30ae613bf335f181324d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000308e82934ca974fdcd97f3309de967d3c9c43fa711a8d673af5d75465844bf8969c8d1948d903748ac7b8b1720fa64e50c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b973c2d38487e58fd6e145491b110080fb14ac915a0411fc78f19e09a399ddee0d20c63a75d8f930f1694544ad2dc01b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003089037a9ace3b590165ea1c0c5ac72bf600b7c88c1e435f41932c1132aae1bfa0bb68e46b96ccb12c3415e4d82af717d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a2750ec6dded3dcdc2f351782310b0eadc077db59abca0f0cd26776e2e7acb9f3bce40b1fa5221fd1561226c6263cc5f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b742ad4855bae330426b823e742da31f816cc83bc16d69a9134be0cfb4a1d17ec34f1b5b32d5c20440b8536b1e88f0f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003096c9b86c3400e529bfe184056e257c07940bb664636f689e8d2027c834681f8f878b73445261034e946bb2d901b4b87800000000000000000000000000000000a164736f6c6343000811000a \ No newline at end of file diff --git a/core/systemcontracts/bohr/chapel/ValidatorContract b/core/systemcontracts/bohr/chapel/ValidatorContract new file mode 100644 index 0000000000..bcd97b863c --- /dev/null +++ b/core/systemcontracts/bohr/chapel/ValidatorContract @@ -0,0 +1 @@ +60806040526004361061051c5760003560e01c80638a7beb01116102a2578063c81b166211610165578063e40716a1116100cc578063f92eb86b11610085578063f92eb86b14610d8d578063f9a2bbc714610da2578063fc3e590814610db7578063fccc281314610dcc578063fd4ad81f14610de1578063fd6a687914610e1057610523565b8063e40716a114610cfb578063ea321e4914610d10578063eb57e20214610d30578063eda5868c14610d50578063f1fad10414610d65578063f340fa0114610d7a57610523565b8063d86222d51161011e578063d86222d514610c7d578063daacdb6614610c92578063dc927faf14610ca7578063df8079e914610cbc578063e086c7b114610cd1578063e1c7392a14610ce657610523565b8063c81b166214610c09578063c8509d81146109ae578063cb75a59214610c1e578063ce910b0c14610c33578063d58918ae14610c53578063d68fb56a14610c6857610523565b8063aa82dce111610209578063aef198a9116101c2578063aef198a914610b93578063b7ab4db514610ba8578063b8cf4ef114610bca578063bf9f499514610734578063c466689d14610bdf578063c6d3394514610bf457610523565b8063aa82dce114610aff578063aad5606314610b14578063aaf5eb6814610b29578063ab51bb9614610b3e578063ac43175114610b53578063ad3c9da614610b7357610523565b80639dc092621161025b5780639dc0926214610a815780639fe0f81614610a96578063a0dc275814610aab578063a1a11bf514610ac0578063a5422d5c14610ad5578063a78abc1614610aea57610523565b80638a7beb01146109f85780638b5ad0c914610a0d5780638c5d749d14610a225780638d19a41014610a375780639369d7de14610a5757806396713da914610a6c57610523565b80635192c82c116103ea578063718a8aa81161035157806381650b621161030a57806381650b6214610984578063820dcaa814610999578063831d65d1146109ae578063853230aa1461093057806386249882146109ce57806388b32f11146109e357610523565b8063718a8aa81461090657806375d47a0a1461091b57806378dfed4a146109305780637942fd05146109455780637a84ca2a1461095a5780637e434d541461096f57610523565b80635d77156c116103a35780635d77156c1461086057806360eba4fe1461087557806362b72cf5146108955780636969a25c146108aa5780636e47b482146108dc57806370fd5bad146108f157610523565b80635192c82c146107cc57806351b4dce3146107e157806351e80672146107f657806355614fcc1461080b578063565c56b31461082b5780635667515a1461084b57610523565b80632a0ffb6e1161048e5780633dffc387116104475780633dffc3871461073457806343756e5c1461075657806345cf9daf1461076b578063493279b1146107805780634bf6c882146107a25780634df6e0c3146107b757610523565b80632a0ffb6e14610671578063300c356714610691578063321d398a146106b15780633365af3a146106d157806335409f7f146106f15780633b071dcc1461071157610523565b8063152ad3b8116104e0578063152ad3b8146105db5780631bd14ed8146105fd5780631e4c1524146106125780631ff1806914610632578063219f22d514610647578063280870281461065c57610523565b806304c4fec61461052857806307a568471461053f5780630bee7a671461056a5780630e2374a51461058c5780631182b875146105ae57610523565b3661052357005b600080fd5b34801561053457600080fd5b5061053d610e25565b005b34801561054b57600080fd5b50610554610e99565b60405161056191906193bb565b60405180910390f35b34801561057657600080fd5b5061057f610e9f565b60405161056191906193e5565b34801561059857600080fd5b506105a1610ea4565b60405161056191906184f9565b3480156105ba57600080fd5b506105ce6105c93660046183df565b610eaa565b60405161056191906186af565b3480156105e757600080fd5b506105f06111c7565b60405161056191906186a4565b34801561060957600080fd5b506105546111d0565b34801561061e57600080fd5b5061053d61062d3660046181ed565b6111d6565b34801561063e57600080fd5b506105546118ac565b34801561065357600080fd5b5061057f6118b2565b34801561066857600080fd5b506105a16118b7565b34801561067d57600080fd5b5061053d61068c36600461814d565b6118bd565b34801561069d57600080fd5b5061053d6106ac366004618185565b61196a565b3480156106bd57600080fd5b506105f06106cc36600461838c565b611cb3565b3480156106dd57600080fd5b506105f06106ec36600461838c565b611d82565b3480156106fd57600080fd5b5061053d61070c36600461814d565b611e33565b34801561071d57600080fd5b50610726611f98565b6040516105619291906185ba565b34801561074057600080fd5b50610749612274565b60405161056191906193f6565b34801561076257600080fd5b506105a1612279565b34801561077757600080fd5b5061055461227f565b34801561078c57600080fd5b50610795612285565b60405161056191906193ac565b3480156107ae57600080fd5b5061074961228a565b3480156107c357600080fd5b5061072661228f565b3480156107d857600080fd5b5061055461241b565b3480156107ed57600080fd5b506105a1612421565b34801561080257600080fd5b506105a1612427565b34801561081757600080fd5b506105f061082636600461814d565b61242d565b34801561083757600080fd5b5061055461084636600461814d565b612462565b34801561085757600080fd5b506107496124b3565b34801561086c57600080fd5b5061057f6124b8565b34801561088157600080fd5b506105ce61089036600461838c565b6124bd565b3480156108a157600080fd5b50610554612563565b3480156108b657600080fd5b506108ca6108c536600461838c565b612569565b60405161056196959493929190618526565b3480156108e857600080fd5b506105a16125cd565b3480156108fd57600080fd5b506107496125d3565b34801561091257600080fd5b506107496125d8565b34801561092757600080fd5b506105a16125dd565b34801561093c57600080fd5b506105546125e3565b34801561095157600080fd5b506107496125e9565b34801561096657600080fd5b506105546125ee565b34801561097b57600080fd5b506105a16125f4565b34801561099057600080fd5b5061057f6125fa565b3480156109a557600080fd5b506105546125ff565b3480156109ba57600080fd5b5061053d6109c93660046183df565b612605565b3480156109da57600080fd5b50610554612666565b3480156109ef57600080fd5b5061055461266c565b348015610a0457600080fd5b506105f0612672565b348015610a1957600080fd5b5061055461267b565b348015610a2e57600080fd5b50610554612681565b348015610a4357600080fd5b50610554610a5236600461814d565b61269e565b348015610a6357600080fd5b5061053d6126de565b348015610a7857600080fd5b506107496127f2565b348015610a8d57600080fd5b506105a16127f7565b348015610aa257600080fd5b506105546127fd565b348015610ab757600080fd5b50610554612802565b348015610acc57600080fd5b506105a1612807565b348015610ae157600080fd5b506105ce61280d565b348015610af657600080fd5b506105f061282c565b348015610b0b57600080fd5b506105a1612835565b348015610b2057600080fd5b506105a161283b565b348015610b3557600080fd5b50610554612841565b348015610b4a57600080fd5b5061057f6124b3565b348015610b5f57600080fd5b5061053d610b6e366004618330565b61284a565b348015610b7f57600080fd5b50610554610b8e36600461814d565b613343565b348015610b9f57600080fd5b50610554613355565b348015610bb457600080fd5b50610bbd613362565b60405161056191906185a7565b348015610bd657600080fd5b5061055461344d565b348015610beb57600080fd5b50610554613452565b348015610c0057600080fd5b506105546125d3565b348015610c1557600080fd5b506105a1613458565b348015610c2a57600080fd5b5061055461345e565b348015610c3f57600080fd5b506105ce610c4e36600461838c565b613464565b348015610c5f57600080fd5b50610554613471565b348015610c7457600080fd5b50610554613477565b348015610c8957600080fd5b506105546134b6565b348015610c9e57600080fd5b506105546134c2565b348015610cb357600080fd5b506105a16134c8565b348015610cc857600080fd5b506105a16134ce565b348015610cdd57600080fd5b50610554610e9f565b348015610cf257600080fd5b5061053d6134d4565b348015610d0757600080fd5b50610554613683565b348015610d1c57600080fd5b506105f0610d2b3660046182f1565b613689565b348015610d3c57600080fd5b5061053d610d4b36600461814d565b61380f565b348015610d5c57600080fd5b5061057f613913565b348015610d7157600080fd5b50610749613918565b61053d610d8836600461814d565b61391d565b348015610d9957600080fd5b50610554613cd3565b348015610dae57600080fd5b506105a1613cd9565b348015610dc357600080fd5b506107496127fd565b348015610dd857600080fd5b506105a1613cdf565b348015610ded57600080fd5b50610e01610dfc36600461838c565b613ce5565b604051610561939291906193c4565b348015610e1c57600080fd5b506105a1613da7565b6000610e303361269e565b9050600b8181548110610e3f57fe5b600091825260209091206001601690920201015460ff16610e7b5760405162461bcd60e51b8152600401610e7290618fdc565b60405180910390fd5b6000610e85613477565b9050610e943383836001613dad565b505050565b60095481565b606481565b61200181565b60005460609060ff16610ecf5760405162461bcd60e51b8152600401610e729061886e565b3361200014610ef05760405162461bcd60e51b8152600401610e72906191c4565b600b54610fae57610eff617cf9565b60015460005b81811015610faa57600b8054600181018255600091909152835160008051602061967383398151915260169092029182019081556020808601516000805160206196b38339815191528401805460ff1916911515919091179055604086015180518794610f8693600080516020619693833981519152909101920190617d28565b506060820151610f9c9060038301906013617da2565b505050806001019050610f05565b5050505b610fb6617dcf565b6000610ff785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061408292505050565b91509150806110135761100a606461423e565b925050506111c0565b815160009060ff16611038576110318360200151846040015161429f565b905061118c565b825160ff16600114156111885782602001515160011461107d5760008051602061965383398151915260405161106d90618e95565b60405180910390a1506067611183565b6000836020015160008151811061109057fe5b602090810291909101810151516001600160a01b038116600090815260049092526040909120549091508015806110f157506001808203815481106110d157fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561112f576040516001600160a01b038316907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a261117c565b600061113e8360018403615461565b90508061117a576040516001600160a01b038416907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a25b505b6000925050505b61118c565b5060655b63ffffffff81166111b157505060408051600081526020810190915291506111c09050565b6111ba8161423e565b93505050505b9392505050565b60075460ff1681565b600f5481565b3341146111f55760405162461bcd60e51b8152600401610e7290619213565b3a156112135760405162461bcd60e51b8152600401610e7290618f1b565b825160408051828152602080840282010190915260609082801561125157816020015b61123e617df3565b8152602001906001900390816112365790505b50905060005b828110156112fb576040518060c0016040528087838151811061127657fe5b60200260200101516001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020018683815181106112b857fe5b60200260200101516001600160401b0316815260200160001515815260200160008152508282815181106112e857fe5b6020908102919091010152600101611257565b5060405163d31f968d60e01b81526120009063d31f968d90611326906110009060089060040161858b565b60206040518083038186803b15801561133e57600080fd5b505afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137691906182d1565b156116995780516015548181111561141857815b8181101561141657601580548061139d57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b031916905560030155905560168054806113f057fe5b60019003818190600052602060002001600061140c9190617e28565b905560010161138a565b505b60005b828110156116585781811061154057601584828151811061143857fe5b602090810291909101810151825460018181018555600094855293839020825160049092020180546001600160a01b039283166001600160a01b0319918216178255938301519481018054958316958516959095179094556040820151600285018054606085015160808601511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590961692909716919091179290921692909217169290921790915560a00151600390910155855160169087908390811061150857fe5b6020908102919091018101518254600181018455600093845292829020815161153a9491909101929190910190617d28565b50611650565b83818151811061154c57fe5b60200260200101516015828154811061156157fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a090910151600390910155855186908290811061161c57fe5b60200260200101516016828154811061163157fe5b90600052602060002001908051906020019061164e929190617d28565b505b60010161141b565b507fb8e726330a0dad1cf3d04e925663b17e391f1ed547d79b7f4e5f344119b442468260405161168891906193bb565b60405180910390a150505050610e94565b6060806116a68386615824565b9150915060005b60015481101561179c576000600182815481106116c657fe5b906000526020600020906004020160030154905080600014611793576000600183815481106116f157fe5b9060005260206000209060040201600301819055506120026001600160a01b031663092193ab826001858154811061172557fe5b60009182526020909120600491820201546040516001600160e01b031960e086901b168152611760926001600160a01b0390921691016184f9565b6000604051808303818588803b15801561177957600080fd5b505af115801561178d573d6000803e3d6000fd5b50505050505b506001016116ad565b50471561180a577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516117d291906193bb565b60405180910390a1604051611002904780156108fc02916000818181858888f19350505050158015611808573d6000803e3d6000fd5b505b60006003819055600555815115611825576118258282615d0e565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186257600080fd5b505af1158015611876573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a150505050505050565b60035481565b606881565b61200581565b33612002146118de5760405162461bcd60e51b8152600401610e7290619375565b60005b60155481101561196657816001600160a01b03166015828154811061190257fe5b60009182526020909120600490910201546001600160a01b0316141561195e5760016015828154811061193157fe5b9060005260206000209060040201600201601c6101000a81548160ff021916908315150217905550611966565b6001016118e1565b5050565b3341146119895760405162461bcd60e51b8152600401610e7290619213565b60105443116119aa5760405162461bcd60e51b8152600401610e7290618a90565b3a156119c85760405162461bcd60e51b8152600401610e7290618f1b565b60005460ff166119ea5760405162461bcd60e51b8152600401610e729061886e565b60006110023168056bc75e2d63100000811115611a2157611a1a8168056bc75e2d6310000063ffffffff6164fd16565b9150611a28565b5050611ca9565b6040516309a99b4f60e41b815261100290639a99b4f090611a4f903090869060040161850d565b602060405180830381600087803b158015611a6957600080fd5b505af1158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa191906183a4565b915081611aaf575050611ca9565b6000805b84811015611add57858582818110611ac757fe5b9050602002013582019150806001019050611ab3565b5080611aeb57505050611ca9565b6000806000805b89811015611ca15784898983818110611b0757fe5b90506020020135880281611b1757fe5b0493508a8a82818110611b2657fe5b9050602002016020810190611b3b919061814d565b6001600160a01b03811660009081526004602052604090205490935091508115611c57576000600180840381548110611b7057fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611bdd57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8586604051611bd091906193bb565b60405180910390a2611c51565b600354611bf0908663ffffffff61653f16565b6003908155810154611c08908663ffffffff61653f16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611c489088906193bb565b60405180910390a25b50611c99565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8585604051611c9091906193bb565b60405180910390a25b600101611af2565b505050505050505b5050436010555050565b6001546000908210611cc757506000611d7d565b60006001600160a01b031660018381548110611cdf57fe5b60009182526020909120600490910201546001600160a01b03161480611d0f57506008541580611d0f5750600a54155b80611d1e575060085460095410155b80611d2f5750611d2d82611d82565b155b80611d5857506000600b8381548110611d4457fe5b906000526020600020906016020160000154115b80611d6c57506001611d68613362565b5111155b15611d7957506000611d7d565b5060015b919050565b6001546000908210611d9657506000611d7d565b600b548210611dd35760018281548110611dac57fe5b9060005260206000209060040201600201601c9054906101000a900460ff16159050611d7d565b60018281548110611de057fe5b9060005260206000209060040201600201601c9054906101000a900460ff16158015611e2d5750600b8281548110611e1457fe5b600091825260209091206001601690920201015460ff16155b92915050565b600b54611ef157611e42617cf9565b60015460005b81811015611eed57600b8054600181018255600091909152835160008051602061967383398151915260169092029182019081556020808601516000805160206196b38339815191528401805460ff1916911515919091179055604086015180518794611ec993600080516020619693833981519152909101920190617d28565b506060820151611edf9060038301906013617da2565b505050806001019050611e48565b5050505b336110011480611f02575033612002145b611f1e5760405162461bcd60e51b8152600401610e72906188a5565b6001600160a01b03811660009081526004602052604090205480611f425750611f95565b6001810390506000600b8281548110611f5757fe5b600091825260209091206001601690920201015460ff169050611f7a8383615461565b8015611f835750805b15610e94576009805460001901905550505b50565b60015460609081906000805b82811015611feb5760018181548110611fb957fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611fe3576001909101905b600101611fa4565b50606081604051908082528060200260200182016040528015612018578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561205157816020015b606081526020019060019003908161203c5790505b50600b54600094509091508414156121cc5760005b848110156121c6576001818154811061207b57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166121be57600181815481106120ab57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106120d657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b818154811061210357fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561219b5780601f106121705761010080835404028352916020019161219b565b820191906000526020600020905b81548152906001019060200180831161217e57829003601f168201915b50505050508285815181106121ac57fe5b60209081029190910101526001909301925b600101612066565b50612268565b60005b8481101561226657600181815481106121e457fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661225e576001818154811061221457fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061223f57fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016121cf565b505b909450925050505b9091565b600181565b61100181565b60085481565b606181565b600881565b6060806000600e549050600080600c54116122ab5760156122af565b600c545b905060606122bb613362565b905060606122c882616564565b9050828251116122df579094509250612270915050565b838383510310156122f1578282510393505b83156123275760c8430461230d83838388880360008a8a6166d2565b6123258383838888038989038a8b8b8b5103016166d2565b505b606083604051908082528060200260200182016040528015612353578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561238c57816020015b60608152602001906001900390816123775790505b50905060005b8581101561240d578481815181106123a657fe5b60200260200101518382815181106123ba57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106123e657fe5b60200260200101518282815181106123fa57fe5b6020908102919091010152600101612392565b509096509450505050509091565b60065481565b61200681565b61200081565b6001600160a01b03811660009081526004602052604081205480612455576000915050611d7d565b600019016111c081611d82565b6001600160a01b0381166000908152600460205260408120548061248a576000915050611d7d565b60018082038154811061249957fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b601281815481106124ca57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529350909183018282801561255b5780601f106125305761010080835404028352916020019161255b565b820191906000526020600020905b81548152906001019060200180831161253e57829003601f168201915b505050505081565b60105481565b6001818154811061257657fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b61200381565b606681565b61271081565b33612000146126265760405162461bcd60e51b8152600401610e72906191c4565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f3890210160583838360405161265993929190619404565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6000601754600014156126965750600161269b565b506017545b90565b6001600160a01b038116600090815260046020526040812054806126d45760405162461bcd60e51b8152600401610e729061914c565b6000190192915050565b600b5461279c576126ed617cf9565b60015460005b8181101561279857600b8054600181018255600091909152835160008051602061967383398151915260169092029182019081556020808601516000805160206196b38339815191528401805460ff191691151591909117905560408601518051879461277493600080516020619693833981519152909101920190617d28565b50606082015161278a9060038301906013617da2565b5050508060010190506126f3565b5050505b6008546127a95760036008555b600a546127b6576002600a555b60006127c13361269e565b90506127cc81611cb3565b6127e85760405162461bcd60e51b8152600401610e7290618e52565b611f953382616829565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab81526020016194a86101ab913981565b60005460ff1681565b61200281565b61300081565b6402540be40081565b60005460ff1661286c5760405162461bcd60e51b8152600401610e729061886e565b336110071461288d5760405162461bcd60e51b8152600401610e7290618f49565b6128f784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506168c19050565b15612994576020811461291c5760405162461bcd60e51b8152600401610e7290619106565b604080516020601f840181900481028201810190925282815260009161295a9185858083850183828082843760009201919091525061691a92505050565b9050606481101580156129705750620186a08111155b61298c5760405162461bcd60e51b8152600401610e7290618cb3565b600255613300565b6129f484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506168c19050565b15612aa95760208114612a195760405162461bcd60e51b8152600401610e72906186f4565b604080516020601f8401819004810282018101909252828152600091612a579185858083850183828082843760009201919091525061691a92505050565b9050612710612a83601854612a77600f548561653f90919063ffffffff16565b9063ffffffff61653f16565b1115612aa15760405162461bcd60e51b8152600401610e7290618bd9565b600655613300565b612b1384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506168c19050565b15612bad5760208114612b385760405162461bcd60e51b8152600401610e729061872b565b604080516020601f8401819004810282018101909252828152600091612b769185858083850183828082843760009201919091525061691a92505050565b600c5490915080612b85575060155b808210612ba45760405162461bcd60e51b8152600401610e7290618afa565b50600855613300565b612c1684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506168c19050565b15612caf5760208114612c3b5760405162461bcd60e51b8152600401610e72906187f4565b604080516020601f8401819004810282018101909252828152600091612c799185858083850183828082843760009201919091525061691a92505050565b9050600081118015612c8b5750600a81105b612ca75760405162461bcd60e51b8152600401610e72906192a8565b600a55613300565b612d2384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506168c19050565b15612db25760208114612d485760405162461bcd60e51b8152600401610e72906187a8565b604080516020601f8401819004810282018101909252828152600091612d869185858083850183828082843760009201919091525061691a92505050565b9050600d54811115612daa5760405162461bcd60e51b8152600401610e7290618d29565b600e55613300565b612e1b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506168c19050565b15612e9d5760208114612e405760405162461bcd60e51b8152600401610e7290618f97565b604080516020601f8401819004810282018101909252828152600091612e7e9185858083850183828082843760009201919091525061691a92505050565b600d819055600e54909150811015612e9757600d54600e555b50613300565b612f0184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506168c19050565b15612faf5760208114612f265760405162461bcd60e51b8152600401610e7290618839565b604080516020601f8401819004810282018101909252828152600091612f649185858083850183828082843760009201919091525061691a92505050565b905060008111612f865760405162461bcd60e51b8152600401610e72906189a2565b6064811115612fa75760405162461bcd60e51b8152600401610e72906189ea565b600c55613300565b61301b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601581527473797374656d52657761726442617365526174696f60581b602082015291506168c19050565b156130c457602081146130405760405162461bcd60e51b8152600401610e7290619260565b604080516020601f840181900481028201810190925282815260009161307e9185858083850183828082843760009201919091525061691a92505050565b905061271061309e601854612a776006548561653f90919063ffffffff16565b11156130bc5760405162461bcd60e51b8152600401610e7290618913565b600f55613300565b61313884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f73797374656d526577617264416e74694d4556526174696f0000000000000000602082015291506168c19050565b156131e1576020811461315d5760405162461bcd60e51b8152600401610e7290618c68565b604080516020601f840181900481028201810190925282815260009161319b9185858083850183828082843760009201919091525061691a92505050565b90506127106131bb600f54612a776006548561653f90919063ffffffff16565b11156131d95760405162461bcd60e51b8152600401610e7290618dc3565b601855613300565b61324284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a8152690e8eae4dc98cadccee8d60b31b602082015291506168c19050565b156132e857602081146132675760405162461bcd60e51b8152600401610e7290618b57565b604080516020601f84018190048102820181019092528281526000916132a59185858083850183828082843760009201919091525061691a92505050565b9050600381101580156132b9575060098111155b806132c45750806001145b6132e05760405162461bcd60e51b8152600401610e7290619080565b601755613300565b60405162461bcd60e51b8152600401610e7290619305565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161333594939291906186c2565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156133915761337d81611d82565b15613389578160010191505b60010161336c565b506060816040519080825280602002602001820160405280156133be578160200160208202803683370190505b5090506000915060005b83811015613445576133d981611d82565b1561343d57600181815481106133eb57fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061341657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b6001016133c8565b509250505090565b601581565b61027181565b61100281565b60175481565b601381815481106124ca57fe5b60185481565b6000613481613362565b519050600080600c541161349657601561349a565b600c545b9050808211156134a8578091505b816134b257600191505b5090565b67016345785d8a000081565b60055481565b61100381565b61200481565b60005460ff16156134f75760405162461bcd60e51b8152600401610e7290619049565b6134ff617dcf565b6000613525604051806101e001604052806101ab81526020016194a86101ab9139614082565b91509150806135465760405162461bcd60e51b8152600401610e7290619183565b60005b82602001515181101561366b5760018360200151828151811061356857fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061363e57fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101613549565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b818110156137925761377a85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506013805490925085915081106136e257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156137705780601f1061374557610100808354040283529160200191613770565b820191906000526020600020905b81548152906001019060200180831161375357829003601f168201915b505050505061691f565b1561378a57600192505050611e2d565b600101613691565b5060125460005b81811015613803576137ea86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506012805490925085915081106136e257fe5b156137fb5760019350505050611e2d565b600101613799565b50600095945050505050565b33611001146138305760405162461bcd60e51b8152600401610e729061932c565b600b546138ee5761383f617cf9565b60015460005b818110156138ea57600b8054600181018255600091909152835160008051602061967383398151915260169092029182019081556020808601516000805160206196b38339815191528401805460ff19169115159190911790556040860151805187946138c693600080516020619693833981519152909101920190617d28565b5060608201516138dc9060038301906013617da2565b505050806001019050613845565b5050505b60006138f982616983565b905061390481611cb3565b15611966576119668282616829565b606581565b601181565b33411461393c5760405162461bcd60e51b8152600401610e7290619213565b60005460ff1661395e5760405162461bcd60e51b8152600401610e729061886e565b6000341161397e5760405162461bcd60e51b8152600401610e7290618cfa565b3a1561399c5760405162461bcd60e51b8152600401610e7290618f1b565b6001600160a01b03811660009081526004602052604090205460145434919060ff166139dc57610271600f556103e86006556014805460ff191660011790555b600f5460175460011080156139f357506000601854115b15613a18576001601754036017544381613a0957fe5b066018540281613a1557fe5b04015b600083118015613a285750600081115b15613ad5576000613a51612710613a45348563ffffffff616b0616565b9063ffffffff616b4016565b90508015613ad3576040516110029082156108fc029083906000818181858888f19350505050158015613a88573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051613ab891906193bb565b60405180910390a1613ad0848263ffffffff6164fd16565b93505b505b600083118015613ae757506000600654115b15613b8d576000613b09612710613a4560065434616b0690919063ffffffff16565b90508015613b8b5760405161dead9082156108fc029083906000818181858888f19350505050158015613b40573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051613b7091906193bb565b60405180910390a1613b88848263ffffffff6164fd16565b93505b505b8115613c8b576000600180840381548110613ba457fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615613c1157846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051613c0491906193bb565b60405180910390a2613c85565b600354613c24908563ffffffff61653f16565b6003908155810154613c3c908563ffffffff61653f16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590613c7c9087906193bb565b60405180910390a25b50613ccd565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051613cc491906193bb565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110613cf257fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff90911694919291830182828015613d9d5780601f10613d7257610100808354040283529160200191613d9d565b820191906000526020600020905b815481529060010190602001808311613d8057829003601f168201915b5050505050905083565b61100481565b6000600a5460001480613dbe575082155b80613dc95750600954155b15613dd65750600061407a565b60096000815460019003919050819055506000613e21600a54613a4586613a45600b8a81548110613e0357fe5b6000918252602090912060169091020154439063ffffffff6164fd16565b90506000600b8681548110613e3257fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b158015613e9757600080fd5b505afa158015613eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ecf91906183bc565b915091506000935080831061403057613ee88888615461565b5060405163436aa28360e11b8152600090612002906386d5450690613f11908c906004016184f9565b60206040518083038186803b158015613f2957600080fd5b505afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190618169565b6001600160a01b031614613fcf576040516328aa02b160e01b8152611001906328aa02b190613f98908b9087908a90600401618568565b600060405180830381600087803b158015613fb257600080fd5b505af1158015613fc6573d6000803e3d6000fd5b50505050614027565b6040516305bfb49960e41b815261100190635bfb499090613ff4908b906004016184f9565b600060405180830381600087803b15801561400e57600080fd5b505af1158015614022573d6000803e3d6000fd5b505050505b60019350614042565b8183106140425761404088616983565b505b6040516001600160a01b038916907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050505b949350505050565b61408a617dcf565b6000614094617dcf565b61409c617e6c565b6140ad6140a886616b82565b616ba7565b90506000805b6140bc83616bf1565b1561423057806140e1576140d76140d284616c12565b616c60565b60ff168452614228565b80600114156142235760606140fd6140f885616c12565b616ce0565b9050805160405190808252806020026020018201604052801561413a57816020015b614127617df3565b81526020019060019003908161411f5790505b508560200181905250805160405190808252806020026020018201604052801561417857816020015b60608152602001906001900390816141635790505b50604086015260005b815181101561421857614192617df3565b606060006141b28585815181106141a557fe5b6020026020010151616db1565b925092509250806141d2578860009a509a50505050505050505050614239565b82896020015185815181106141e357fe5b602002602001018190525081896040015185815181106141ff57fe5b6020026020010181905250505050806001019050614181565b506001925050614228565b614230565b6001016140b3565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161425857905050905061427e8363ffffffff16616ecb565b8160008151811061428b57fe5b60200260200101819052506111c081616ede565b60006064835111156142d6576000805160206196538339815191526040516142c690618a47565b60405180910390a1506066611e2d565b60005b83518110156143745760005b8181101561436b578481815181106142f957fe5b6020026020010151600001516001600160a01b031685838151811061431a57fe5b6020026020010151600001516001600160a01b031614156143635760008051602061965383398151915260405161435090618b8e565b60405180910390a1606692505050611e2d565b6001016142e5565b506001016142d9565b5060608060606015805480602002602001604051908101604052809291908181526020016000905b828210156144265760008481526020908190206040805160c0810182526004860290920180546001600160a01b039081168452600180830154821685870152600283015491821693850193909352600160a01b81046001600160401b03166060850152600160e01b900460ff16151560808401526003015460a0830152908352909201910161439c565b50505050905060606016805480602002602001604051908101604052809291908181526020016000905b828210156144fb5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156144e75780601f106144bc576101008083540402835291602001916144e7565b820191906000526020600020905b8154815290600101906020018083116144ca57829003601f168201915b505050505081526020019060010190614450565b50505050905060005b82518110156145585782818151811061451957fe5b60200260200101516060015160030283828151811061453457fe5b60209081029190910101516001600160401b03909116606090910152600101614504565b5060608061456889898686616f68565b915091506145768282615824565b600154604080518281526020808402820101909152929850909650600095508594509250606091508280156145b5578160200160208202803683370190505b50905060005b828110156147465760006001600160a01b03166120026001600160a01b03166386d54506600184815481106145ec57fe5b60009182526020909120600491820201546040516001600160e01b031960e085901b168152614627926001600160a01b0390921691016184f9565b60206040518083038186803b15801561463f57600080fd5b505afa158015614653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146779190618169565b6001600160a01b0316146146d957600182828151811061469357fe5b602002602001019060ff16908160ff1681525050600181815481106146b457fe5b9060005260206000209060040201600301546000146146d4578360010193505b61473e565b67016345785d8a0000600182815481106146ef57fe5b906000526020600020906004020160030154106147115784600101945061473e565b6001818154811061471e57fe5b90600052602060002090600402016003015460001461473e578360010193505b6001016145bb565b50606084604051908082528060200260200182016040528015614773578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156147a2578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156147d1578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015614800578160200160208202803683370190505b5090506000606088604051908082528060200260200182016040528015614831578160200160208202803683370190505b509050606089604051908082528060200260200182016040528015614860578160200160208202803683370190505b50905060009a506000995060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156148a857600080fd5b505afa1580156148bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148e091906183a4565b905067016345785d8a000081111561492c5760008051602061965383398151915260405161490d90619008565b60405180910390a160689e505050505050505050505050505050611e2d565b60005b8a811015614cc05789818151811061494357fe5b602002602001015160ff1660011415614a39576001818154811061496357fe5b906000526020600020906004020160030154600014614a34576001818154811061498957fe5b600091825260209091206004909102015484516001600160a01b039091169085908e9081106149b457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600181815481106149e157fe5b906000526020600020906004020160030154838d815181106149ff57fe5b60200260200101818152505060018a8d81518110614a1957fe5b602002602001019060ff16908160ff16815250508b6001019b505b614cb8565b67016345785d8a000060018281548110614a4f57fe5b90600052602060002090600402016003015410614bd45760018181548110614a7357fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898e81518110614aa457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be40060018381548110614ad957fe5b90600052602060002090600402016003015481614af257fe5b0660018381548110614b0057fe5b906000526020600020906004020160030154039050614b2883826164fd90919063ffffffff16565b898f81518110614b3457fe5b60200260200101818152505060018281548110614b4d57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878f81518110614b7e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888f81518110614bab57fe5b6020908102919091010152614bc6868263ffffffff61653f16565b95508d6001019d5050614cb8565b60018181548110614be157fe5b906000526020600020906004020160030154600014614cb85760018181548110614c0757fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848d81518110614c3857fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110614c6557fe5b906000526020600020906004020160030154838d81518110614c8357fe5b60200260200101818152505060008a8d81518110614c9d57fe5b602002602001019060ff16908160ff16815250508b6001019b505b60010161492f565b5060008415614f36576002546040516303702b2960e51b815261100491636e056520918891614cfa918e918e918d9142019060040161862a565b6020604051808303818588803b158015614d1357600080fd5b505af193505050508015614d44575060408051601f3d908101601f19168201909252614d41918101906182d1565b60015b614ebb576040516000815260443d1015614d6057506000614dfb565b60046000803e60005160e01c6308c379a08114614d81576000915050614dfb565b60043d036004833e81513d60248201116001600160401b0382111715614dac57600092505050614dfb565b80830180516001600160401b03811115614dcd576000945050505050614dfb565b8060208301013d8601811115614deb57600095505050505050614dfb565b601f01601f191660405250925050505b80614e065750614e48565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051614e3a91906186af565b60405180910390a250614eb6565b3d808015614e72576040519150601f19603f3d011682016040523d82523d6000602084013e614e77565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051614eac91906186af565b60405180910390a2505b614f36565b8015614efd577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051614ef091906193bb565b60405180910390a1614f34565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051614f2b90618771565b60405180910390a25b505b80156150ec5760005b87518110156150ea576000888281518110614f5657fe5b60200260200101519050600060018281548110614f6f57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110614fa057fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f193505050509050801561505c5760018281548110614fe157fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d918590811061503057fe5b90600052602060002090600402016003015460405161504f91906193bb565b60405180910390a26150e0565b6001828154811061506957fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d91859081106150b857fe5b9060005260206000209060040201600301546040516150d791906193bb565b60405180910390a25b5050600101614f3f565b505b8351156152e25760005b84518110156152e0578a818151811061510b57fe5b602002602001015160ff16600114156151aa576120026001600160a01b031663092193ab85838151811061513b57fe5b602002602001015187848151811061514f57fe5b60200260200101516040518363ffffffff1660e01b815260040161517391906184f9565b6000604051808303818588803b15801561518c57600080fd5b505af11580156151a0573d6000803e3d6000fd5b50505050506152d8565b60008582815181106151b857fe5b60200260200101516001600160a01b03166108fc8684815181106151d857fe5b60200260200101519081150290604051600060405180830381858888f193505050509050801561526e5785828151811061520e57fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d86848151811061524c57fe5b602002602001015160405161526191906193bb565b60405180910390a26152d6565b85828151811061527a57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d8684815181106152b857fe5b60200260200101516040516152cd91906193bb565b60405180910390a25b505b6001016150f6565b505b5050505050505050505050505060005b60015481101561534f576001818154811061530957fe5b9060005260206000209060040201600301546000146153475760006001828154811061533157fe5b9060005260206000209060040201600301819055505b6001016152f2565b5047156153bd577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d4760405161538591906193bb565b60405180910390a1604051611002904780156108fc02916000818181858888f193505050501580156153bb573d6000803e3d6000fd5b505b600060038190556005558151156153d8576153d88282615d0e565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561541557600080fd5b505af1158015615429573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b6000806001838154811061547157fe5b9060005260206000209060040201600301549050600060018080549050039050600161549b613362565b51116154d0576000600185815481106154b057fe5b906000526020600020906004020160030181905550600092505050611e2d565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161550991906193bb565b60405180910390a26001600160a01b038516600090815260046020526040812055835b600154600019018110156156f6576001816001018154811061554a57fe5b90600052602060002090600402016001828154811061556557fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b80549091830190811061562657fe5b9060005260206000209060160201600b828154811061564157fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff1990921691909117905560028084018054615698938386019390821615610100026000190190911604617e8c565b506156ab60038281019084016013617f01565b509050508060010160046000600184815481106156c457fe5b600091825260208083206004909202909101546001600160a01b0316835282019290925260400190205560010161552c565b50600180548061570257fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061575557fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906157876002830182617e28565b615795600383016000617f2b565b5050905560008183816157a457fe5b04905080156158185760015460005b81811015615815576157ec83600183815481106157cc57fe5b90600052602060002090600402016003015461653f90919063ffffffff16565b600182815481106157f957fe5b60009182526020909120600360049092020101556001016157b3565b50505b50600195945050505050565b606080600080808080615835613477565b6001549091505b8015615a6757600181039250600b838154811061585557fe5b600091825260209091206001601690920201015460ff1661587557615a5e565b6001838154811061588257fe5b600091825260208220600490910201546001600160a01b031695506158ac90869085908590613dad565b9350836158b857615a5e565b60405163436aa28360e11b81526000908190612002906386d54506906158e2908a906004016184f9565b60206040518083038186803b1580156158fa57600080fd5b505afa15801561590e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159329190618169565b90506001600160a01b038116156159bb576040516302ceee9160e11b81526120029063059ddd22906159689084906004016184f9565b60206040518083038186803b15801561598057600080fd5b505afa158015615994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159b89190618169565b91505b60005b8c51811015615a5a57876001600160a01b03168d82815181106159dd57fe5b6020026020010151600001516001600160a01b03161480615a265750826001600160a01b03168d8281518110615a0f57fe5b6020026020010151600001516001600160a01b0316145b15615a525760018d8281518110615a3957fe5b6020908102919091010151901515608090910152615a5a565b6001016159be565b5050505b6000190161583c565b5060005b8951811015615ad457898181518110615a8057fe5b60200260200101516080015180615ac0575060006001600160a01b03168a8281518110615aa957fe5b6020026020010151600001516001600160a01b0316145b15615acc578560010195505b600101615a6b565b5088518510615bbc5760408051600180825281830190925290816020015b615afa617df3565b815260200190600190039081615af2575050604080516001808252818301909252919850602082015b6060815260200190600190039081615b2357905050955088600081518110615b4757fe5b602002602001015187600081518110615b5c57fe5b602002602001018190525087600081518110615b7457fe5b602002602001015186600081518110615b8957fe5b6020026020010181905250600087600081518110615ba357fe5b6020908102919091010151901515608090910152615d01565b84895103604051908082528060200260200182016040528015615bf957816020015b615be6617df3565b815260200190600190039081615bde5790505b50965084895103604051908082528060200260200182016040528015615c3357816020015b6060815260200190600190039081615c1e5790505b5095506000915060005b8951811015615cff57898181518110615c5257fe5b602002602001015160800151158015615c95575060006001600160a01b03168a8281518110615c7d57fe5b6020026020010151600001516001600160a01b031614155b15615cf757898181518110615ca657fe5b6020026020010151888481518110615cba57fe5b6020026020010181905250888181518110615cd157fe5b6020026020010151878481518110615ce557fe5b60200260200101819052508260010192505b600101615c3d565b505b50505050505b9250929050565b600154825160005b82811015615e2b576001615d28617df3565b60018381548110615d3557fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b84811015615dff57878181518110615dc557fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b03161415615df75760009250615dff565b600101615db1565b508115615e215780516001600160a01b03166000908152600460205260408120555b5050600101615d16565b5080821115615eea57805b82811015615ee8576001805480615e4957fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b805480615e9c57fe5b60008281526020812060166000199093019283020181815560018101805460ff1916905590615ece6002830182617e28565b615edc600383016000617f2b565b50509055600101615e36565b505b6000818310615ef95781615efb565b825b905060005b8181101561629f57615fad868281518110615f1757fe5b602002602001015160018381548110615f2c57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152617334565b616161578060010160046000888481518110615fc557fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555085818151811061600157fe5b60200260200101516001828154811061601657fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106160d157fe5b6020026020010151600b82815481106160e657fe5b9060005260206000209060160201600201908051906020019061610a929190617d28565b506000600b828154811061611a57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061614b57fe5b6000918252602090912060169091020155616297565b85818151811061616d57fe5b6020026020010151606001516001828154811061618657fe5b906000526020600020906004020160020160146101000a8154816001600160401b0302191690836001600160401b0316021790555061624c8582815181106161ca57fe5b6020026020010151600b83815481106161df57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156137705780601f1061374557610100808354040283529160200191613770565b6162975784818151811061625c57fe5b6020026020010151600b828154811061627157fe5b90600052602060002090601602016002019080519060200190616295929190617d28565b505b600101615f00565b5082821115616477576162b0617cf9565b835b83811015616474578581815181106162c657fe5b6020026020010151826040018190525060018782815181106162e457fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206196738339815191528101918255858301516000805160206196b38339815191528201805491151560ff199092169190911790559285015180518694929361641a9360008051602061969383398151915201920190617d28565b5060608201516164309060038301906013617da2565b505050806001016004600089848151811061644757fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016162b2565b50505b61647f617390565b616487617572565b6000600981905560015493505b838110156164f5576000600b82815481106164ab57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b8054839081106164dc57fe5b6000918252602090912060169091020155600101616494565b505050505050565b60006111c083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250617760565b6000828201838110156111c05760405162461bcd60e51b8152600401610e72906188dc565b6001548151604080518281526020808402820101909152606092919083908280156165a357816020015b606081526020019060019003908161658e5790505b50600b5490915083146165ba579250611d7d915050565b60005b828110156166c957600b6001600460008985815181106165d957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061660d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156166a55780601f1061667a576101008083540402835291602001916166a5565b820191906000526020600020905b81548152906001019060200180831161668857829003601f168201915b50505050508282815181106166b657fe5b60209081029190910101526001016165bd565b50949350505050565b60005b8281101561681f57600082878388016040516020016166f59291906184eb565b6040516020818303038152906040528051906020012060001c8161671557fe5b06905080850182870114616816576000898388018151811061673357fe5b602002602001015190506060898489018151811061674d57fe5b602002602001015190508a8388018151811061676557fe5b60200260200101518b858a018151811061677b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106167aa57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505089838801815181106167d857fe5b60200260200101518a858a01815181106167ee57fe5b6020026020010181905250808a8489018151811061680857fe5b602002602001018190525050505b506001016166d5565b5050505050505050565b600980546001908101909155600b80548390811061684357fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b828154811061687957fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b6000816040516020016168d491906184cf565b60405160208183030381529060405280519060200120836040516020016168fb91906184cf565b6040516020818303038152906040528051906020012014905092915050565b015190565b81518151600091600191811480831461693b5760009250616979565b600160208701838101602088015b6002848385100114156169745780518351146169685760009650600093505b60209283019201616949565b505050505b5090949350505050565b6001600160a01b038116600090815260046020526040812054806169ac57506000199050611d7d565b6001810390506000600182815481106169c157fe5b90600052602060002090600402016003015490506000600183815481106169e457fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90616a3d9085906193bb565b60405180910390a280616a5557829350505050611d7d565b6000818381616a6057fe5b0490508015616afc5760005b84811015616aae57616a8582600183815481106157cc57fe5b60018281548110616a9257fe5b6000918252602090912060036004909202010155600101616a6c565b50600180549085015b81811015616af957616ad083600183815481106157cc57fe5b60018281548110616add57fe5b6000918252602090912060036004909202010155600101616ab7565b50505b5091949350505050565b600082616b1557506000611e2d565b82820282848281616b2257fe5b04146111c05760405162461bcd60e51b8152600401610e7290618eda565b60006111c083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061778c565b616b8a617f3a565b506040805180820190915281518152602082810190820152919050565b616baf617e6c565b616bb8826177c3565b616bc157600080fd5b6000616bd083602001516177fd565b60208085015160408051808201909152868152920190820152915050919050565b6000616bfb617f3a565b505080518051602091820151919092015191011190565b616c1a617f3a565b616c2382616bf1565b616c2c57600080fd5b60208201516000616c3c82617860565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590616c7557508151602110155b616c7e57600080fd5b6000616c8d83602001516177fd565b90508083600001511015616cb35760405162461bcd60e51b8152600401610e72906190cf565b8251602080850151830180519284900392918310156166c957506020919091036101000a90049392505050565b6060616ceb826177c3565b616cf457600080fd5b6000616cff83617941565b9050606081604051908082528060200260200182016040528015616d3d57816020015b616d2a617f3a565b815260200190600190039081616d225790505b5090506000616d4f85602001516177fd565b60208601510190506000805b84811015616da657616d6c83617860565b9150604051806040016040528083815260200184815250848281518110616d8f57fe5b602090810291909101015291810191600101616d5b565b509195945050505050565b616db9617df3565b60606000616dc5617df3565b6060616dcf617e6c565b616dd887616ba7565b90506000805b616de783616bf1565b15616ebc5780616e1257616e02616dfd84616c12565b61799d565b6001600160a01b03168552616eb4565b8060011415616e3a57616e27616dfd84616c12565b6001600160a01b03166020860152616eb4565b8060021415616e6257616e4f616dfd84616c12565b6001600160a01b03166040860152616eb4565b8060031415616e8e57616e776140d284616c12565b6001600160401b0316606086015260019150616eb4565b8060041415616eaf57616ea8616ea384616c12565b6179b7565b9350616eb4565b616ebc565b600101616dde565b50929791965091945092505050565b6060611e2d616ed983617a27565b617b0d565b6060815160001415616eff5750604080516000815260208101909152611d7d565b606082600081518110616f0e57fe5b602002602001015190506000600190505b8351811015616f4f57616f4582858381518110616f3857fe5b6020026020010151617b5f565b9150600101616f1f565b506111c0616f62825160c060ff16617bdc565b82617b5f565b60608060006120026001600160a01b031663c473318f6040518163ffffffff1660e01b815260040160206040518083038186803b158015616fa857600080fd5b505afa158015616fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616fe091906183a4565b90508085518851011015616ff5575083518651015b60608160405190808252806020026020018201604052801561703157816020015b61701e617df3565b8152602001906001900390816170165790505b50905060608260405190808252806020026020018201604052801561706a57816020015b60608152602001906001900390816170555790505b50905060008060005b8b518310806170825750895182105b801561708d57508581105b15617322578b518314156170fd578982815181106170a757fe5b60200260200101518582815181106170bb57fe5b60200260200101819052508882815181106170d257fe5b60200260200101518482815181106170e657fe5b602090810291909101015260019182019101617073565b8951821415617168578b838151811061711257fe5b602002602001015185828151811061712657fe5b60200260200101819052508a838151811061713d57fe5b602002602001015184828151811061715157fe5b602090810291909101015260019283019201617073565b89828151811061717457fe5b6020026020010151606001516001600160401b03168c848151811061719557fe5b6020026020010151606001516001600160401b03161115617211578b83815181106171bc57fe5b60200260200101518582815181106171d057fe5b60200260200101819052508a83815181106171e757fe5b60200260200101518482815181106171fb57fe5b602002602001018190525082600101925061731a565b89828151811061721d57fe5b6020026020010151606001516001600160401b03168c848151811061723e57fe5b6020026020010151606001516001600160401b031610156172ba5789828151811061726557fe5b602002602001015185828151811061727957fe5b602002602001018190525088828151811061729057fe5b60200260200101518482815181106172a457fe5b602002602001018190525081600101915061731a565b8982815181106172c657fe5b6020026020010151600001516001600160a01b03168c84815181106172e757fe5b6020026020010151600001516001600160a01b0316101561730e578b83815181106171bc57fe5b8982815181106170a757fe5b600101617073565b50929a91995090975050505050505050565b805182516000916001600160a01b03918216911614801561736e575081602001516001600160a01b031683602001516001600160a01b0316145b80156111c05750506040908101519101516001600160a01b0390811691161490565b601254601354808211156173db57805b828110156173d95760128054806173b357fe5b6001900381819060005260206000200160006173cf9190617e28565b90556001016173a0565b505b60008183106173ea57816173ec565b825b905060005b81811015617504576174a96012828154811061740957fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156174975780601f1061746c57610100808354040283529160200191617497565b820191906000526020600020905b81548152906001019060200180831161747a57829003601f168201915b5050505050601383815481106136e257fe5b6174fc57601381815481106174ba57fe5b90600052602060002001601282815481106174d157fe5b9060005260206000200190805460018160011615610100020316600290046174fa929190617e8c565b505b6001016173f1565b5082821115610e9457825b82811015613ccd5760126013828154811061752657fe5b6000918252602080832084546001818101875595855291909320929091018054617569949390920192909160026101009282161592909202600019011604617e8c565b5060010161750f565b601354600b54808211156175bd57805b828110156175bb57601380548061759557fe5b6001900381819060005260206000200160006175b19190617e28565b9055600101617582565b505b60008183106175cc57816175ce565b825b905060005b818110156176ed5761768b601382815481106175eb57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156176795780601f1061764e57610100808354040283529160200191617679565b820191906000526020600020905b81548152906001019060200180831161765c57829003601f168201915b5050505050600b83815481106161df57fe5b6176e557600b818154811061769c57fe5b9060005260206000209060160201600201601382815481106176ba57fe5b9060005260206000200190805460018160011615610100020316600290046176e3929190617e8c565b505b6001016175d3565b5082821115610e9457825b82811015613ccd576013600b828154811061770f57fe5b60009182526020808320845460018082018755958552919093206016929092029092016002908101805461775795939094019390926000199082161561010002011604617e8c565b506001016176f8565b600081848411156177845760405162461bcd60e51b8152600401610e7291906186af565b505050900390565b600081836177ad5760405162461bcd60e51b8152600401610e7291906186af565b5060008385816177b957fe5b0495945050505050565b80516000906177d457506000611d7d565b6020820151805160001a9060c08210156177f357600092505050611d7d565b5060019392505050565b8051600090811a6080811015617817576000915050611d7d565b60b8811080617832575060c08110801590617832575060f881105b15617841576001915050611d7d565b60c08110156178555760b519019050611d7d565b60f519019050611d7d565b80516000908190811a608081101561787b576001915061793a565b60b881101561789057607e198101915061793a565b60c08110156178e157600060b78203600186019550806020036101000a8651049150600181018201935050808310156178db5760405162461bcd60e51b8152600401610e7290618d98565b5061793a565b60f88110156178f65760be198101915061793a565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156179385760405162461bcd60e51b8152600401610e7290618d98565b505b5092915050565b805160009061795257506000611d7d565b6000809050600061796684602001516177fd565b602085015185519181019250015b808210156179945761798582617860565b82019150826001019250617974565b50909392505050565b80516000906015146179ae57600080fd5b611e2d82616c60565b80516060906179c557600080fd5b60006179d483602001516177fd565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015617a0b576020820181803683370190505b50905060008160200190506166c9848760200151018285617cae565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416617a6b57506018617a8f565b6fffffffffffffffffffffffffffffffff198416617a8b57506010617a8f565b5060005b6020811015617ac557818181518110617aa457fe5b01602001516001600160f81b03191615617abd57617ac5565b600101617a8f565b60008160200390506060816040519080825280601f01601f191660200182016040528015617afa576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015617b3f5750607f60f81b82600081518110617b2d57fe5b01602001516001600160f81b03191611155b15617b4b575080611d7d565b611e2d617b5d8351608060ff16617bdc565b835b6060806040519050835180825260208201818101602087015b81831015617b90578051835260209283019201617b78565b50855184518101855292509050808201602086015b81831015617bbd578051835260209283019201617ba5565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310617c065760405162461bcd60e51b8152600401610e7290618ad2565b60408051600180825281830190925260609160208201818036833701905050905060378411617c605782840160f81b81600081518110617c4257fe5b60200101906001600160f81b031916908160001a9053509050611e2d565b6060617c6b85617a27565b90508381510160370160f81b82600081518110617c8457fe5b60200101906001600160f81b031916908160001a905350617ca58282617b5f565b95945050505050565b80617cb857610e94565b5b60208110617cd8578251825260209283019290910190601f1901617cb9565b915181516020939093036101000a6000190180199091169216919091179052565b60405180608001604052806000815260200160001515815260200160608152602001617d23617f54565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617d6957805160ff1916838001178555617d96565b82800160010185558215617d96579182015b82811115617d96578251825591602001919060010190617d7b565b506134b2929150617f73565b8260138101928215617d965791602002820182811115617d96578251825591602001919060010190617d7b565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b50805460018160011615610100020316600290046000825580601f10617e4e5750611f95565b601f016020900490600052602060002090810190611f959190617f73565b6040518060400160405280617e7f617f3a565b8152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617ec55780548555617d96565b82800160010185558215617d9657600052602060002091601f016020900482015b82811115617d96578254825591600101919060010190617ee6565b8260138101928215617d965791820182811115617d96578254825591600101919060010190617ee6565b50611f95906013810190617f73565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b61269b91905b808211156134b25760008155600101617f79565b8035611e2d81619492565b60008083601f840112617fa9578182fd5b5081356001600160401b03811115617fbf578182fd5b6020830191508360208083028501011115615d0757600080fd5b6000601f8381840112617fea578182fd5b8235617ffd617ff882619447565b619421565b818152925060208084019085810160005b8481101561808f578135880189603f82011261802957600080fd5b838101356001600160401b0381111561804157600080fd5b618052818901601f19168601619421565b81815260408c8184860101111561806857600080fd5b8281850188840137506000918101860191909152855250928201929082019060010161800e565b50505050505092915050565b600082601f8301126180ab578081fd5b81356180b9617ff882619447565b8181529150602080830190848101818402860182018710156180da57600080fd5b6000805b8581101561808f5782356001600160401b03811681146180fc578283fd5b855293830193918301916001016180de565b60008083601f84011261811f578182fd5b5081356001600160401b03811115618135578182fd5b602083019150836020828501011115615d0757600080fd5b60006020828403121561815e578081fd5b81356111c081619492565b60006020828403121561817a578081fd5b81516111c081619492565b6000806000806040858703121561819a578283fd5b84356001600160401b03808211156181b0578485fd5b6181bc88838901617f98565b909650945060208701359150808211156181d4578384fd5b506181e187828801617f98565b95989497509550505050565b600080600060608486031215618201578283fd5b83356001600160401b0380821115618217578485fd5b81860187601f820112618228578586fd5b80359250618238617ff884619447565b80848252602080830192508084018b82838902870101111561825857898afd5b8994505b868510156182825761826e8c82617f8d565b84526001949094019392810192810161825c565b509097508801359350505080821115618299578384fd5b6182a58783880161809b565b935060408601359150808211156182ba578283fd5b506182c786828701617fd9565b9150509250925092565b6000602082840312156182e2578081fd5b815180151581146111c0578182fd5b60008060208385031215618303578182fd5b82356001600160401b03811115618318578283fd5b6183248582860161810e565b90969095509350505050565b60008060008060408587031215618345578384fd5b84356001600160401b038082111561835b578586fd5b6183678883890161810e565b9096509450602087013591508082111561837f578384fd5b506181e18782880161810e565b60006020828403121561839d578081fd5b5035919050565b6000602082840312156183b5578081fd5b5051919050565b600080604083850312156183ce578182fd5b505080516020909101519092909150565b6000806000604084860312156183f3578081fd5b833560ff81168114618403578182fd5b925060208401356001600160401b0381111561841d578182fd5b6184298682870161810e565b9497909650939450505050565b6000815180845260208085019450808401835b8381101561846e5781516001600160a01b031687529582019590820190600101618449565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526184bb816020860160208601619466565b601f01601f19169290920160200192915050565b600082516184e1818460208701619466565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6001600160a01b0392909216825260ff16602082015260400190565b6000602082526111c06020830184618436565b6000604082526185cd6040830185618436565b602083820381850152818551808452828401915082838202850101838801865b8381101561861b57601f198784030185526186098383516184a3565b948601949250908501906001016185ed565b50909998505050505050505050565b60006080825261863d6080830187618436565b828103602084810191909152865180835287820192820190845b8181101561867357845183529383019391830191600101618657565b505084810360408601526186878188618436565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b6000602082526111c060208301846184a3565b6000604082526186d6604083018688618479565b82810360208401526186e9818587618479565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601f908201527f6f6e6c7920736c617368206f72207374616b6548756220636f6e747261637400604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526063908201527f7468652073797374656d52657761726442617365526174696f20706c7573206260408201527f75726e526174696f20616e642073797374656d526577617264416e74694d455660608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252601d908201527f6c656e677468206f66207475726e4c656e677468206d69736d61746368000000604082015260600190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526063908201527f746865206275726e526174696f20706c75732073797374656d5265776172644260408201527f617365526174696f20616e642073797374656d526577617264416e74694d455660608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b6020808252602b908201527f6c656e677468206f662073797374656d526577617264416e74694d455652617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526063908201527f7468652073797374656d526577617264416e74694d4556526174696f20706c7560408201527f73206275726e526174696f20616e642073797374656d5265776172644261736560608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252602f908201527f746865207475726e4c656e6774682073686f756c6420626520696e205b332c3960408201526e5d206f7220657175616c20746f203160881b606082015260800190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526028908201527f6c656e677468206f662073797374656d52657761726442617365526174696f206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206d757374206265207374616b6548756200604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152617ca560608301846184a3565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152617ca5604083018486618479565b6040518181016001600160401b038111828210171561943f57600080fd5b604052919050565b60006001600160401b0382111561945c578081fd5b5060209081020190565b60005b83811015619481578181015183820152602001619469565b83811115613ccd5750506000910152565b6001600160a01b0381168114611f9557600080fdfef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a \ No newline at end of file diff --git a/core/systemcontracts/bohr/mainnet/StakeHubContract b/core/systemcontracts/bohr/mainnet/StakeHubContract new file mode 100644 index 0000000000..71bc9ad32c --- /dev/null +++ b/core/systemcontracts/bohr/mainnet/StakeHubContract @@ -0,0 +1 @@ +608060405260043610620003ff5760003560e01c80638456cb59116200020f578063cbb04d9d1162000123578063e992aaf511620000ad578063f80a34021162000078578063f80a34021462000c98578063fb50b31f1462000cbd578063fc0c5ff11462000ce2578063ff69ab611462000cfa57600080fd5b8063e992aaf51462000c15578063efdbf0e11462000c2d578063f1f74d841462000c69578063f1fad1041462000c8157600080fd5b8063d8ca511f11620000ee578063d8ca511f1462000ba8578063daacdb661462000bc0578063dbda7fb31462000bd8578063e8f67c3b1462000bfd57600080fd5b8063cbb04d9d1462000b04578063d115a2061462000b45578063d6ca429d1462000b5e578063d7c2dfc81462000b8357600080fd5b8063ac43175111620001a5578063bff02e201162000170578063bff02e201462000a91578063c38fbec81462000ac7578063c473318f1462000aec578063c8509d8114620008e557600080fd5b8063ac4317511462000a0f578063b187bd261462000a34578063baa7199e1462000a54578063bdceadf31462000a7957600080fd5b80638cd22b2211620001e65780638cd22b22146200097a578063982ef0a7146200099f578063a43569b314620009b6578063aad3ec9614620009ea57600080fd5b80638456cb59146200090a57806386d5450614620009225780638a4d3fa8146200095c57600080fd5b806349f41a42116200031357806364028fbd116200029d57806375cc7d89116200026857806375cc7d89146200089057806376e7d6d614620008b55780638129fc1c14620008cd578063831d65d114620008e557600080fd5b806364028fbd14620007cb578063663706d314620007e25780636ec01b2714620008135780636f8e2fa4146200086b57600080fd5b80634e6fd6c411620002de5780634e6fd6c4146200073257806359491871146200074a5780635e7cc1c9146200076f57806363a036b5146200079457600080fd5b806349f41a4214620006995780634a49ac4c14620006be5780634bf6c88214620006e35780634d99dd16146200070d57600080fd5b80631fa8882b1162000395578063417c73a71162000360578063417c73a714620005e5578063449ecfe6146200060a57806345211bfd146200062f5780634838d165146200065457600080fd5b80631fa8882b14620005555780632b727c86146200056e5780632e8e8c7114620005935780633840998814620005cd57600080fd5b8063092193ab11620003d6578063092193ab14620004a05780630e9fbf5114620004b75780631182b87514620004dc57806317b4f353146200051057600080fd5b8063046f7da2146200041f578063059ddd2214620004375780630661806e146200047957600080fd5b366200041a5760345460ff166001146200041857600080fd5b005b600080fd5b3480156200042c57600080fd5b506200041862000d12565b3480156200044457600080fd5b506200045c620004563660046200991e565b62000da4565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200048657600080fd5b506200049160365481565b60405190815260200162000470565b62000418620004b13660046200991e565b620011cc565b348015620004c457600080fd5b5062000418620004d636600462009982565b6200181d565b348015620004e957600080fd5b5062000501620004fb366004620099c7565b62001b49565b60405162000470919062009a7a565b3480156200051d57600080fd5b506200045c6200052f36600462009b70565b80516020818301810180516045825292820191909301209152546001600160a01b031681565b3480156200056257600080fd5b50620004916201518081565b3480156200057b57600080fd5b506200045c6200058d3660046200991e565b62001ebc565b348015620005a057600080fd5b506200045c620005b23660046200991e565b604d602052600090815260409020546001600160a01b031681565b348015620005da57600080fd5b506200049160375481565b348015620005f257600080fd5b5062000418620006043660046200991e565b62001f11565b3480156200061757600080fd5b5062000418620006293660046200991e565b62001f93565b3480156200063c57600080fd5b50620004186200064e3660046200991e565b62002178565b3480156200066157600080fd5b5062000688620006733660046200991e565b60016020526000908152604090205460ff1681565b604051901515815260200162000470565b348015620006a657600080fd5b5062000418620006b83660046200991e565b62002377565b348015620006cb57600080fd5b5062000418620006dd3660046200991e565b62002593565b348015620006f057600080fd5b50620006fa600881565b60405160ff909116815260200162000470565b3480156200071a57600080fd5b50620004186200072c36600462009bc5565b6200260f565b3480156200073f57600080fd5b506200045c61dead81565b3480156200075757600080fd5b50620004186200076936600462009c03565b62002c3f565b3480156200077c57600080fd5b50620004186200078e36600462009c73565b62003a38565b348015620007a157600080fd5b50620007b9620007b336600462009c93565b62003c62565b60405162000470949392919062009cfc565b62000418620007dc36600462009db8565b62004307565b348015620007ef57600080fd5b5062000491620008013660046200991e565b60446020526000908152604090205481565b3480156200082057600080fd5b5062000838620008323660046200991e565b6200498b565b6040805182516001600160401b039081168252602080850151821690830152928201519092169082015260600162000470565b3480156200087857600080fd5b50620005016200088a3660046200991e565b62004a30565b3480156200089d57600080fd5b5062000418620008af3660046200991e565b62004e5c565b348015620008c257600080fd5b5062000491603d5481565b348015620008da57600080fd5b50620004186200502e565b348015620008f257600080fd5b506200041862000904366004620099c7565b62005345565b3480156200091757600080fd5b5062000418620053af565b3480156200092f57600080fd5b506200045c620009413660046200991e565b6043602052600090815260409020546001600160a01b031681565b3480156200096957600080fd5b5062000491670de0b6b3a764000081565b3480156200098757600080fd5b50620004916200099936600462009bc5565b62005447565b62000418620009b036600462009e90565b62005500565b348015620009c357600080fd5b50620009db620009d53660046200991e565b62005b9d565b60405162000470919062009ece565b348015620009f757600080fd5b506200041862000a0936600462009bc5565b62005e8a565b34801562000a1c57600080fd5b506200041862000a2e36600462009f4b565b62005ef7565b34801562000a4157600080fd5b5060005462010000900460ff1662000688565b34801562000a6157600080fd5b506200041862000a733660046200a004565b62006d96565b34801562000a8657600080fd5b5062000491603c5481565b34801562000a9e57600080fd5b5062000ab662000ab036600462009c93565b62006f63565b60405162000470939291906200a060565b34801562000ad457600080fd5b506200041862000ae63660046200991e565b6200713f565b34801562000af957600080fd5b506200049160385481565b34801562000b1157600080fd5b5062000b2962000b233660046200991e565b62007401565b6040805193845291151560208401529082015260600162000470565b34801562000b5257600080fd5b5062000491620186a081565b34801562000b6b57600080fd5b506200041862000b7d3660046200a0bd565b62007844565b34801562000b9057600080fd5b506200041862000ba23660046200a1a6565b62007a6a565b34801562000bb557600080fd5b5062000491603b5481565b34801562000bcd57600080fd5b506200049160495481565b34801562000be557600080fd5b506200045c62000bf73660046200991e565b62007b60565b34801562000c0a57600080fd5b506200049160355481565b34801562000c2257600080fd5b5062000491603a5481565b34801562000c3a57600080fd5b506200049162000c4c36600462009b70565b805160208183018101805160468252928201919093012091525481565b34801562000c7657600080fd5b5062000491603e5481565b34801562000c8e57600080fd5b50620006fa601181565b34801562000ca557600080fd5b506200049162000cb736600462009bc5565b62007f8a565b34801562000cca57600080fd5b506200041862000cdc36600462009f4b565b62007ffb565b34801562000cef57600080fd5b506200049160395481565b34801562000d0757600080fd5b5062000491604a5481565b600054630100000090046001600160a01b0316331462000d45576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff1662000d6f57604051636cd6020160e01b815260040160405180910390fd5b6000805462ff0000191681556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f99190a1565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162000e0f906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462000e3d906200a20c565b801562000e8e5780601f1062000e625761010080835404028352916020019162000e8e565b820191906000526020600020905b81548152906001019060200180831162000e7057829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462000eb9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462000ee7906200a20c565b801562000f385780601f1062000f0c5761010080835404028352916020019162000f38565b820191906000526020600020905b81548152906001019060200180831162000f1a57829003601f168201915b5050505050815260200160018201805462000f53906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462000f81906200a20c565b801562000fd25780601f1062000fa65761010080835404028352916020019162000fd2565b820191906000526020600020905b81548152906001019060200180831162000fb457829003601f168201915b5050505050815260200160028201805462000fed906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200101b906200a20c565b80156200106c5780601f1062001040576101008083540402835291602001916200106c565b820191906000526020600020905b8154815290600101906020018083116200104e57829003601f168201915b5050505050815260200160038201805462001087906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620010b5906200a20c565b8015620011065780601f10620010da5761010080835404028352916020019162001106565b820191906000526020600020905b815481529060010190602001808311620010e857829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620011a5575050509190925250509051949350505050565b3361100014620011f857604051630f22c43960e41b815261100060048201526024015b60405180910390fd5b6001600160a01b0380821660009081526043602090815260408083205484168084526041835281842082516101808101845281548716815260018201548716948101949094526002810154909516918301919091526003840154606083015260048401805491949160808401919062001271906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200129f906200a20c565b8015620012f05780601f10620012c457610100808354040283529160200191620012f0565b820191906000526020600020905b815481529060010190602001808311620012d257829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200131b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462001349906200a20c565b80156200139a5780601f106200136e576101008083540402835291602001916200139a565b820191906000526020600020905b8154815290600101906020018083116200137c57829003601f168201915b50505050508152602001600182018054620013b5906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620013e3906200a20c565b8015620014345780601f10620014085761010080835404028352916020019162001434565b820191906000526020600020905b8154815290600101906020018083116200141657829003601f168201915b505050505081526020016002820180546200144f906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200147d906200a20c565b8015620014ce5780601f10620014a257610100808354040283529160200191620014ce565b820191906000526020600020905b815481529060010190602001808311620014b057829003601f168201915b50505050508152602001600382018054620014e9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462001517906200a20c565b8015620015685780601f106200153c5761010080835404028352916020019162001568565b820191906000526020600020905b8154815290600101906020018083116200154a57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162001607575050509190925250505060408101519091506001600160a01b031615806200164457508060e001515b156200170157604051611002903490600081818185875af1925050503d80600081146200168e576040519150601f19603f3d011682016040523d82523d6000602084013e62001693565b606091505b505050816001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d604051620016f49060208082526011908201527024a72b20a624a22fab20a624a220aa27a960791b604082015260600190565b60405180910390a2505050565b60408181015160c0830151519151632f303ebb60e11b81526001600160401b0390921660048301526001600160a01b031690635e607d769034906024016000604051808303818588803b1580156200175857600080fd5b505af11580156200176d573d6000803e3d6000fd5b5050505050816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea634604051620017ae91815260200190565b60405180910390a26040808201519051633041949b60e01b815261200591633041949b91620017e3919086906004016200a242565b600060405180830381600087803b158015620017fe57600080fd5b505af115801562001813573d6000803e3d6000fd5b5050505050505b50565b33611001146200184557604051630f22c43960e41b81526110016004820152602401620011ef565b60005462010000900460ff16156200187057604051631785c68160e01b815260040160405180910390fd5b600060458383604051620018869291906200a25c565b908152604051908190036020019020546001600160a01b03169050620018ae603f8262008265565b620018cc5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038116600090815260416020526040812090620018f462015180426200a282565b604a546000828152604b602052604090205491925011620019285760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b60205260408120805460019290620019499084906200a2a5565b90915550506040516046906200196390879087906200a25c565b908152602001604051809103902054600014158015620019b45750426201518060468787604051620019979291906200a25c565b908152602001604051809103902054620019b291906200a2a5565b105b15620019d357604051631898eb6b60e01b815260040160405180910390fd5b600080620019e385600262008288565b915091508162001a0657604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562001a59573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7f91906200a2bb565b905062001a8d858362008312565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600260405162001acd939291906200a2eb565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162001b0b916001600160a01b0316908a906004016200a242565b600060405180830381600087803b15801562001b2657600080fd5b505af115801562001b3b573d6000803e3d6000fd5b505050505050505050505050565b6060336120001462001b7357604051630f22c43960e41b81526120006004820152602401620011ef565b60005462010000900460ff161562001b9e57604051631785c68160e01b815260040160405180910390fd5b6034805460ff19166001179055604080516020601f8501819004810282018101909252838152600091829162001bef918790879081908401838280828437600092019190915250620084d992505050565b915091508062001c125760405163035ede3560e21b815260040160405180910390fd5b816060015160000362001c38575050604080516000815260208101909152905062001eab565b606082015160405163e04c83a760e01b81526000916110049163e04c83a79162001c689160040190815260200190565b6020604051808303816000875af115801562001c88573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cae91906200a31a565b90508062001d555782602001516001600160a01b031683600001516001600160a01b03167fa9084c89a291b43bc984e045671d394974730a159b9a826b577bb148ab504c3a8560600151600160405162001d0a9291906200a33a565b60405180910390a385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965062001eab95505050505050565b600062001d62846200863c565b9050600081600481111562001d7b5762001d7b6200a2d5565b0362001d9d575050604080516000815260208101909152925062001eab915050565b6040516000906110049047908381818185875af1925050503d806000811462001de3576040519150601f19603f3d011682016040523d82523d6000602084013e62001de8565b606091505b505090508062001e0b576040516312171d8360e31b815260040160405180910390fd5b84602001516001600160a01b031685600001516001600160a01b03167fa9084c89a291b43bc984e045671d394974730a159b9a826b577bb148ab504c3a87606001518560405162001e5e9291906200a33a565b60405180910390a387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092985062001eab975050505050505050565b6034805460ff191690559392505050565b60008162001ecc603f8262008265565b62001eea5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160205260409020600d01541691505b50919050565b600054630100000090046001600160a01b0316331462001f44576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a250565b60005462010000900460ff161562001fbe57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562001ff05760405163b1d02c3d60e01b815260040160405180910390fd5b8062001ffe603f8262008265565b6200201c5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166000908152604160205260409020600a81015460ff166200205a57604051634b6b857d60e01b815260040160405180910390fd5b6036546002820154604051630913db4760e01b81526001600160a01b03868116600483015290911690630913db4790602401602060405180830381865afa158015620020aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d091906200a2bb565b1015620020f0576040516317b204bf60e11b815260040160405180910390fd5b4281600b01541115620021165760405163170cb76760e21b815260040160405180910390fd5b600a8101805460ff1916905560498054600191906000906200213a9084906200a361565b90915550506040516001600160a01b038416907f9390b453426557da5ebdc31f19a37753ca04addf656d32f35232211bb2af3f1990600090a2505050565b60005462010000900460ff1615620021a357604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620021d55760405163b1d02c3d60e01b815260040160405180910390fd5b620021df62008ca5565b620021ec603f8262008265565b6200220a5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166200223257604051636520611b60e11b815260040160405180910390fd5b6001600160a01b03828116600090815260436020526040902054161515806200227357506001600160a01b03821660009081526047602052604090205460ff165b156200229257604051631e6f587560e11b815260040160405180910390fd5b60006200229e62008ca5565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620022d19062015180906200a2a5565b1115620022f157604051631f92cdbd60e11b815260040160405180910390fd5b80546001600160a01b039081166000908152604460209081526040808320429081905585548986166001600160a01b031991821681178855600c88019290925581855260439093528184208054958816959093168517909255519092917f6e4e747ca35203f16401c69805c7dd52fff67ef60b0ebc5c7fe16890530f223591a350505050565b3362002385603f8262008265565b620023a35760405163056e881160e01b815260040160405180910390fd5b60005462010000900460ff1615620023ce57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620024005760405163b1d02c3d60e01b815260040160405180910390fd5b6001600160a01b038281166000908152604d602052604090205416156200243a5760405163bebdc75760e01b815260040160405180910390fd5b62002447603f8362008265565b15620024665760405163bebdc75760e01b815260040160405180910390fd5b336000818152604160205260409020600d01546001600160a01b039081169084168103620024a75760405163bebdc75760e01b815260040160405180910390fd5b6001600160a01b03811615620024de576001600160a01b0381166000908152604d6020526040902080546001600160a01b03191690555b6001600160a01b038281166000908152604160205260409020600d0180546001600160a01b03191691861691821790551562002543576001600160a01b038481166000908152604d6020526040902080546001600160a01b0319169184169190911790555b836001600160a01b0316816001600160a01b0316836001600160a01b03167fcbb728765de145e99c00e8ae32a325231e850359b7b8a6da3b84d672ab3f1d0a60405160405180910390a450505050565b600054630100000090046001600160a01b03163314620025c6576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe0db3499b7fdc3da4cddff5f45d694549c19835e7f719fb5606d3ad1a5de40119190a250565b60005462010000900460ff16156200263a57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200266c5760405163b1d02c3d60e01b815260040160405180910390fd5b816200267a603f8262008265565b620026985760405163056e881160e01b815260040160405180910390fd5b81600003620026ba57604051639811e0c760e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002722906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002750906200a20c565b8015620027a15780601f106200277557610100808354040283529160200191620027a1565b820191906000526020600020905b8154815290600101906020018083116200278357829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620027cc906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620027fa906200a20c565b80156200284b5780601f106200281f576101008083540402835291602001916200284b565b820191906000526020600020905b8154815290600101906020018083116200282d57829003601f168201915b5050505050815260200160018201805462002866906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002894906200a20c565b8015620028e55780601f10620028b957610100808354040283529160200191620028e5565b820191906000526020600020905b815481529060010190602001808311620028c757829003601f168201915b5050505050815260200160028201805462002900906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200292e906200a20c565b80156200297f5780601f1062002953576101008083540402835291602001916200297f565b820191906000526020600020905b8154815290600101906020018083116200296157829003601f168201915b505050505081526020016003820180546200299a906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620029c8906200a20c565b801562002a195780601f10620029ed5761010080835404028352916020019162002a19565b820191906000526020600020905b815481529060010190602001808311620029fb57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162002ab8575050509190925250505060408082015190516326ccee8b60e11b81526001600160a01b0385811660048301526024820188905292935060009290911690634d99dd16906044016020604051808303816000875af115801562002b32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b5891906200a2bb565b9050826001600160a01b0316866001600160a01b03167f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b40829802878460405162002ba9929190918252602082015260400190565b60405180910390a3856001600160a01b0316836001600160a01b03160362002bd65762002bd68662008ce6565b6040808301519051633041949b60e01b815261200591633041949b9162002c03919087906004016200a242565b600060405180830381600087803b15801562002c1e57600080fd5b505af115801562002c33573d6000803e3d6000fd5b50505050505050505050565b60005462010000900460ff161562002c6a57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002c9c5760405163b1d02c3d60e01b815260040160405180910390fd5b8362002caa603f8262008265565b62002cc85760405163056e881160e01b815260040160405180910390fd5b8362002cd6603f8262008265565b62002cf45760405163056e881160e01b815260040160405180910390fd5b6034805460ff19166001179055600084900362002d2457604051639811e0c760e01b815260040160405180910390fd5b846001600160a01b0316866001600160a01b03160362002d575760405163f0e3e62960e01b815260040160405180910390fd5b6001600160a01b038087166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002dbf906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002ded906200a20c565b801562002e3e5780601f1062002e125761010080835404028352916020019162002e3e565b820191906000526020600020905b81548152906001019060200180831162002e2057829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002e69906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002e97906200a20c565b801562002ee85780601f1062002ebc5761010080835404028352916020019162002ee8565b820191906000526020600020905b81548152906001019060200180831162002eca57829003601f168201915b5050505050815260200160018201805462002f03906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002f31906200a20c565b801562002f825780601f1062002f565761010080835404028352916020019162002f82565b820191906000526020600020905b81548152906001019060200180831162002f6457829003601f168201915b5050505050815260200160028201805462002f9d906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462002fcb906200a20c565b80156200301c5780601f1062002ff0576101008083540402835291602001916200301c565b820191906000526020600020905b81548152906001019060200180831162002ffe57829003601f168201915b5050505050815260200160038201805462003037906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003065906200a20c565b8015620030b65780601f106200308a57610100808354040283529160200191620030b6565b820191906000526020600020905b8154815290600101906020018083116200309857829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200315557505050919092525050506001600160a01b03808916600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620031e0906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200320e906200a20c565b80156200325f5780601f1062003233576101008083540402835291602001916200325f565b820191906000526020600020905b8154815290600101906020018083116200324157829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200328a906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620032b8906200a20c565b8015620033095780601f10620032dd5761010080835404028352916020019162003309565b820191906000526020600020905b815481529060010190602001808311620032eb57829003601f168201915b5050505050815260200160018201805462003324906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003352906200a20c565b8015620033a35780601f106200337757610100808354040283529160200191620033a3565b820191906000526020600020905b8154815290600101906020018083116200338557829003601f168201915b50505050508152602001600282018054620033be906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620033ec906200a20c565b80156200343d5780601f1062003411576101008083540402835291602001916200343d565b820191906000526020600020905b8154815290600101906020018083116200341f57829003601f168201915b5050505050815260200160038201805462003458906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003486906200a20c565b8015620034d75780601f10620034ab57610100808354040283529160200191620034d7565b820191906000526020600020905b815481529060010190602001808311620034b957829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620035765750505050508152505090508060e001518015620035b95750876001600160a01b0316836001600160a01b031614155b15620035d857604051636468920360e01b815260040160405180910390fd5b60408083015190516352e82ce560e11b81526001600160a01b038581166004830152602482018a9052600092169063a5d059ca906044016020604051808303816000875af11580156200362f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200365591906200a2bb565b90506037548110156200367b5760405163dc6f0bdd60e01b815260040160405180910390fd5b896001600160a01b0316846001600160a01b03161480156200371057506036546040808501519051630913db4760e01b81526001600160a01b038d8116600483015290911690630913db4790602401602060405180830381865afa158015620036e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200370e91906200a2bb565b105b156200372f576040516317b204bf60e11b815260040160405180910390fd5b6000620186a0603a54836200374591906200a377565b6200375191906200a282565b9050600083604001516001600160a01b03168260405160006040518083038185875af1925050503d8060008114620037a6576040519150601f19603f3d011682016040523d82523d6000602084013e620037ab565b606091505b5050905080620037ce576040516312171d8360e31b815260040160405180910390fd5b620037da82846200a361565b60408086015190516317066a5760e21b81526001600160a01b03898116600483015292955060009290911690635c19a95c90869060240160206040518083038185885af115801562003830573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200385791906200a2bb565b9050866001600160a01b03168c6001600160a01b03168e6001600160a01b03167ffdac6e81913996d95abcc289e90f2d8bd235487ce6fe6f821e7d21002a1915b48e8589604051620038bc939291909283526020830191909152604082015260600190565b60405180910390a46040805160028082526060820183526000926020830190803683370190505090508660400151816000815181106200390057620039006200a391565b60200260200101906001600160a01b031690816001600160a01b0316815250508560400151816001815181106200393b576200393b6200a391565b6001600160a01b0390921660209283029190910190910152604051634484077560e01b8152612005906344840775906200397c9084908c906004016200a3a7565b600060405180830381600087803b1580156200399757600080fd5b505af1158015620039ac573d6000803e3d6000fd5b505050508a1562003a1e576120056001600160a01b031663e5ed5b1e898f6040518363ffffffff1660e01b8152600401620039e99291906200a242565b600060405180830381600087803b15801562003a0457600080fd5b505af115801562003a19573d6000803e3d6000fd5b505050505b50506034805460ff19169055505050505050505050505050565b60005462010000900460ff161562003a6357604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562003a955760405163b1d02c3d60e01b815260040160405180910390fd5b62003a9f62008ca5565b62003aac603f8262008265565b62003aca5760405163056e881160e01b815260040160405180910390fd5b600062003ad662008ca5565b6001600160a01b0381166000908152604160205260409020600c81015491925090429062003b099062015180906200a2a5565b111562003b2957604051631f92cdbd60e11b815260040160405180910390fd5b60098101546001600160401b03600160401b9091048116908516111562003b635760405163dc81db8560e01b815260040160405180910390fd5b60098101546000906001600160401b03908116908616101562003ba157600982015462003b9b9086906001600160401b03166200a3d3565b62003bbb565b600982015462003bbb906001600160401b0316866200a3d3565b60098301546001600160401b039182169250600160801b90041681111562003bf65760405163dc81db8560e01b815260040160405180910390fd5b60098201805467ffffffffffffffff19166001600160401b03871690811790915542600c8401556040519081526001600160a01b038416907f78cdd96edf59e09cfd4d26ef6ef6c92d166effe6a40970c54821206d541932cb9060200160405180910390a25050505050565b6060806060600062003c75603f62008e0c565b905080861015620042fe57841562003c8e578462003c90565b805b945060008562003ca188846200a361565b1162003cb95762003cb387836200a361565b62003cbb565b855b9050806001600160401b0381111562003cd85762003cd862009a8f565b60405190808252806020026020018201604052801562003d02578160200160208202803683370190505b509450806001600160401b0381111562003d205762003d2062009a8f565b60405190808252806020026020018201604052801562003d4a578160200160208202803683370190505b509350806001600160401b0381111562003d685762003d6862009a8f565b60405190808252806020026020018201604052801562003d9d57816020015b606081526020019060019003908162003d875790505b50925060005b81811015620042fb57600062003dc762003dbe838b6200a2a5565b603f9062008e17565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180549495509193909291608084019162003e34906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003e62906200a20c565b801562003eb35780601f1062003e875761010080835404028352916020019162003eb3565b820191906000526020600020905b81548152906001019060200180831162003e9557829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462003ede906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003f0c906200a20c565b801562003f5d5780601f1062003f315761010080835404028352916020019162003f5d565b820191906000526020600020905b81548152906001019060200180831162003f3f57829003601f168201915b5050505050815260200160018201805462003f78906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462003fa6906200a20c565b801562003ff75780601f1062003fcb5761010080835404028352916020019162003ff7565b820191906000526020600020905b81548152906001019060200180831162003fd957829003601f168201915b5050505050815260200160028201805462004012906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004040906200a20c565b8015620040915780601f10620040655761010080835404028352916020019162004091565b820191906000526020600020905b8154815290600101906020018083116200407357829003601f168201915b50505050508152602001600382018054620040ac906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620040da906200a20c565b80156200412b5780601f10620040ff576101008083540402835291602001916200412b565b820191906000526020600020905b8154815290600101906020018083116200410d57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620041ca57505050505081525050905080600001518884815181106200420357620042036200a391565b60200260200101906001600160a01b031690816001600160a01b0316815250508060e001516200429c5780604001516001600160a01b03166315d1f8986040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200429691906200a2bb565b6200429f565b60005b878481518110620042b457620042b46200a391565b6020026020010181815250508060800151868481518110620042da57620042da6200a391565b6020026020010181905250505080620042f3906200a3f6565b905062003da3565b50505b92959194509250565b60005462010000900460ff16156200433257604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620043645760405163b1d02c3d60e01b815260040160405180910390fd5b3362004372603f8262008265565b156200439157604051635f28f62b60e01b815260040160405180910390fd5b6001600160a01b038181166000908152604d60205260409020541615620043cb57604051631a0a9b9f60e21b815260040160405180910390fd5b6001600160a01b03888116600090815260436020526040902054161515806200440c57506001600160a01b03881660009081526047602052604090205460ff165b156200442b57604051631e6f587560e11b815260040160405180910390fd5b60006001600160a01b0316604588886040516200444a9291906200a25c565b908152604051908190036020019020546001600160a01b031614158062004494575060488787604051620044809291906200a25c565b9081526040519081900360200190205460ff165b15620044b3576040516311fdb94760e01b815260040160405180910390fd5b6000620044c183806200a412565b604051602001620044d49291906200a25c565b60408051601f1981840301815291815281516020928301206000818152604290935291205490915060ff16156200451e5760405163c0bf414360e01b815260040160405180910390fd5b600062004534670de0b6b3a7640000346200a361565b90506036548110156200455a576040516317b204bf60e11b815260040160405180910390fd5b6001600160a01b038a166200458257604051636520611b60e11b815260040160405180910390fd5b61138862004597604087016020880162009c73565b6001600160401b03161180620045dd5750620045ba604086016020870162009c73565b6001600160401b0316620045d2602087018762009c73565b6001600160401b0316115b806200461c5750620045f6604086016020870162009c73565b6001600160401b031662004611606087016040880162009c73565b6001600160401b0316115b156200463b5760405163dc81db8560e01b815260040160405180910390fd5b620046866200464b85806200a412565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062008e2592505050565b620046a457604051635dba5ad760e01b815260040160405180910390fd5b620046b3838a8a8a8a62008fc7565b620046d157604051631647e3cb60e11b815260040160405180910390fd5b60006200471f84620046e487806200a412565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620090f792505050565b90506200472e603f85620091f8565b506000838152604260209081526040808320805460ff191660019081179091556001600160a01b0380891680865260419094529190932080548f83166001600160a01b031991821617825593810180548516909317909255600282018054918516919093161790915542600382015560048101620047ae8b8d836200a4ba565b508560058201620047c082826200a582565b5087905060098201620047d482826200a6bb565b505042600c8201556001600160a01b038c81166000908152604360205260409081902080546001600160a01b0319169288169290921790915551859060459062004822908e908e906200a25c565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316856001600160a01b03168d6001600160a01b03167faecd9fb95e79c75a3a1de93362c6be5fe6ab65770d8614be583884161cd8228d8e8e604051620048a59291906200a78b565b60405180910390a460408051848152602081018590526001600160a01b0387169182916000805160206200ba92833981519152910160405180910390a360408051670de0b6b3a7640000808252602082015261dead916001600160a01b038816916000805160206200ba92833981519152910160405180910390a3604051633041949b60e01b815261200590633041949b906200494990859089906004016200a242565b600060405180830381600087803b1580156200496457600080fd5b505af115801562004979573d6000803e3d6000fd5b50505050505050505050505050505050565b604080516060810182526000808252602082018190529181019190915281620049b6603f8262008265565b620049d45760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b031660009081526041602090815260409182902082516060810184526009909101546001600160401b038082168352600160401b8204811693830193909352600160801b90049091169181019190915290565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608281019190915260048401805491949160808401919062004a9d906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004acb906200a20c565b801562004b1c5780601f1062004af05761010080835404028352916020019162004b1c565b820191906000526020600020905b81548152906001019060200180831162004afe57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462004b47906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004b75906200a20c565b801562004bc65780601f1062004b9a5761010080835404028352916020019162004bc6565b820191906000526020600020905b81548152906001019060200180831162004ba857829003601f168201915b5050505050815260200160018201805462004be1906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004c0f906200a20c565b801562004c605780601f1062004c345761010080835404028352916020019162004c60565b820191906000526020600020905b81548152906001019060200180831162004c4257829003601f168201915b5050505050815260200160028201805462004c7b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004ca9906200a20c565b801562004cfa5780601f1062004cce5761010080835404028352916020019162004cfa565b820191906000526020600020905b81548152906001019060200180831162004cdc57829003601f168201915b5050505050815260200160038201805462004d15906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462004d43906200a20c565b801562004d945780601f1062004d685761010080835404028352916020019162004d94565b820191906000526020600020905b81548152906001019060200180831162004d7657829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162004e335750505091909252505050608001519392505050565b336110011462004e8457604051630f22c43960e41b81526110016004820152602401620011ef565b6001600160a01b038082166000908152604360205260409020541662004eac603f8262008265565b62004eca5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038181166000908152604160205260408082206002810154603b54925163045bc4d160e41b81526004810193909352909316906345bc4d10906024016020604051808303816000875af115801562004f2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f5391906200a2bb565b90506000603d544262004f6791906200a2a5565b905062004f75838262008312565b836001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28284600160405162004fb5939291906200a2eb565b60405180910390a26002830154604051633041949b60e01b815261200591633041949b9162004ff3916001600160a01b03169088906004016200a242565b600060405180830381600087803b1580156200500e57600080fd5b505af115801562005023573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156200504f5750600054600160ff909116105b806200506b5750303b1580156200506b575060005460ff166001145b620050d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620011ef565b6000805460ff191660011790558015620050f4576000805461ff0019166101001790555b334114620051155760405163022d8c9560e31b815260040160405180910390fd5b3a1562005135576040516383f1b1d360e01b815260040160405180910390fd5b611388603555686c6b935b8bbd400000603655670de0b6b3a7640000603755602d60385562093a806039556002603a819055678ac7230489e80000603b55680ad78ebc5ac6200000603c556202a300603d5562278d00603e55604a5560408051610760810190915261074080825260609182916200bab26020830139806020019051810190620051c691906200a7c7565b915060405180611160016040528061114081526020016200c1f26111409139806020019051810190620051fa91906200a86b565b905060005b825181101562005269576001604760008584815181106200522457620052246200a391565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905562005261816200a3f6565b9050620051ff565b5060005b8151811015620052da57600160488383815181106200529057620052906200a391565b6020026020010151604051620052a791906200a968565b908152604051908190036020019020805491151560ff19909216919091179055620052d2816200a3f6565b90506200526d565b50620052fa7308e68ec70fa3b629784fdb28887e206ce8561e086200920f565b505080156200181a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b33612000146200536d57604051630f22c43960e41b81526120006004820152602401620011ef565b7faa5ba621c8b3d7d05bb9e51a7506108251d4d5dbe542ca66fc7bb52aacb02b65838383604051620053a2939291906200a986565b60405180910390a1505050565b600054630100000090046001600160a01b03163314620053e2576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff16156200540d57604051631785c68160e01b815260040160405180910390fd5b6000805462ff00001916620100001781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b600062005456603f8462008265565b620054745760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383811660009081526041602052604090819020600201549051636bbf224960e01b815260048101859052911690636bbf2249906024015b602060405180830381865afa158015620054d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054f791906200a2bb565b90505b92915050565b60005462010000900460ff16156200552b57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200555d5760405163b1d02c3d60e01b815260040160405180910390fd5b816200556b603f8262008265565b620055895760405163056e881160e01b815260040160405180910390fd5b6037543490811015620055af5760405163dc6f0bdd60e01b815260040160405180910390fd5b6001600160a01b038085166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162005617906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005645906200a20c565b8015620056965780601f106200566a5761010080835404028352916020019162005696565b820191906000526020600020905b8154815290600101906020018083116200567857829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620056c1906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620056ef906200a20c565b8015620057405780601f10620057145761010080835404028352916020019162005740565b820191906000526020600020905b8154815290600101906020018083116200572257829003601f168201915b505050505081526020016001820180546200575b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005789906200a20c565b8015620057da5780601f10620057ae57610100808354040283529160200191620057da565b820191906000526020600020905b815481529060010190602001808311620057bc57829003601f168201915b50505050508152602001600282018054620057f5906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005823906200a20c565b8015620058745780601f10620058485761010080835404028352916020019162005874565b820191906000526020600020905b8154815290600101906020018083116200585657829003601f168201915b505050505081526020016003820180546200588f906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620058bd906200a20c565b80156200590e5780601f10620058e2576101008083540402835291602001916200590e565b820191906000526020600020905b815481529060010190602001808311620058f057829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620059ad5750505050508152505090508060e001518015620059f05750856001600160a01b0316826001600160a01b031614155b1562005a0f57604051636468920360e01b815260040160405180910390fd5b60408082015190516317066a5760e21b81526001600160a01b0384811660048301526000921690635c19a95c90869060240160206040518083038185885af115801562005a60573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062005a8791906200a2bb565b9050826001600160a01b0316876001600160a01b03166000805160206200ba92833981519152838760405162005ac7929190918252602082015260400190565b60405180910390a36040808301519051633041949b60e01b815261200591633041949b9162005afc919087906004016200a242565b600060405180830381600087803b15801562005b1757600080fd5b505af115801562005b2c573d6000803e3d6000fd5b50505050851562001813576040516372f6ad8f60e11b81526120059063e5ed5b1e9062005b609086908b906004016200a242565b600060405180830381600087803b15801562005b7b57600080fd5b505af115801562005b90573d6000803e3d6000fd5b5050505050505050505050565b62005bc96040518060800160405280606081526020016060815260200160608152602001606081525090565b8162005bd7603f8262008265565b62005bf55760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383166000908152604160205260409081902081516080810190925260050180548290829062005c2c906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005c5a906200a20c565b801562005cab5780601f1062005c7f5761010080835404028352916020019162005cab565b820191906000526020600020905b81548152906001019060200180831162005c8d57829003601f168201915b5050505050815260200160018201805462005cc6906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005cf4906200a20c565b801562005d455780601f1062005d195761010080835404028352916020019162005d45565b820191906000526020600020905b81548152906001019060200180831162005d2757829003601f168201915b5050505050815260200160028201805462005d60906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005d8e906200a20c565b801562005ddf5780601f1062005db35761010080835404028352916020019162005ddf565b820191906000526020600020905b81548152906001019060200180831162005dc157829003601f168201915b5050505050815260200160038201805462005dfa906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462005e28906200a20c565b801562005e795780601f1062005e4d5761010080835404028352916020019162005e79565b820191906000526020600020905b81548152906001019060200180831162005e5b57829003601f168201915b505050505081525050915050919050565b60005462010000900460ff161562005eb557604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562005ee75760405163b1d02c3d60e01b815260040160405180910390fd5b62005ef38282620092a8565b5050565b336110071462005f1f57604051630f22c43960e41b81526110076004820152602401620011ef565b62005f8c6040518060400160405280601081526020016f1d1c985b9cd9995c91d85cd31a5b5a5d60821b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006047576020811462005fbe5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f840181900481028201810190925282815260009162006001918585808385018382808284376000920191909152509293925050620094119050565b90506108fc81108062006015575061271081115b156200603e5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60355562006d51565b620060b86040518060400160405280601481526020017336b4b729b2b6332232b632b3b0ba34b7b721272160611b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620061825760208114620060ea5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200612d918585808385018382808284376000920191909152509293925050620094119050565b9050683635c9adc5dea0000081108062006150575069152d02c7e14af680000081115b15620061795784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60365562006d51565b620061f5604051806040016040528060168152602001756d696e44656c65676174696f6e424e424368616e676560501b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620062bc5760208114620062275783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200626a918585808385018382808284376000920191909152509293925050620094119050565b905067016345785d8a00008110806200628a5750678ac7230489e8000081115b15620062b35784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60375562006d51565b6200632d604051806040016040528060148152602001736d6178456c656374656456616c696461746f727360601b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620063e557602081146200635f5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f8401819004810282018101909252828152600091620063a2918585808385018382808284376000920191909152509293925050620094119050565b9050801580620063b357506101f481115b15620063dc5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60385562006d51565b6200644e6040518060400160405280600c81526020016b1d5b989bdb9914195c9a5bd960a21b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b156200650b5760208114620064805783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f8401819004810282018101909252828152600091620064c3918585808385018382808284376000920191909152509293925050620094119050565b90506203f480811080620064d9575062278d0081115b15620065025784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b60395562006d51565b6200657960405180604001604052806011815260200170726564656c65676174654665655261746560781b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620066265760208114620065ab5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f8401819004810282018101909252828152600091620065ee918585808385018382808284376000920191909152509293925050620094119050565b905060648111156200661d5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603a5562006d51565b6200669660405180604001604052806013815260200172191bdddb9d1a5b5954db185cda105b5bdd5b9d606a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620067575760208114620066c85783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200670b918585808385018382808284376000920191909152509293925050620094119050565b9050674563918244f40000811080620067255750603c5481115b156200674e5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603b5562006d51565b620067c56040518060400160405280601181526020017019995b1bdb9e54db185cda105b5bdd5b9d607a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620068885760208114620067f75783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200683a918585808385018382808284376000920191909152509293925050620094119050565b905068056bc75e2d63100000811080620068565750603b548111155b156200687f5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603c5562006d51565b620068f56040518060400160405280601081526020016f646f776e74696d654a61696c54696d6560801b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b15620069b25760208114620069275783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f84018190048102820181019092528281526000916200696a918585808385018382808284376000920191909152509293925050620094119050565b90506202a300811080620069805750603e548110155b15620069a95784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603d5562006d51565b62006a1d6040518060400160405280600e81526020016d66656c6f6e794a61696c54696d6560901b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006ada576020811462006a4f5783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f840181900481028201810190925282815260009162006a92918585808385018382808284376000920191909152509293925050620094119050565b9050620d2f0081108062006aa85750603d548111155b1562006ad15784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b603e5562006d51565b62006b546040518060400160405280601c81526020017f6d617846656c6f6e794265747765656e42726561746865426c6f636b0000000081525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006c00576020811462006b865783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604080516020601f840181900481028201810190925282815260009162006bc9918585808385018382808284376000920191909152509293925050620094119050565b90508060000362006bf75784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b604a5562006d51565b62006c6e6040518060400160405280601181526020017039ba30b5b2a43ab1283937ba32b1ba37b960791b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093b49050565b1562006d2e576014811462006ca05783838383604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b600062006ce8601484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620094119050565b90506001600160a01b03811662006d1c5784848484604051630a5a604160e01b8152600401620011ef94939291906200a9a5565b62006d278162009416565b5062006d51565b838383836040516325ee20d560e21b8152600401620011ef94939291906200a9a5565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e6338484848460405162006d8894939291906200a9a5565b60405180910390a150505050565b60005462010000900460ff161562006dc157604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562006df35760405163b1d02c3d60e01b815260040160405180910390fd5b816000816001600160401b0381111562006e115762006e1162009a8f565b60405190808252806020026020018201604052801562006e3b578160200160208202803683370190505b5090506000805b8381101562006f395762006e8487878381811062006e645762006e646200a391565b905060200201602081019062006e7b91906200991e565b603f9062008265565b62006ea25760405163056e881160e01b815260040160405180910390fd5b6041600088888481811062006ebb5762006ebb6200a391565b905060200201602081019062006ed291906200991e565b6001600160a01b039081168252602082019290925260400160002060020154845191169250829084908390811062006f0e5762006f0e6200a391565b6001600160a01b039092166020928302919091019091015262006f31816200a3f6565b905062006e42565b50604051634484077560e01b81526120059063448407759062002c0390859088906004016200a3a7565b606080600062006f74603f62008e0c565b9050808510156200713857831562006f8d578362006f8f565b805b935060008462006fa087846200a361565b1162006fb85762006fb286836200a361565b62006fba565b845b9050806001600160401b0381111562006fd75762006fd762009a8f565b60405190808252806020026020018201604052801562007001578160200160208202803683370190505b509350806001600160401b038111156200701f576200701f62009a8f565b60405190808252806020026020018201604052801562007049578160200160208202803683370190505b50925060005b8181101562007135576200706862003dbe82896200a2a5565b8582815181106200707d576200707d6200a391565b60200260200101906001600160a01b031690816001600160a01b03168152505060416000868381518110620070b657620070b66200a391565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020160009054906101000a90046001600160a01b03168482815181106200710a576200710a6200a391565b6001600160a01b03909216602092830291909101909101526200712d816200a3f6565b90506200704f565b50505b9250925092565b33611001146200716757604051630f22c43960e41b81526110016004820152602401620011ef565b60005462010000900460ff16156200719257604051631785c68160e01b815260040160405180910390fd5b6001600160a01b0380821660009081526043602052604090205416620071ba603f8262008265565b620071d85760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260408120906200720062015180426200a282565b604a546000828152604b602052604090205491925011620072345760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b60205260408120805460019290620072559084906200a2a5565b90915550506001600160a01b03841660009081526044602052604090205415801590620072aa57506001600160a01b0384166000908152604460205260409020544290620072a89062015180906200a2a5565b105b15620072c9576040516330abb81d60e21b815260040160405180910390fd5b600080620072d985600062008288565b9150915081620072fc57604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af11580156200734f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200737591906200a2bb565b905062007383858362008312565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb283836000604051620073c3939291906200a2eb565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162005b60916001600160a01b0316908a906004016200a242565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384938493849390929160808401919062007472906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620074a0906200a20c565b8015620074f15780601f10620074c557610100808354040283529160200191620074f1565b820191906000526020600020905b815481529060010190602001808311620074d357829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200751c906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200754a906200a20c565b80156200759b5780601f106200756f576101008083540402835291602001916200759b565b820191906000526020600020905b8154815290600101906020018083116200757d57829003601f168201915b50505050508152602001600182018054620075b6906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620075e4906200a20c565b8015620076355780601f10620076095761010080835404028352916020019162007635565b820191906000526020600020905b8154815290600101906020018083116200761757829003601f168201915b5050505050815260200160028201805462007650906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200767e906200a20c565b8015620076cf5780601f10620076a357610100808354040283529160200191620076cf565b820191906000526020600020905b815481529060010190602001808311620076b157829003601f168201915b50505050508152602001600382018054620076ea906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007718906200a20c565b8015620077695780601f106200773d5761010080835404028352916020019162007769565b820191906000526020600020905b8154815290600101906020018083116200774b57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620078085750505091909252505050606081015160e0820151610100909201519097919650945092505050565b60005462010000900460ff16156200786f57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620078a15760405163b1d02c3d60e01b815260040160405180910390fd5b620078ab62008ca5565b620078b8603f8262008265565b620078d65760405163056e881160e01b815260040160405180910390fd5b6000620078e262008ca5565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620079159062015180906200a2a5565b11156200793557604051631f92cdbd60e11b815260040160405180910390fd5b60058101805462007946906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007974906200a20c565b8015620079c55780601f106200799957610100808354040283529160200191620079c5565b820191906000526020600020905b815481529060010190602001808311620079a757829003601f168201915b5050508287525085916005840191508190620079e290826200a9d0565b5060208201516001820190620079f990826200a9d0565b506040820151600282019062007a1090826200a9d0565b506060820151600382019062007a2790826200a9d0565b505042600c830155506040516001600160a01b038316907f85d6366b336ade7f106987ec7a8eac1e8799e508aeab045a39d2f63e0dc969d990600090a250505050565b60005462010000900460ff161562007a9557604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562007ac75760405163b1d02c3d60e01b815260040160405180910390fd5b82811462007ae8576040516341abc80160e01b815260040160405180910390fd5b60005b8381101562007b595762007b4685858381811062007b0d5762007b0d6200a391565b905060200201602081019062007b2491906200991e565b84848481811062007b395762007b396200a391565b90506020020135620092a8565b62007b51816200a3f6565b905062007aeb565b5050505050565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162007bcb906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007bf9906200a20c565b801562007c4a5780601f1062007c1e5761010080835404028352916020019162007c4a565b820191906000526020600020905b81548152906001019060200180831162007c2c57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462007c75906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007ca3906200a20c565b801562007cf45780601f1062007cc85761010080835404028352916020019162007cf4565b820191906000526020600020905b81548152906001019060200180831162007cd657829003601f168201915b5050505050815260200160018201805462007d0f906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007d3d906200a20c565b801562007d8e5780601f1062007d625761010080835404028352916020019162007d8e565b820191906000526020600020905b81548152906001019060200180831162007d7057829003601f168201915b5050505050815260200160028201805462007da9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007dd7906200a20c565b801562007e285780601f1062007dfc5761010080835404028352916020019162007e28565b820191906000526020600020905b81548152906001019060200180831162007e0a57829003601f168201915b5050505050815260200160038201805462007e43906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462007e71906200a20c565b801562007ec25780601f1062007e965761010080835404028352916020019162007ec2565b820191906000526020600020905b81548152906001019060200180831162007ea457829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162007f615750505091909252505050604001519392505050565b600062007f99603f8462008265565b62007fb75760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038381166000908152604160205260409081902060020154905163aa1966cd60e01b81526004810185905291169063aa1966cd90602401620054b3565b60005462010000900460ff16156200802657604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620080585760405163b1d02c3d60e01b815260040160405180910390fd5b6200806262008ca5565b6200806f603f8262008265565b6200808d5760405163056e881160e01b815260040160405180910390fd5b60006200809962008ca5565b9050620080aa818787878762008fc7565b620080c857604051631647e3cb60e11b815260040160405180910390fd5b60006001600160a01b031660458787604051620080e79291906200a25c565b908152604051908190036020019020546001600160a01b0316141580620081315750604886866040516200811d9291906200a25c565b9081526040519081900360200190205460ff165b1562008150576040516311fdb94760e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260409020600c81015442906200817f9062015180906200a2a5565b11156200819f57604051631f92cdbd60e11b815260040160405180910390fd5b42604682600401604051620081b591906200aa98565b9081526040519081900360200190205560048101620081d68789836200a4ba565b5042600c8201556040518290604590620081f4908a908a906200a25c565b90815260405190819003602001812080546001600160a01b039384166001600160a01b0319909116179055908316907f783156582145bd0ff7924fae6953ba054cf1233eb60739a200ddb10de068ff0d9062008254908a908a906200a78b565b60405180910390a250505050505050565b6001600160a01b03811660009081526001830160205260408120541515620054f7565b60008060008484604051602001620082a29291906200ab16565b60408051601f1981840301815291815281516020928301206000818152604c90935291205490915042811115620082e2576000809350935050506200830b565b603e54620082f190426200a2a5565b6000928352604c6020526040909220829055506001925090505b9250929050565b8154604051631507fdb760e11b81526001600160a01b03909116600482015261100090632a0ffb6e90602401600060405180830381600087803b1580156200835957600080fd5b505af11580156200836e573d6000803e3d6000fd5b505050506000600162008382603f62008e0c565b6200838e91906200a361565b60495410801591506200844c5760405163d31f968d60e01b81526110006004820152600860248201526120009063d31f968d90604401602060405180830381865afa158015620083e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200840891906200a31a565b6200844c5760018301546040516001600160a01b03909116907f2afdc18061ac21cff7d9f11527ab9c8dec6fabd4edf6f894ed634bebd6a20d4590600090a2505050565b82600b01548211156200846157600b83018290555b600a83015460ff16620084d457600a8301805460ff1916600190811790915560498054600090620084949084906200a2a5565b909155505060018301546040516001600160a01b03909116907f4905ac32602da3fb8b4b7b00c285e5fc4c6c2308cc908b4a1e4e9625a29c90a390600090a25b505050565b604080516080808201835260008083526020808401829052838501829052606080850183905285519384018652828452838201839052838601839052830182905284518086018652828152810182905284518086019095528551855285810190850152919282906200854b9062009482565b90506000805b6200855c83620094f5565b156200862f57806000036200859157620085806200857a846200951b565b6200957f565b6001600160a01b031684526200861c565b80600103620085bd57620085a96200857a846200951b565b6001600160a01b031660208501526200861c565b80600203620085e957620085d56200857a846200951b565b6001600160a01b031660408501526200861c565b8060030362008616576200860762008601846200951b565b62009597565b6060850152600191506200861c565b6200862f565b62008627816200a3f6565b905062008551565b5091959194509092505050565b6020808201516001600160a01b031660009081526001909152604081205460ff168062008674575060208201516001600160a01b0316155b156200868257506004919050565b81516200869290603f9062008265565b6200869f57506002919050565b81516001600160a01b039081166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929391926080840191906200870b906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462008739906200a20c565b80156200878a5780601f106200875e576101008083540402835291602001916200878a565b820191906000526020600020905b8154815290600101906020018083116200876c57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620087b5906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620087e3906200a20c565b8015620088345780601f10620088085761010080835404028352916020019162008834565b820191906000526020600020905b8154815290600101906020018083116200881657829003601f168201915b505050505081526020016001820180546200884f906200a20c565b80601f01602080910402602001604051908101604052809291908181526020018280546200887d906200a20c565b8015620088ce5780601f10620088a257610100808354040283529160200191620088ce565b820191906000526020600020905b815481529060010190602001808311620088b057829003601f168201915b50505050508152602001600282018054620088e9906200a20c565b80601f016020809104026020016040519081016040528092919081815260200182805462008917906200a20c565b8015620089685780601f106200893c5761010080835404028352916020019162008968565b820191906000526020600020905b8154815290600101906020018083116200894a57829003601f168201915b5050505050815260200160038201805462008983906200a20c565b80601f0160208091040260200160405190810160405280929190818152602001828054620089b1906200a20c565b801562008a025780601f10620089d65761010080835404028352916020019162008a02565b820191906000526020600020905b815481529060010190602001808311620089e457829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162008aa15750505050508152505090508060e00151801562008aec575082600001516001600160a01b031683602001516001600160a01b031614155b1562008afb5750600392915050565b6040808201516060850151602086015192516317066a5760e21b81526001600160a01b03938416600482015260009390921691635c19a95c919060240160206040518083038185885af115801562008b57573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062008b7e91906200a2bb565b905083602001516001600160a01b031684600001516001600160a01b03166000805160206200ba9283398151915283876060015160405162008bca929190918252602082015260400190565b60405180910390a383602001516001600160a01b031684600001516001600160a01b03167f607b17598da6bdca05650a2fc08bd2bc8e38c3236806a0fa8e0daabc1d6cb1d883876060015160405162008c2d929190918252602082015260400190565b60405180910390a360408083015160208601519151633041949b60e01b815261200592633041949b9262008c67929091906004016200a242565b600060405180830381600087803b15801562008c8257600080fd5b505af115801562008c97573d6000803e3d6000fd5b506000979650505050505050565b336000908152604d60205260408120546001600160a01b03161562008ce15750336000908152604d60205260409020546001600160a01b031690565b503390565b6001600160a01b0381166000908152604160205260409020600a81015460ff161562008d10575050565b6036546002820154604051630913db4760e01b81526001600160a01b03858116600483015290911690630913db4790602401602060405180830381865afa15801562008d60573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008d8691906200a2bb565b101562005ef35762008da881603d544262008da291906200a2a5565b62008312565b80546040516335409f7f60e01b81526001600160a01b039091166004820152611000906335409f7f90602401600060405180830381600087803b15801562008def57600080fd5b505af115801562008e04573d6000803e3d6000fd5b505050505050565b6000620054fa825490565b6000620054f783836200966f565b60008082905060038151108062008e3d575060098151115b1562008e4c5750600092915050565b60418160008151811062008e645762008e646200a391565b016020015160f81c108062008e965750605a8160008151811062008e8c5762008e8c6200a391565b016020015160f81c115b1562008ea55750600092915050565b60015b815181101562008fbd57603082828151811062008ec95762008ec96200a391565b016020015160f81c108062008efa5750603982828151811062008ef05762008ef06200a391565b016020015160f81c115b801562008f4a5750604182828151811062008f195762008f196200a391565b016020015160f81c108062008f4a5750605a82828151811062008f405762008f406200a391565b016020015160f81c115b801562008f9a5750606182828151811062008f695762008f696200a391565b016020015160f81c108062008f9a5750607a82828151811062008f905762008f906200a391565b016020015160f81c115b1562008faa575060009392505050565b62008fb5816200a3f6565b905062008ea8565b5060019392505050565b600060308414158062008fdb575060608214155b1562008fea57506000620090ee565b6000868686466040516020016200900594939291906200ab54565b60408051808303601f1901815282825280516020918201208184528383019092529092506000919060208201818036833701905050905081602082015260008186868a8a6040516020016200905f9594939291906200ab81565b60408051808303601f190181526001808452838301909252925060009190602082018180368337019050509050815160016020830182602086016066600019fa620090a957600080fd5b50600081600081518110620090c257620090c26200a391565b016020015160f81c905060018114620090e457600095505050505050620090ee565b6001955050505050505b95945050505050565b60008061200361dead6040516200910e90620098fa565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562009151573d6000803e3d6000fd5b509050806001600160a01b031663f399e22e3486866040518463ffffffff1660e01b8152600401620091859291906200abb9565b6000604051808303818588803b1580156200919f57600080fd5b505af1158015620091b4573d6000803e3d6000fd5b50506040516001600160a01b038086169450881692507fd481492e4e93bb36b4c12a5af93f03be3bf04b454dfbc35dd2663fa26f44d5b09150600090a39392505050565b6000620054f7836001600160a01b0384166200969c565b600054610100900460ff166200927c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620011ef565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b81620092b6603f8262008265565b620092d45760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03838116600090815260416020526040808220600201549051635569f64b60e11b8152336004820152602481018690529192169063aad3ec96906044016020604051808303816000875af115801562009338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200935e91906200a2bb565b9050336001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd399268383604051620093a691815260200190565b60405180910390a350505050565b600081604051602001620093c991906200a968565b6040516020818303038152906040528051906020012083604051602001620093f291906200a968565b6040516020818303038152906040528051906020012014905092915050565b015190565b600080546040516001600160a01b0380851693630100000090930416917f44fc1b38a4abaa91ebd1b628a5b259a698f86238c8217d68f516e87769c60c0b91a3600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6040805160808101825260009181018281526060820183905281526020810191909152620094b082620096ee565b620094ba57600080fd5b6000620094cb836020015162009721565b8360200151620094dc91906200a2a5565b6040805180820190915293845260208401525090919050565b805180516020820151600092916200950d916200a2a5565b836020015110915050919050565b60408051808201909152600080825260208201526200953a82620094f5565b6200954457600080fd5b602082015160006200955682620097b0565b90506200956481836200a2a5565b60209485015260408051808201909152908152928301525090565b80516000906015146200959157600080fd5b620054fa825b805160009015801590620095ad57508151602110155b620095b757600080fd5b6000620095c8836020015162009721565b90508083600001511015620096205760405162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f66667365740000000000006044820152606401620011ef565b8251600090620096329083906200a361565b90506000808386602001516200964991906200a2a5565b90508051915060208310156200966657826020036101000a820491505b50949350505050565b60008260000182815481106200968957620096896200a391565b9060005260206000200154905092915050565b6000818152600183016020526040812054620096e557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620054fa565b506000620054fa565b805160009081036200970257506000919050565b6020820151805160001a9060c082101562008fbd575060009392505050565b8051600090811a60808110156200973b5750600092915050565b60b881108062009758575060c0811080159062009758575060f881105b15620097675750600192915050565b60c0811015620097a2576200977f600160b86200abdf565b6200978e9060ff16826200a361565b6200979b9060016200a2a5565b9392505050565b6200977f600160f86200abdf565b80516000908190811a6080811015620097cd5760019150620098f3565b60b8811015620097f957620097e46080826200a361565b620097f19060016200a2a5565b9150620098f3565b60c08110156200987257600060b78203600186019550806020036101000a8651049150600181018201935050808310156200986b5760405162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b6044820152606401620011ef565b50620098f3565b60f88110156200988957620097e460c0826200a361565b600060f78203600186019550806020036101000a865104915060018101820193505080831015620098f15760405162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b6044820152606401620011ef565b505b5092915050565b610e96806200abfc83390190565b6001600160a01b03811681146200181a57600080fd5b6000602082840312156200993157600080fd5b81356200979b8162009908565b60008083601f8401126200995157600080fd5b5081356001600160401b038111156200996957600080fd5b6020830191508360208285010111156200830b57600080fd5b600080602083850312156200999657600080fd5b82356001600160401b03811115620099ad57600080fd5b620099bb858286016200993e565b90969095509350505050565b600080600060408486031215620099dd57600080fd5b833560ff81168114620099ef57600080fd5b925060208401356001600160401b0381111562009a0b57600080fd5b62009a19868287016200993e565b9497909650939450505050565b60005b8381101562009a4357818101518382015260200162009a29565b50506000910152565b6000815180845262009a6681602086016020860162009a26565b601f01601f19169290920160200192915050565b602081526000620054f7602083018462009a4c565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562009aca5762009aca62009a8f565b60405290565b604051601f8201601f191681016001600160401b038111828210171562009afb5762009afb62009a8f565b604052919050565b60006001600160401b0382111562009b1f5762009b1f62009a8f565b50601f01601f191660200190565b600062009b4462009b3e8462009b03565b62009ad0565b905082815283838301111562009b5957600080fd5b828260208301376000602084830101529392505050565b60006020828403121562009b8357600080fd5b81356001600160401b0381111562009b9a57600080fd5b8201601f8101841362009bac57600080fd5b62009bbd8482356020840162009b2d565b949350505050565b6000806040838503121562009bd957600080fd5b823562009be68162009908565b946020939093013593505050565b80151581146200181a57600080fd5b6000806000806080858703121562009c1a57600080fd5b843562009c278162009908565b9350602085013562009c398162009908565b925060408501359150606085013562009c528162009bf4565b939692955090935050565b6001600160401b03811681146200181a57600080fd5b60006020828403121562009c8657600080fd5b81356200979b8162009c5d565b6000806040838503121562009ca757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101562009cf15781516001600160a01b03168752958201959082019060010162009cca565b509495945050505050565b60808152600062009d11608083018762009cb6565b82810360208481019190915286518083528782019282019060005b8181101562009d4a5784518352938301939183019160010162009d2c565b5050848103604086015286518082528282019350600581901b8201830183890160005b8381101562009d9f57601f1985840301875262009d8c83835162009a4c565b9686019692509085019060010162009d6d565b5050809550505050505082606083015295945050505050565b600080600080600080600087890360e081121562009dd557600080fd5b883562009de28162009908565b975060208901356001600160401b038082111562009dff57600080fd5b62009e0d8c838d016200993e565b909950975060408b013591508082111562009e2757600080fd5b62009e358c838d016200993e565b90975095508591506060605f198401121562009e5057600080fd5b60608b01945060c08b013592508083111562009e6b57600080fd5b505088016080818b03121562009e8057600080fd5b8091505092959891949750929550565b6000806040838503121562009ea457600080fd5b823562009eb18162009908565b9150602083013562009ec38162009bf4565b809150509250929050565b60208152600082516080602084015262009eec60a084018262009a4c565b90506020840151601f198085840301604086015262009f0c838362009a4c565b9250604086015191508085840301606086015262009f2b838362009a4c565b9250606086015191508085840301608086015250620090ee828262009a4c565b6000806000806040858703121562009f6257600080fd5b84356001600160401b038082111562009f7a57600080fd5b62009f88888389016200993e565b9096509450602087013591508082111562009fa257600080fd5b5062009fb1878288016200993e565b95989497509550505050565b60008083601f84011262009fd057600080fd5b5081356001600160401b0381111562009fe857600080fd5b6020830191508360208260051b85010111156200830b57600080fd5b6000806000604084860312156200a01a57600080fd5b83356001600160401b038111156200a03157600080fd5b6200a03f8682870162009fbd565b90945092505060208401356200a0558162009908565b809150509250925092565b6060815260006200a075606083018662009cb6565b82810360208401526200a089818662009cb6565b915050826040830152949350505050565b600082601f8301126200a0ac57600080fd5b620054f78383356020850162009b2d565b6000602082840312156200a0d057600080fd5b81356001600160401b03808211156200a0e857600080fd5b90830190608082860312156200a0fd57600080fd5b6200a10762009aa5565b8235828111156200a11757600080fd5b6200a125878286016200a09a565b8252506020830135828111156200a13b57600080fd5b6200a149878286016200a09a565b6020830152506040830135828111156200a16257600080fd5b6200a170878286016200a09a565b6040830152506060830135828111156200a18957600080fd5b6200a197878286016200a09a565b60608301525095945050505050565b600080600080604085870312156200a1bd57600080fd5b84356001600160401b03808211156200a1d557600080fd5b6200a1e38883890162009fbd565b909650945060208701359150808211156200a1fd57600080fd5b5062009fb18782880162009fbd565b600181811c908216806200a22157607f821691505b60208210810362001f0b57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0392831681529116602082015260400190565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826200a2a057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620054fa57620054fa6200a26c565b6000602082840312156200a2ce57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600383106200a30c576200a30c6200a2d5565b826040830152949350505050565b6000602082840312156200a32d57600080fd5b81516200979b8162009bf4565b82815260408101600583106200a354576200a3546200a2d5565b8260208301529392505050565b81810381811115620054fa57620054fa6200a26c565b8082028115828204841417620054fa57620054fa6200a26c565b634e487b7160e01b600052603260045260246000fd5b6040815260006200a3bc604083018562009cb6565b905060018060a01b03831660208301529392505050565b6001600160401b03828116828216039080821115620098f357620098f36200a26c565b6000600182016200a40b576200a40b6200a26c565b5060010190565b6000808335601e198436030181126200a42a57600080fd5b8301803591506001600160401b038211156200a44557600080fd5b6020019150368190038213156200830b57600080fd5b601f821115620084d457600081815260208120601f850160051c810160208610156200a4845750805b601f850160051c820191505b8181101562008e04578281556001016200a490565b600019600383901b1c191660019190911b1790565b6001600160401b038311156200a4d4576200a4d462009a8f565b6200a4ec836200a4e583546200a20c565b836200a45b565b6000601f8411600181146200a51f57600085156200a50a5750838201355b6200a51686826200a4a5565b84555062007b59565b600083815260209020601f19861690835b828110156200a55257868501358255602094850194600190920191016200a530565b50868210156200a5705760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6200a58e82836200a412565b6001600160401b038111156200a5a8576200a5a862009a8f565b6200a5c0816200a5b985546200a20c565b856200a45b565b6000601f8211600181146200a5f357600083156200a5de5750838201355b6200a5ea84826200a4a5565b8655506200a650565b600085815260209020601f19841690835b828110156200a62657868501358255602094850194600190920191016200a604565b50848210156200a6445760001960f88660031b161c19848701351681555b505060018360011b0185555b505050506200a66360208301836200a412565b6200a6738183600186016200a4ba565b50506200a68460408301836200a412565b6200a6948183600286016200a4ba565b50506200a6a560608301836200a412565b6200a6b58183600386016200a4ba565b50505050565b81356200a6c88162009c5d565b6001600160401b03811690508154816001600160401b0319821617835560208401356200a6f58162009c5d565b6fffffffffffffffff0000000000000000604091821b166fffffffffffffffffffffffffffffffff198316841781178555908501356200a7358162009c5d565b6001600160c01b0319929092169092179190911760809190911b67ffffffffffffffff60801b1617905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600062009bbd6020830184866200a762565b60006001600160401b038211156200a7bd576200a7bd62009a8f565b5060051b60200190565b600060208083850312156200a7db57600080fd5b82516001600160401b038111156200a7f257600080fd5b8301601f810185136200a80457600080fd5b80516200a81562009b3e826200a7a1565b81815260059190911b820183019083810190878311156200a83557600080fd5b928401925b828410156200a8605783516200a8508162009908565b825292840192908401906200a83a565b979650505050505050565b600060208083850312156200a87f57600080fd5b82516001600160401b03808211156200a89757600080fd5b818501915085601f8301126200a8ac57600080fd5b81516200a8bd62009b3e826200a7a1565b81815260059190911b830184019084810190888311156200a8dd57600080fd5b8585015b838110156200a95b578051858111156200a8fb5760008081fd5b8601603f81018b136200a90e5760008081fd5b8781015160406200a92362009b3e8362009b03565b8281528d828486010111156200a9395760008081fd5b6200a94a838c830184870162009a26565b86525050509186019186016200a8e1565b5098975050505050505050565b600082516200a97c81846020870162009a26565b9190910192915050565b60ff84168152604060208201526000620090ee6040830184866200a762565b6040815260006200a9bb6040830186886200a762565b82810360208401526200a8608185876200a762565b81516001600160401b038111156200a9ec576200a9ec62009a8f565b6200aa04816200a9fd84546200a20c565b846200a45b565b602080601f8311600181146200aa3857600084156200aa235750858301515b6200aa2f85826200a4a5565b86555062008e04565b600085815260208120601f198616915b828110156200aa69578886015182559484019460019091019084016200aa48565b50858210156200aa885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200aaa8816200a20c565b600182811680156200aac357600181146200aad9576200ab0a565b60ff19841687528215158302870194506200ab0a565b8760005260208060002060005b858110156200ab015781548a8201529084019082016200aae6565b50505082870194505b50929695505050505050565b6bffffffffffffffffffffffff198360601b1681526000600383106200ab40576200ab406200a2d5565b5060f89190911b6014820152601501919050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b600086516200ab95818460208b0162009a26565b82018587823760009086019081528385823760009301928352509095945050505050565b6001600160a01b038316815260406020820181905260009062009bbd9083018462009a4c565b60ff8281168282160390811115620054fa57620054fa6200a26c56fe608060405260405162000e9638038062000e96833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e6f60279139620002f8565b9392505050565b60006200018060008051602062000e4f83398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e4f83398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61087580620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656424d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e0400000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000038000000000000000000000000295e26495cef6f69dfa69911d9d8e4f3bbadb89b00000000000000000000000072b61c6014342d914470ec7ac2975be345796c2b0000000000000000000000002465176c461afb316ebc773c61faee85a6515daa0000000000000000000000007ae2f5b9e386cd1b50a4550696d957cb4900f03a000000000000000000000000b4dd66d7c2c7e57f628210187192fb89d4b99dd4000000000000000000000000e9ae3261a475a27bb1028f140bc2a7c843318afd000000000000000000000000ee226379db83cffc681495730c11fdde79ba4c0c0000000000000000000000003f349bbafec1551819b8be1efea2fc46ca749aa10000000000000000000000008b6c8fd93d6f4cea42bbb345dbc6f0dfdb5bec73000000000000000000000000ef0274e31810c9df02f98fafde0f841f4e66a1cd000000000000000000000000a6f79b60359f141df90a0c745125b131caaffd12000000000000000000000000e2d3a739effcd3a99387d015e260eefac72ebea100000000000000000000000061dd481a114a2e761c554b641742c973867899d3000000000000000000000000cc8e6d00c17eb431350c6c50d8b8f05176b90b11000000000000000000000000ea0a6e3c511bbd10f4519ece37dc24887e11b55d0000000000000000000000002d4c407bbe49438ed859fe965b140dcf1aab71a9000000000000000000000000685b1ded8013785d6623cc18d214320b6bb64759000000000000000000000000d1d6bf74282782b0b3eb1413c901d6ecf02e8e2800000000000000000000000070f657164e5b75689b64b7fd1fa275f334f28e18000000000000000000000000be807dddb074639cd9fa61b47676c064fc50d62c000000000000000000000000b218c5d6af1f979ac42bc68d98a5a0d796c6ab010000000000000000000000009f8ccdafcc39f3c7d6ebf637c9151673cbc36b88000000000000000000000000d93dbfb27e027f5e9e6da52b9e1c413ce35adc11000000000000000000000000ce2fd7544e0b2cc94692d4a704debef7bcb613280000000000000000000000000bac492386862ad3df4b666bc096b0505bb694da000000000000000000000000733fda7714a05960b7536330be4dbb135bef0ed600000000000000000000000035ebb5849518aff370ca25e19e1072cc1a9fabca000000000000000000000000ebe0b55ad7bb78309180cada12427d120fdbcc3a0000000000000000000000006488aa4d1955ee33403f8ccb1d4de5fb97c7ade20000000000000000000000004396e28197653d0c244d95f8c1e57da902a72b4e000000000000000000000000702be18040aa2a9b1af9219941469f1a435854fc00000000000000000000000012d810c13e42811e9907c02e02d1fad46cfa18ba0000000000000000000000002a7cdd959bfe8d9487b2a43b33565295a698f7e2000000000000000000000000b8f7166496996a7da21cf1f1b04d9b3e26a3d0770000000000000000000000009bb832254baf4e8b4cc26bd2b52b31389b56e98b0000000000000000000000004430b3230294d12c6ab2aac5c2cd68e80b16b581000000000000000000000000c2be4ec20253b8642161bc3f444f53679c1f3d47000000000000000000000000ee01c3b1283aa067c58eab4709f85e99d46de5fe0000000000000000000000009ef9f4360c606c7ab4db26b016007d3ad0ab86a00000000000000000000000002f7be8361c80a4c1e7e9aaf001d0877f1cfde21800000000000000000000000035e7a025f4da968de7e4d7e4004197917f4070f1000000000000000000000000d6caa02bbebaebb5d7e581e4b66559e635f805ff0000000000000000000000008c4d90829ce8f72d0163c1d5cf348a862d55063000000000000000000000000068bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d00000000000000000000000082012708dafc9e1b880fd083b32182b869be8e090000000000000000000000006bbad7cf34b5fa511d8e963dbba288b1960e75d600000000000000000000000022b81f8e175ffde54d797fe11eb03f9e3bf75f1d00000000000000000000000078f3adfc719c99674c072166708589033e2d9afe00000000000000000000000029a97c6effb8a411dabc6adeefaa84f5067c8bbe000000000000000000000000aacf6a8119f7e11623b5a43da638e91f669a130f0000000000000000000000002b3a6c089311b478bf629c29d790a7a6db3fc1b9000000000000000000000000fe6e72b223f6d6cf4edc6bff92f30e84b8258249000000000000000000000000a6503279e8b5c7bb5cf4defd3ec8abf3e009a80b0000000000000000000000004ee63a09170c3f2207aeca56134fc2bee1b28e3c000000000000000000000000ac0e15a038eedfc68ba3c35c73fed5be4a07afb500000000000000000000000069c77a677c40c7fbea129d4b171a39b7a8ddabfa00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000005c00000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000074000000000000000000000000000000000000000000000000000000000000007a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000086000000000000000000000000000000000000000000000000000000000000008c00000000000000000000000000000000000000000000000000000000000000920000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000009e00000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000bc00000000000000000000000000000000000000000000000000000000000000c200000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000ce00000000000000000000000000000000000000000000000000000000000000d400000000000000000000000000000000000000000000000000000000000000da00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e600000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000000000000000000000000000000000000000000f200000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000000104000000000000000000000000000000000000000000000000000000000000010a00000000000000000000000000000000000000000000000000000000000000030977cf58294f7239d515e15b24cfeb82494056cf691eaf729b165f32c9757c429dba5051155903067e56ebe3698678e9100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003081db0422a5fd08e40db1fc2368d2245e4b18b1d0b85c921aaaafd2e341760e29fc613edd39f71254614e2055c3287a510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308a923564c6ffd37fb2fe9f118ef88092e8762c7addb526ab7eb1e772baef85181f892c731be0c1891a50e6b06262c816000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b84f83ff2df44193496793b847f64e9d6db1b3953682bb95edd096eb1e69bbd357c200992ca78050d0cbe180cfaa018e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b0de8472be0308918c8bdb369bf5a67525210daffa053c52224c1d2ef4f5b38e4ecfcd06a1cc51c39c3a7dccfcb6b507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030ae7bc6faa3f0cc3e6093b633fd7ee4f86970926958d0b7ec80437f936acf212b78f0cd095f4565fff144fd458d233a5b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003084248a459464eec1a21e7fc7b71a053d9644e9bb8da4853b8f872cd7c1d6b324bf1922829830646ceadfb658d3de009a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a8a257074e82b881cfa06ef3eb4efeca060c2531359abd0eab8af1e3edfa2025fca464ac9c3fd123f6c24a0d7886948500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003098cbf822e4bc29f1701ac0350a3d042cd0756e9f74822c6481773ceb000641c51b870a996fe0f6a844510b1061f38cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b772e180fbf38a051c97dabc8aaa0126a233a9e828cdafcc7422c4bb1f4030a56ba364c54103f26bad91508b5220b741000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030956c470ddff48cb49300200b5f83497f3a3ccb3aeb83c5edd9818569038e61d197184f4aa6939ea5e9911e3e98ac6d210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308a80967d39e406a0a9642d41e9007a27fc1150a267d143a9f786cd2b5eecbdcc4036273705225b956d5e2f8f5eb95d25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b3a3d4feb825ae9702711566df5dbf38e82add4dd1b573b95d2466fa6501ccb81e9d26a352b96150ccbf7b697fd0a419000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b2d4c6283c44a1c7bd503aaba7666e9f0c830e0ff016c1c750a5e48757a713d0836b1cabfd5c281b1de3b77d1c19218300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003093c1f7f6929d1fe2a17b4e14614ef9fc5bdc713d6631d675403fbeefac55611bf612700b1b65f4744861b80b0f7d6ab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308a60f82a7bcf74b4cb053b9bfe83d0ed02a84ebb10865dfdd8e26e7535c43a1cccd268e860f502216b379dfc9971d358000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030939e8fb41b682372335be8070199ad3e8621d1743bcac4cc9d8f0f6e10f41e56461385c8eb5daac804fe3f2bca6ce73900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003096a26afa1295da81418593bd12814463d9f6e45c36a0e47eb4cd3e5b6af29c41e2a3a5636430155a466e216585af3ba7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b1f2c71577def3144fabeb75a8a1c8cb5b51d1d1b4a05eec67988b8685008baa17459ec425dbaebc852f496dc92196cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b659ad0fbd9f515893fdd740b29ba0772dbde9b4635921dd91bd2963a0fc855e31f6338f45b211c4e9dedb7f2eb09de70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308819ec5ec3e97e1f03bbb4bb6055c7a5feac8f4f259df58349a32bb5cb377e2cb1f362b77f1dd398cfd3e9dba46138c3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b313f9cba57c63a84edb4079140e6dbd7829e5023c9532fce57e9fe602400a2953f4bf7dab66cca16e97be95d4de7044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b64abe25614c9cfd32e456b4d521f29c8357f4af4606978296c9be93494072ac05fa86e3d27cc8d66e65000f8ba33fbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b0bec348681af766751cb839576e9c515a09c8bffa30a46296ccc56612490eb480d03bf948e10005bbcc0421f90b3d4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b0245c33bc556cfeb013cd3643b30dbdef6df61a0be3ba00cae104b3c587083852e28f8911689c7033f7021a8a1774c9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a7f3e2c0b4b16ad183c473bafe30a36e39fa4a143657e229cd23c77f8fbc8e4e4e241695dd3d248d1e51521eee6619140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308fdf49777b22f927d460fa3fcdd7f2ba0cf200634a3dfb5197d7359f2f88aaf496ef8c93a065de0f376d164ff2b6db9a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308ab17a9148339ef40aed8c177379c4db0bb5efc6f5c57a5d1a6b58b84d4b562e227196c79bda9a136830ed0c09f378130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308dd20979bd63c14df617a6939c3a334798149151577dd3f1fadb2bd1c1b496bf84c25c879da5f0f9dfdb88c6dd17b1e6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b679cbab0276ac30ff5f198e5e1dedf6b84959129f70fe7a07fcdf13444ba45b5dbaa7b1f650adf8b0acbecd04e2675b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308974616fe8ab950a3cded19b1d16ff49c97bf5af65154b3b097d5523eb213f3d35fc5c57e7276c7f2d83be87ebfdcdf9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030ab764a39ff81dad720d5691b852898041a3842e09ecbac8025812d51b32223d8420e6ae51a01582220a10f7722de67c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000309025b6715c8eaabac0bfccdb2f25d651c9b69b0a184011a4a486b0b2080319d2396e7ca337f2abdf01548b2de1b3ba06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b2317f59d86abfaf690850223d90e9e7593d91a29331dfc2f84d5adecc75fc39ecab4632c1b4400a3dd1e1298835bcca00000000000000000000000000000000a164736f6c6343000811000a \ No newline at end of file diff --git a/core/systemcontracts/bohr/mainnet/ValidatorContract b/core/systemcontracts/bohr/mainnet/ValidatorContract new file mode 100644 index 0000000000..9983f26d0b --- /dev/null +++ b/core/systemcontracts/bohr/mainnet/ValidatorContract @@ -0,0 +1 @@ +60806040526004361061051c5760003560e01c80638a7beb01116102a2578063c81b166211610165578063e40716a1116100cc578063f92eb86b11610085578063f92eb86b14610d8d578063f9a2bbc714610da2578063fc3e590814610db7578063fccc281314610dcc578063fd4ad81f14610de1578063fd6a687914610e1057610523565b8063e40716a114610cfb578063ea321e4914610d10578063eb57e20214610d30578063eda5868c14610d50578063f1fad10414610d65578063f340fa0114610d7a57610523565b8063d86222d51161011e578063d86222d514610c7d578063daacdb6614610c92578063dc927faf14610ca7578063df8079e914610cbc578063e086c7b114610cd1578063e1c7392a14610ce657610523565b8063c81b166214610c09578063c8509d81146109ae578063cb75a59214610c1e578063ce910b0c14610c33578063d58918ae14610c53578063d68fb56a14610c6857610523565b8063aa82dce111610209578063aef198a9116101c2578063aef198a914610b93578063b7ab4db514610ba8578063b8cf4ef114610bca578063bf9f499514610734578063c466689d14610bdf578063c6d3394514610bf457610523565b8063aa82dce114610aff578063aad5606314610b14578063aaf5eb6814610b29578063ab51bb9614610b3e578063ac43175114610b53578063ad3c9da614610b7357610523565b80639dc092621161025b5780639dc0926214610a815780639fe0f81614610a96578063a0dc275814610aab578063a1a11bf514610ac0578063a5422d5c14610ad5578063a78abc1614610aea57610523565b80638a7beb01146109f85780638b5ad0c914610a0d5780638c5d749d14610a225780638d19a41014610a375780639369d7de14610a5757806396713da914610a6c57610523565b80635192c82c116103ea578063718a8aa81161035157806381650b621161030a57806381650b6214610984578063820dcaa814610999578063831d65d1146109ae578063853230aa1461093057806386249882146109ce57806388b32f11146109e357610523565b8063718a8aa81461090657806375d47a0a1461091b57806378dfed4a146109305780637942fd05146109455780637a84ca2a1461095a5780637e434d541461096f57610523565b80635d77156c116103a35780635d77156c1461086057806360eba4fe1461087557806362b72cf5146108955780636969a25c146108aa5780636e47b482146108dc57806370fd5bad146108f157610523565b80635192c82c146107cc57806351b4dce3146107e157806351e80672146107f657806355614fcc1461080b578063565c56b31461082b5780635667515a1461084b57610523565b80632a0ffb6e1161048e5780633dffc387116104475780633dffc3871461073457806343756e5c1461075657806345cf9daf1461076b578063493279b1146107805780634bf6c882146107a25780634df6e0c3146107b757610523565b80632a0ffb6e14610671578063300c356714610691578063321d398a146106b15780633365af3a146106d157806335409f7f146106f15780633b071dcc1461071157610523565b8063152ad3b8116104e0578063152ad3b8146105db5780631bd14ed8146105fd5780631e4c1524146106125780631ff1806914610632578063219f22d514610647578063280870281461065c57610523565b806304c4fec61461052857806307a568471461053f5780630bee7a671461056a5780630e2374a51461058c5780631182b875146105ae57610523565b3661052357005b600080fd5b34801561053457600080fd5b5061053d610e25565b005b34801561054b57600080fd5b50610554610e99565b60405161056191906193bb565b60405180910390f35b34801561057657600080fd5b5061057f610e9f565b60405161056191906193e5565b34801561059857600080fd5b506105a1610ea4565b60405161056191906184f9565b3480156105ba57600080fd5b506105ce6105c93660046183df565b610eaa565b60405161056191906186af565b3480156105e757600080fd5b506105f06111c7565b60405161056191906186a4565b34801561060957600080fd5b506105546111d0565b34801561061e57600080fd5b5061053d61062d3660046181ed565b6111d6565b34801561063e57600080fd5b506105546118ac565b34801561065357600080fd5b5061057f6118b2565b34801561066857600080fd5b506105a16118b7565b34801561067d57600080fd5b5061053d61068c36600461814d565b6118bd565b34801561069d57600080fd5b5061053d6106ac366004618185565b61196a565b3480156106bd57600080fd5b506105f06106cc36600461838c565b611cb3565b3480156106dd57600080fd5b506105f06106ec36600461838c565b611d82565b3480156106fd57600080fd5b5061053d61070c36600461814d565b611e33565b34801561071d57600080fd5b50610726611f98565b6040516105619291906185ba565b34801561074057600080fd5b50610749612274565b60405161056191906193f6565b34801561076257600080fd5b506105a1612279565b34801561077757600080fd5b5061055461227f565b34801561078c57600080fd5b50610795612285565b60405161056191906193ac565b3480156107ae57600080fd5b5061074961228a565b3480156107c357600080fd5b5061072661228f565b3480156107d857600080fd5b5061055461241b565b3480156107ed57600080fd5b506105a1612421565b34801561080257600080fd5b506105a1612427565b34801561081757600080fd5b506105f061082636600461814d565b61242d565b34801561083757600080fd5b5061055461084636600461814d565b612462565b34801561085757600080fd5b506107496124b3565b34801561086c57600080fd5b5061057f6124b8565b34801561088157600080fd5b506105ce61089036600461838c565b6124bd565b3480156108a157600080fd5b50610554612563565b3480156108b657600080fd5b506108ca6108c536600461838c565b612569565b60405161056196959493929190618526565b3480156108e857600080fd5b506105a16125cd565b3480156108fd57600080fd5b506107496125d3565b34801561091257600080fd5b506107496125d8565b34801561092757600080fd5b506105a16125dd565b34801561093c57600080fd5b506105546125e3565b34801561095157600080fd5b506107496125e9565b34801561096657600080fd5b506105546125ee565b34801561097b57600080fd5b506105a16125f4565b34801561099057600080fd5b5061057f6125fa565b3480156109a557600080fd5b506105546125ff565b3480156109ba57600080fd5b5061053d6109c93660046183df565b612605565b3480156109da57600080fd5b50610554612666565b3480156109ef57600080fd5b5061055461266c565b348015610a0457600080fd5b506105f0612672565b348015610a1957600080fd5b5061055461267b565b348015610a2e57600080fd5b50610554612681565b348015610a4357600080fd5b50610554610a5236600461814d565b61269e565b348015610a6357600080fd5b5061053d6126de565b348015610a7857600080fd5b506107496127f2565b348015610a8d57600080fd5b506105a16127f7565b348015610aa257600080fd5b506105546127fd565b348015610ab757600080fd5b50610554612802565b348015610acc57600080fd5b506105a1612807565b348015610ae157600080fd5b506105ce61280d565b348015610af657600080fd5b506105f061282c565b348015610b0b57600080fd5b506105a1612835565b348015610b2057600080fd5b506105a161283b565b348015610b3557600080fd5b50610554612841565b348015610b4a57600080fd5b5061057f6124b3565b348015610b5f57600080fd5b5061053d610b6e366004618330565b61284a565b348015610b7f57600080fd5b50610554610b8e36600461814d565b613343565b348015610b9f57600080fd5b50610554613355565b348015610bb457600080fd5b50610bbd613362565b60405161056191906185a7565b348015610bd657600080fd5b5061055461344d565b348015610beb57600080fd5b50610554613452565b348015610c0057600080fd5b506105546125d3565b348015610c1557600080fd5b506105a1613458565b348015610c2a57600080fd5b5061055461345e565b348015610c3f57600080fd5b506105ce610c4e36600461838c565b613464565b348015610c5f57600080fd5b50610554613471565b348015610c7457600080fd5b50610554613477565b348015610c8957600080fd5b506105546134b6565b348015610c9e57600080fd5b506105546134c2565b348015610cb357600080fd5b506105a16134c8565b348015610cc857600080fd5b506105a16134ce565b348015610cdd57600080fd5b50610554610e9f565b348015610cf257600080fd5b5061053d6134d4565b348015610d0757600080fd5b50610554613683565b348015610d1c57600080fd5b506105f0610d2b3660046182f1565b613689565b348015610d3c57600080fd5b5061053d610d4b36600461814d565b61380f565b348015610d5c57600080fd5b5061057f613913565b348015610d7157600080fd5b50610749613918565b61053d610d8836600461814d565b61391d565b348015610d9957600080fd5b50610554613cd3565b348015610dae57600080fd5b506105a1613cd9565b348015610dc357600080fd5b506107496127fd565b348015610dd857600080fd5b506105a1613cdf565b348015610ded57600080fd5b50610e01610dfc36600461838c565b613ce5565b604051610561939291906193c4565b348015610e1c57600080fd5b506105a1613da7565b6000610e303361269e565b9050600b8181548110610e3f57fe5b600091825260209091206001601690920201015460ff16610e7b5760405162461bcd60e51b8152600401610e7290618fdc565b60405180910390fd5b6000610e85613477565b9050610e943383836001613dad565b505050565b60095481565b606481565b61200181565b60005460609060ff16610ecf5760405162461bcd60e51b8152600401610e729061886e565b3361200014610ef05760405162461bcd60e51b8152600401610e72906191c4565b600b54610fae57610eff617cf9565b60015460005b81811015610faa57600b805460018101825560009190915283516000805160206194c88339815191526016909202918201908155602080860151600080516020619af78339815191528401805460ff1916911515919091179055604086015180518794610f86936000805160206194e8833981519152909101920190617d28565b506060820151610f9c9060038301906013617da2565b505050806001019050610f05565b5050505b610fb6617dcf565b6000610ff785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061408292505050565b91509150806110135761100a606461423e565b925050506111c0565b815160009060ff16611038576110318360200151846040015161429f565b905061118c565b825160ff16600114156111885782602001515160011461107d576000805160206194a883398151915260405161106d90618e95565b60405180910390a1506067611183565b6000836020015160008151811061109057fe5b602090810291909101810151516001600160a01b038116600090815260049092526040909120549091508015806110f157506001808203815481106110d157fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561112f576040516001600160a01b038316907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a261117c565b600061113e8360018403615461565b90508061117a576040516001600160a01b038416907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a25b505b6000925050505b61118c565b5060655b63ffffffff81166111b157505060408051600081526020810190915291506111c09050565b6111ba8161423e565b93505050505b9392505050565b60075460ff1681565b600f5481565b3341146111f55760405162461bcd60e51b8152600401610e7290619213565b3a156112135760405162461bcd60e51b8152600401610e7290618f1b565b825160408051828152602080840282010190915260609082801561125157816020015b61123e617df3565b8152602001906001900390816112365790505b50905060005b828110156112fb576040518060c0016040528087838151811061127657fe5b60200260200101516001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020018683815181106112b857fe5b60200260200101516001600160401b0316815260200160001515815260200160008152508282815181106112e857fe5b6020908102919091010152600101611257565b5060405163d31f968d60e01b81526120009063d31f968d90611326906110009060089060040161858b565b60206040518083038186803b15801561133e57600080fd5b505afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137691906182d1565b156116995780516015548181111561141857815b8181101561141657601580548061139d57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b031916905560030155905560168054806113f057fe5b60019003818190600052602060002001600061140c9190617e28565b905560010161138a565b505b60005b828110156116585781811061154057601584828151811061143857fe5b602090810291909101810151825460018181018555600094855293839020825160049092020180546001600160a01b039283166001600160a01b0319918216178255938301519481018054958316958516959095179094556040820151600285018054606085015160808601511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590961692909716919091179290921692909217169290921790915560a00151600390910155855160169087908390811061150857fe5b6020908102919091018101518254600181018455600093845292829020815161153a9491909101929190910190617d28565b50611650565b83818151811061154c57fe5b60200260200101516015828154811061156157fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a090910151600390910155855186908290811061161c57fe5b60200260200101516016828154811061163157fe5b90600052602060002001908051906020019061164e929190617d28565b505b60010161141b565b507fb8e726330a0dad1cf3d04e925663b17e391f1ed547d79b7f4e5f344119b442468260405161168891906193bb565b60405180910390a150505050610e94565b6060806116a68386615824565b9150915060005b60015481101561179c576000600182815481106116c657fe5b906000526020600020906004020160030154905080600014611793576000600183815481106116f157fe5b9060005260206000209060040201600301819055506120026001600160a01b031663092193ab826001858154811061172557fe5b60009182526020909120600491820201546040516001600160e01b031960e086901b168152611760926001600160a01b0390921691016184f9565b6000604051808303818588803b15801561177957600080fd5b505af115801561178d573d6000803e3d6000fd5b50505050505b506001016116ad565b50471561180a577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516117d291906193bb565b60405180910390a1604051611002904780156108fc02916000818181858888f19350505050158015611808573d6000803e3d6000fd5b505b60006003819055600555815115611825576118258282615d0e565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186257600080fd5b505af1158015611876573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a150505050505050565b60035481565b606881565b61200581565b33612002146118de5760405162461bcd60e51b8152600401610e7290619375565b60005b60155481101561196657816001600160a01b03166015828154811061190257fe5b60009182526020909120600490910201546001600160a01b0316141561195e5760016015828154811061193157fe5b9060005260206000209060040201600201601c6101000a81548160ff021916908315150217905550611966565b6001016118e1565b5050565b3341146119895760405162461bcd60e51b8152600401610e7290619213565b60105443116119aa5760405162461bcd60e51b8152600401610e7290618a90565b3a156119c85760405162461bcd60e51b8152600401610e7290618f1b565b60005460ff166119ea5760405162461bcd60e51b8152600401610e729061886e565b60006110023168056bc75e2d63100000811115611a2157611a1a8168056bc75e2d6310000063ffffffff6164fd16565b9150611a28565b5050611ca9565b6040516309a99b4f60e41b815261100290639a99b4f090611a4f903090869060040161850d565b602060405180830381600087803b158015611a6957600080fd5b505af1158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa191906183a4565b915081611aaf575050611ca9565b6000805b84811015611add57858582818110611ac757fe5b9050602002013582019150806001019050611ab3565b5080611aeb57505050611ca9565b6000806000805b89811015611ca15784898983818110611b0757fe5b90506020020135880281611b1757fe5b0493508a8a82818110611b2657fe5b9050602002016020810190611b3b919061814d565b6001600160a01b03811660009081526004602052604090205490935091508115611c57576000600180840381548110611b7057fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611bdd57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8586604051611bd091906193bb565b60405180910390a2611c51565b600354611bf0908663ffffffff61653f16565b6003908155810154611c08908663ffffffff61653f16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611c489088906193bb565b60405180910390a25b50611c99565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8585604051611c9091906193bb565b60405180910390a25b600101611af2565b505050505050505b5050436010555050565b6001546000908210611cc757506000611d7d565b60006001600160a01b031660018381548110611cdf57fe5b60009182526020909120600490910201546001600160a01b03161480611d0f57506008541580611d0f5750600a54155b80611d1e575060085460095410155b80611d2f5750611d2d82611d82565b155b80611d5857506000600b8381548110611d4457fe5b906000526020600020906016020160000154115b80611d6c57506001611d68613362565b5111155b15611d7957506000611d7d565b5060015b919050565b6001546000908210611d9657506000611d7d565b600b548210611dd35760018281548110611dac57fe5b9060005260206000209060040201600201601c9054906101000a900460ff16159050611d7d565b60018281548110611de057fe5b9060005260206000209060040201600201601c9054906101000a900460ff16158015611e2d5750600b8281548110611e1457fe5b600091825260209091206001601690920201015460ff16155b92915050565b600b54611ef157611e42617cf9565b60015460005b81811015611eed57600b805460018101825560009190915283516000805160206194c88339815191526016909202918201908155602080860151600080516020619af78339815191528401805460ff1916911515919091179055604086015180518794611ec9936000805160206194e8833981519152909101920190617d28565b506060820151611edf9060038301906013617da2565b505050806001019050611e48565b5050505b336110011480611f02575033612002145b611f1e5760405162461bcd60e51b8152600401610e72906188a5565b6001600160a01b03811660009081526004602052604090205480611f425750611f95565b6001810390506000600b8281548110611f5757fe5b600091825260209091206001601690920201015460ff169050611f7a8383615461565b8015611f835750805b15610e94576009805460001901905550505b50565b60015460609081906000805b82811015611feb5760018181548110611fb957fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611fe3576001909101905b600101611fa4565b50606081604051908082528060200260200182016040528015612018578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561205157816020015b606081526020019060019003908161203c5790505b50600b54600094509091508414156121cc5760005b848110156121c6576001818154811061207b57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166121be57600181815481106120ab57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106120d657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b818154811061210357fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561219b5780601f106121705761010080835404028352916020019161219b565b820191906000526020600020905b81548152906001019060200180831161217e57829003601f168201915b50505050508285815181106121ac57fe5b60209081029190910101526001909301925b600101612066565b50612268565b60005b8481101561226657600181815481106121e457fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661225e576001818154811061221457fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061223f57fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016121cf565b505b909450925050505b9091565b600181565b61100181565b60085481565b603881565b600881565b6060806000600e549050600080600c54116122ab5760156122af565b600c545b905060606122bb613362565b905060606122c882616564565b9050828251116122df579094509250612270915050565b838383510310156122f1578282510393505b83156123275760c8430461230d83838388880360008a8a6166d2565b6123258383838888038989038a8b8b8b5103016166d2565b505b606083604051908082528060200260200182016040528015612353578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561238c57816020015b60608152602001906001900390816123775790505b50905060005b8581101561240d578481815181106123a657fe5b60200260200101518382815181106123ba57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106123e657fe5b60200260200101518282815181106123fa57fe5b6020908102919091010152600101612392565b509096509450505050509091565b60065481565b61200681565b61200081565b6001600160a01b03811660009081526004602052604081205480612455576000915050611d7d565b600019016111c081611d82565b6001600160a01b0381166000908152600460205260408120548061248a576000915050611d7d565b60018082038154811061249957fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b601281815481106124ca57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529350909183018282801561255b5780601f106125305761010080835404028352916020019161255b565b820191906000526020600020905b81548152906001019060200180831161253e57829003601f168201915b505050505081565b60105481565b6001818154811061257657fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b61200381565b606681565b61271081565b33612000146126265760405162461bcd60e51b8152600401610e72906191c4565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f3890210160583838360405161265993929190619404565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6000601754600014156126965750600161269b565b506017545b90565b6001600160a01b038116600090815260046020526040812054806126d45760405162461bcd60e51b8152600401610e729061914c565b6000190192915050565b600b5461279c576126ed617cf9565b60015460005b8181101561279857600b805460018101825560009190915283516000805160206194c88339815191526016909202918201908155602080860151600080516020619af78339815191528401805460ff1916911515919091179055604086015180518794612774936000805160206194e8833981519152909101920190617d28565b50606082015161278a9060038301906013617da2565b5050508060010190506126f3565b5050505b6008546127a95760036008555b600a546127b6576002600a555b60006127c13361269e565b90506127cc81611cb3565b6127e85760405162461bcd60e51b8152600401610e7290618e52565b611f953382616829565b600981565b61100781565b600381565b60c881565b61100681565b6040518061062001604052806105ef81526020016195086105ef913981565b60005460ff1681565b61200281565b61300081565b6402540be40081565b60005460ff1661286c5760405162461bcd60e51b8152600401610e729061886e565b336110071461288d5760405162461bcd60e51b8152600401610e7290618f49565b6128f784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506168c19050565b15612994576020811461291c5760405162461bcd60e51b8152600401610e7290619106565b604080516020601f840181900481028201810190925282815260009161295a9185858083850183828082843760009201919091525061691a92505050565b9050606481101580156129705750620186a08111155b61298c5760405162461bcd60e51b8152600401610e7290618cb3565b600255613300565b6129f484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506168c19050565b15612aa95760208114612a195760405162461bcd60e51b8152600401610e72906186f4565b604080516020601f8401819004810282018101909252828152600091612a579185858083850183828082843760009201919091525061691a92505050565b9050612710612a83601854612a77600f548561653f90919063ffffffff16565b9063ffffffff61653f16565b1115612aa15760405162461bcd60e51b8152600401610e7290618bd9565b600655613300565b612b1384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506168c19050565b15612bad5760208114612b385760405162461bcd60e51b8152600401610e729061872b565b604080516020601f8401819004810282018101909252828152600091612b769185858083850183828082843760009201919091525061691a92505050565b600c5490915080612b85575060155b808210612ba45760405162461bcd60e51b8152600401610e7290618afa565b50600855613300565b612c1684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506168c19050565b15612caf5760208114612c3b5760405162461bcd60e51b8152600401610e72906187f4565b604080516020601f8401819004810282018101909252828152600091612c799185858083850183828082843760009201919091525061691a92505050565b9050600081118015612c8b5750600a81105b612ca75760405162461bcd60e51b8152600401610e72906192a8565b600a55613300565b612d2384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506168c19050565b15612db25760208114612d485760405162461bcd60e51b8152600401610e72906187a8565b604080516020601f8401819004810282018101909252828152600091612d869185858083850183828082843760009201919091525061691a92505050565b9050600d54811115612daa5760405162461bcd60e51b8152600401610e7290618d29565b600e55613300565b612e1b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506168c19050565b15612e9d5760208114612e405760405162461bcd60e51b8152600401610e7290618f97565b604080516020601f8401819004810282018101909252828152600091612e7e9185858083850183828082843760009201919091525061691a92505050565b600d819055600e54909150811015612e9757600d54600e555b50613300565b612f0184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506168c19050565b15612faf5760208114612f265760405162461bcd60e51b8152600401610e7290618839565b604080516020601f8401819004810282018101909252828152600091612f649185858083850183828082843760009201919091525061691a92505050565b905060008111612f865760405162461bcd60e51b8152600401610e72906189a2565b6064811115612fa75760405162461bcd60e51b8152600401610e72906189ea565b600c55613300565b61301b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601581527473797374656d52657761726442617365526174696f60581b602082015291506168c19050565b156130c457602081146130405760405162461bcd60e51b8152600401610e7290619260565b604080516020601f840181900481028201810190925282815260009161307e9185858083850183828082843760009201919091525061691a92505050565b905061271061309e601854612a776006548561653f90919063ffffffff16565b11156130bc5760405162461bcd60e51b8152600401610e7290618913565b600f55613300565b61313884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f73797374656d526577617264416e74694d4556526174696f0000000000000000602082015291506168c19050565b156131e1576020811461315d5760405162461bcd60e51b8152600401610e7290618c68565b604080516020601f840181900481028201810190925282815260009161319b9185858083850183828082843760009201919091525061691a92505050565b90506127106131bb600f54612a776006548561653f90919063ffffffff16565b11156131d95760405162461bcd60e51b8152600401610e7290618dc3565b601855613300565b61324284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a8152690e8eae4dc98cadccee8d60b31b602082015291506168c19050565b156132e857602081146132675760405162461bcd60e51b8152600401610e7290618b57565b604080516020601f84018190048102820181019092528281526000916132a59185858083850183828082843760009201919091525061691a92505050565b9050600381101580156132b9575060098111155b806132c45750806001145b6132e05760405162461bcd60e51b8152600401610e7290619080565b601755613300565b60405162461bcd60e51b8152600401610e7290619305565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161333594939291906186c2565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156133915761337d81611d82565b15613389578160010191505b60010161336c565b506060816040519080825280602002602001820160405280156133be578160200160208202803683370190505b5090506000915060005b83811015613445576133d981611d82565b1561343d57600181815481106133eb57fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061341657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b6001016133c8565b509250505090565b601581565b61027181565b61100281565b60175481565b601381815481106124ca57fe5b60185481565b6000613481613362565b519050600080600c541161349657601561349a565b600c545b9050808211156134a8578091505b816134b257600191505b5090565b67016345785d8a000081565b60055481565b61100381565b61200481565b60005460ff16156134f75760405162461bcd60e51b8152600401610e7290619049565b6134ff617dcf565b60006135256040518061062001604052806105ef81526020016195086105ef9139614082565b91509150806135465760405162461bcd60e51b8152600401610e7290619183565b60005b82602001515181101561366b5760018360200151828151811061356857fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061363e57fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101613549565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b818110156137925761377a85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506013805490925085915081106136e257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156137705780601f1061374557610100808354040283529160200191613770565b820191906000526020600020905b81548152906001019060200180831161375357829003601f168201915b505050505061691f565b1561378a57600192505050611e2d565b600101613691565b5060125460005b81811015613803576137ea86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506012805490925085915081106136e257fe5b156137fb5760019350505050611e2d565b600101613799565b50600095945050505050565b33611001146138305760405162461bcd60e51b8152600401610e729061932c565b600b546138ee5761383f617cf9565b60015460005b818110156138ea57600b805460018101825560009190915283516000805160206194c88339815191526016909202918201908155602080860151600080516020619af78339815191528401805460ff19169115159190911790556040860151805187946138c6936000805160206194e8833981519152909101920190617d28565b5060608201516138dc9060038301906013617da2565b505050806001019050613845565b5050505b60006138f982616983565b905061390481611cb3565b15611966576119668282616829565b606581565b601181565b33411461393c5760405162461bcd60e51b8152600401610e7290619213565b60005460ff1661395e5760405162461bcd60e51b8152600401610e729061886e565b6000341161397e5760405162461bcd60e51b8152600401610e7290618cfa565b3a1561399c5760405162461bcd60e51b8152600401610e7290618f1b565b6001600160a01b03811660009081526004602052604090205460145434919060ff166139dc57610271600f556103e86006556014805460ff191660011790555b600f5460175460011080156139f357506000601854115b15613a18576001601754036017544381613a0957fe5b066018540281613a1557fe5b04015b600083118015613a285750600081115b15613ad5576000613a51612710613a45348563ffffffff616b0616565b9063ffffffff616b4016565b90508015613ad3576040516110029082156108fc029083906000818181858888f19350505050158015613a88573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051613ab891906193bb565b60405180910390a1613ad0848263ffffffff6164fd16565b93505b505b600083118015613ae757506000600654115b15613b8d576000613b09612710613a4560065434616b0690919063ffffffff16565b90508015613b8b5760405161dead9082156108fc029083906000818181858888f19350505050158015613b40573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051613b7091906193bb565b60405180910390a1613b88848263ffffffff6164fd16565b93505b505b8115613c8b576000600180840381548110613ba457fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615613c1157846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051613c0491906193bb565b60405180910390a2613c85565b600354613c24908563ffffffff61653f16565b6003908155810154613c3c908563ffffffff61653f16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590613c7c9087906193bb565b60405180910390a25b50613ccd565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051613cc491906193bb565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110613cf257fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff90911694919291830182828015613d9d5780601f10613d7257610100808354040283529160200191613d9d565b820191906000526020600020905b815481529060010190602001808311613d8057829003601f168201915b5050505050905083565b61100481565b6000600a5460001480613dbe575082155b80613dc95750600954155b15613dd65750600061407a565b60096000815460019003919050819055506000613e21600a54613a4586613a45600b8a81548110613e0357fe5b6000918252602090912060169091020154439063ffffffff6164fd16565b90506000600b8681548110613e3257fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b158015613e9757600080fd5b505afa158015613eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ecf91906183bc565b915091506000935080831061403057613ee88888615461565b5060405163436aa28360e11b8152600090612002906386d5450690613f11908c906004016184f9565b60206040518083038186803b158015613f2957600080fd5b505afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190618169565b6001600160a01b031614613fcf576040516328aa02b160e01b8152611001906328aa02b190613f98908b9087908a90600401618568565b600060405180830381600087803b158015613fb257600080fd5b505af1158015613fc6573d6000803e3d6000fd5b50505050614027565b6040516305bfb49960e41b815261100190635bfb499090613ff4908b906004016184f9565b600060405180830381600087803b15801561400e57600080fd5b505af1158015614022573d6000803e3d6000fd5b505050505b60019350614042565b8183106140425761404088616983565b505b6040516001600160a01b038916907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050505b949350505050565b61408a617dcf565b6000614094617dcf565b61409c617e6c565b6140ad6140a886616b82565b616ba7565b90506000805b6140bc83616bf1565b1561423057806140e1576140d76140d284616c12565b616c60565b60ff168452614228565b80600114156142235760606140fd6140f885616c12565b616ce0565b9050805160405190808252806020026020018201604052801561413a57816020015b614127617df3565b81526020019060019003908161411f5790505b508560200181905250805160405190808252806020026020018201604052801561417857816020015b60608152602001906001900390816141635790505b50604086015260005b815181101561421857614192617df3565b606060006141b28585815181106141a557fe5b6020026020010151616db1565b925092509250806141d2578860009a509a50505050505050505050614239565b82896020015185815181106141e357fe5b602002602001018190525081896040015185815181106141ff57fe5b6020026020010181905250505050806001019050614181565b506001925050614228565b614230565b6001016140b3565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161425857905050905061427e8363ffffffff16616ecb565b8160008151811061428b57fe5b60200260200101819052506111c081616ede565b60006064835111156142d6576000805160206194a88339815191526040516142c690618a47565b60405180910390a1506066611e2d565b60005b83518110156143745760005b8181101561436b578481815181106142f957fe5b6020026020010151600001516001600160a01b031685838151811061431a57fe5b6020026020010151600001516001600160a01b03161415614363576000805160206194a883398151915260405161435090618b8e565b60405180910390a1606692505050611e2d565b6001016142e5565b506001016142d9565b5060608060606015805480602002602001604051908101604052809291908181526020016000905b828210156144265760008481526020908190206040805160c0810182526004860290920180546001600160a01b039081168452600180830154821685870152600283015491821693850193909352600160a01b81046001600160401b03166060850152600160e01b900460ff16151560808401526003015460a0830152908352909201910161439c565b50505050905060606016805480602002602001604051908101604052809291908181526020016000905b828210156144fb5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156144e75780601f106144bc576101008083540402835291602001916144e7565b820191906000526020600020905b8154815290600101906020018083116144ca57829003601f168201915b505050505081526020019060010190614450565b50505050905060005b82518110156145585782818151811061451957fe5b60200260200101516060015160030283828151811061453457fe5b60209081029190910101516001600160401b03909116606090910152600101614504565b5060608061456889898686616f68565b915091506145768282615824565b600154604080518281526020808402820101909152929850909650600095508594509250606091508280156145b5578160200160208202803683370190505b50905060005b828110156147465760006001600160a01b03166120026001600160a01b03166386d54506600184815481106145ec57fe5b60009182526020909120600491820201546040516001600160e01b031960e085901b168152614627926001600160a01b0390921691016184f9565b60206040518083038186803b15801561463f57600080fd5b505afa158015614653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146779190618169565b6001600160a01b0316146146d957600182828151811061469357fe5b602002602001019060ff16908160ff1681525050600181815481106146b457fe5b9060005260206000209060040201600301546000146146d4578360010193505b61473e565b67016345785d8a0000600182815481106146ef57fe5b906000526020600020906004020160030154106147115784600101945061473e565b6001818154811061471e57fe5b90600052602060002090600402016003015460001461473e578360010193505b6001016145bb565b50606084604051908082528060200260200182016040528015614773578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156147a2578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156147d1578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015614800578160200160208202803683370190505b5090506000606088604051908082528060200260200182016040528015614831578160200160208202803683370190505b509050606089604051908082528060200260200182016040528015614860578160200160208202803683370190505b50905060009a506000995060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156148a857600080fd5b505afa1580156148bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148e091906183a4565b905067016345785d8a000081111561492c576000805160206194a883398151915260405161490d90619008565b60405180910390a160689e505050505050505050505050505050611e2d565b60005b8a811015614cc05789818151811061494357fe5b602002602001015160ff1660011415614a39576001818154811061496357fe5b906000526020600020906004020160030154600014614a34576001818154811061498957fe5b600091825260209091206004909102015484516001600160a01b039091169085908e9081106149b457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600181815481106149e157fe5b906000526020600020906004020160030154838d815181106149ff57fe5b60200260200101818152505060018a8d81518110614a1957fe5b602002602001019060ff16908160ff16815250508b6001019b505b614cb8565b67016345785d8a000060018281548110614a4f57fe5b90600052602060002090600402016003015410614bd45760018181548110614a7357fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898e81518110614aa457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be40060018381548110614ad957fe5b90600052602060002090600402016003015481614af257fe5b0660018381548110614b0057fe5b906000526020600020906004020160030154039050614b2883826164fd90919063ffffffff16565b898f81518110614b3457fe5b60200260200101818152505060018281548110614b4d57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878f81518110614b7e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888f81518110614bab57fe5b6020908102919091010152614bc6868263ffffffff61653f16565b95508d6001019d5050614cb8565b60018181548110614be157fe5b906000526020600020906004020160030154600014614cb85760018181548110614c0757fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848d81518110614c3857fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110614c6557fe5b906000526020600020906004020160030154838d81518110614c8357fe5b60200260200101818152505060008a8d81518110614c9d57fe5b602002602001019060ff16908160ff16815250508b6001019b505b60010161492f565b5060008415614f36576002546040516303702b2960e51b815261100491636e056520918891614cfa918e918e918d9142019060040161862a565b6020604051808303818588803b158015614d1357600080fd5b505af193505050508015614d44575060408051601f3d908101601f19168201909252614d41918101906182d1565b60015b614ebb576040516000815260443d1015614d6057506000614dfb565b60046000803e60005160e01c6308c379a08114614d81576000915050614dfb565b60043d036004833e81513d60248201116001600160401b0382111715614dac57600092505050614dfb565b80830180516001600160401b03811115614dcd576000945050505050614dfb565b8060208301013d8601811115614deb57600095505050505050614dfb565b601f01601f191660405250925050505b80614e065750614e48565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051614e3a91906186af565b60405180910390a250614eb6565b3d808015614e72576040519150601f19603f3d011682016040523d82523d6000602084013e614e77565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051614eac91906186af565b60405180910390a2505b614f36565b8015614efd577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051614ef091906193bb565b60405180910390a1614f34565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051614f2b90618771565b60405180910390a25b505b80156150ec5760005b87518110156150ea576000888281518110614f5657fe5b60200260200101519050600060018281548110614f6f57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110614fa057fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f193505050509050801561505c5760018281548110614fe157fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d918590811061503057fe5b90600052602060002090600402016003015460405161504f91906193bb565b60405180910390a26150e0565b6001828154811061506957fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d91859081106150b857fe5b9060005260206000209060040201600301546040516150d791906193bb565b60405180910390a25b5050600101614f3f565b505b8351156152e25760005b84518110156152e0578a818151811061510b57fe5b602002602001015160ff16600114156151aa576120026001600160a01b031663092193ab85838151811061513b57fe5b602002602001015187848151811061514f57fe5b60200260200101516040518363ffffffff1660e01b815260040161517391906184f9565b6000604051808303818588803b15801561518c57600080fd5b505af11580156151a0573d6000803e3d6000fd5b50505050506152d8565b60008582815181106151b857fe5b60200260200101516001600160a01b03166108fc8684815181106151d857fe5b60200260200101519081150290604051600060405180830381858888f193505050509050801561526e5785828151811061520e57fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d86848151811061524c57fe5b602002602001015160405161526191906193bb565b60405180910390a26152d6565b85828151811061527a57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d8684815181106152b857fe5b60200260200101516040516152cd91906193bb565b60405180910390a25b505b6001016150f6565b505b5050505050505050505050505060005b60015481101561534f576001818154811061530957fe5b9060005260206000209060040201600301546000146153475760006001828154811061533157fe5b9060005260206000209060040201600301819055505b6001016152f2565b5047156153bd577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d4760405161538591906193bb565b60405180910390a1604051611002904780156108fc02916000818181858888f193505050501580156153bb573d6000803e3d6000fd5b505b600060038190556005558151156153d8576153d88282615d0e565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561541557600080fd5b505af1158015615429573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b6000806001838154811061547157fe5b9060005260206000209060040201600301549050600060018080549050039050600161549b613362565b51116154d0576000600185815481106154b057fe5b906000526020600020906004020160030181905550600092505050611e2d565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161550991906193bb565b60405180910390a26001600160a01b038516600090815260046020526040812055835b600154600019018110156156f6576001816001018154811061554a57fe5b90600052602060002090600402016001828154811061556557fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b80549091830190811061562657fe5b9060005260206000209060160201600b828154811061564157fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff1990921691909117905560028084018054615698938386019390821615610100026000190190911604617e8c565b506156ab60038281019084016013617f01565b509050508060010160046000600184815481106156c457fe5b600091825260208083206004909202909101546001600160a01b0316835282019290925260400190205560010161552c565b50600180548061570257fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061575557fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906157876002830182617e28565b615795600383016000617f2b565b5050905560008183816157a457fe5b04905080156158185760015460005b81811015615815576157ec83600183815481106157cc57fe5b90600052602060002090600402016003015461653f90919063ffffffff16565b600182815481106157f957fe5b60009182526020909120600360049092020101556001016157b3565b50505b50600195945050505050565b606080600080808080615835613477565b6001549091505b8015615a6757600181039250600b838154811061585557fe5b600091825260209091206001601690920201015460ff1661587557615a5e565b6001838154811061588257fe5b600091825260208220600490910201546001600160a01b031695506158ac90869085908590613dad565b9350836158b857615a5e565b60405163436aa28360e11b81526000908190612002906386d54506906158e2908a906004016184f9565b60206040518083038186803b1580156158fa57600080fd5b505afa15801561590e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159329190618169565b90506001600160a01b038116156159bb576040516302ceee9160e11b81526120029063059ddd22906159689084906004016184f9565b60206040518083038186803b15801561598057600080fd5b505afa158015615994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159b89190618169565b91505b60005b8c51811015615a5a57876001600160a01b03168d82815181106159dd57fe5b6020026020010151600001516001600160a01b03161480615a265750826001600160a01b03168d8281518110615a0f57fe5b6020026020010151600001516001600160a01b0316145b15615a525760018d8281518110615a3957fe5b6020908102919091010151901515608090910152615a5a565b6001016159be565b5050505b6000190161583c565b5060005b8951811015615ad457898181518110615a8057fe5b60200260200101516080015180615ac0575060006001600160a01b03168a8281518110615aa957fe5b6020026020010151600001516001600160a01b0316145b15615acc578560010195505b600101615a6b565b5088518510615bbc5760408051600180825281830190925290816020015b615afa617df3565b815260200190600190039081615af2575050604080516001808252818301909252919850602082015b6060815260200190600190039081615b2357905050955088600081518110615b4757fe5b602002602001015187600081518110615b5c57fe5b602002602001018190525087600081518110615b7457fe5b602002602001015186600081518110615b8957fe5b6020026020010181905250600087600081518110615ba357fe5b6020908102919091010151901515608090910152615d01565b84895103604051908082528060200260200182016040528015615bf957816020015b615be6617df3565b815260200190600190039081615bde5790505b50965084895103604051908082528060200260200182016040528015615c3357816020015b6060815260200190600190039081615c1e5790505b5095506000915060005b8951811015615cff57898181518110615c5257fe5b602002602001015160800151158015615c95575060006001600160a01b03168a8281518110615c7d57fe5b6020026020010151600001516001600160a01b031614155b15615cf757898181518110615ca657fe5b6020026020010151888481518110615cba57fe5b6020026020010181905250888181518110615cd157fe5b6020026020010151878481518110615ce557fe5b60200260200101819052508260010192505b600101615c3d565b505b50505050505b9250929050565b600154825160005b82811015615e2b576001615d28617df3565b60018381548110615d3557fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b84811015615dff57878181518110615dc557fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b03161415615df75760009250615dff565b600101615db1565b508115615e215780516001600160a01b03166000908152600460205260408120555b5050600101615d16565b5080821115615eea57805b82811015615ee8576001805480615e4957fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b805480615e9c57fe5b60008281526020812060166000199093019283020181815560018101805460ff1916905590615ece6002830182617e28565b615edc600383016000617f2b565b50509055600101615e36565b505b6000818310615ef95781615efb565b825b905060005b8181101561629f57615fad868281518110615f1757fe5b602002602001015160018381548110615f2c57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152617334565b616161578060010160046000888481518110615fc557fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555085818151811061600157fe5b60200260200101516001828154811061601657fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106160d157fe5b6020026020010151600b82815481106160e657fe5b9060005260206000209060160201600201908051906020019061610a929190617d28565b506000600b828154811061611a57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061614b57fe5b6000918252602090912060169091020155616297565b85818151811061616d57fe5b6020026020010151606001516001828154811061618657fe5b906000526020600020906004020160020160146101000a8154816001600160401b0302191690836001600160401b0316021790555061624c8582815181106161ca57fe5b6020026020010151600b83815481106161df57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156137705780601f1061374557610100808354040283529160200191613770565b6162975784818151811061625c57fe5b6020026020010151600b828154811061627157fe5b90600052602060002090601602016002019080519060200190616295929190617d28565b505b600101615f00565b5082821115616477576162b0617cf9565b835b83811015616474578581815181106162c657fe5b6020026020010151826040018190525060018782815181106162e457fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206194c8833981519152810191825585830151600080516020619af78339815191528201805491151560ff199092169190911790559285015180518694929361641a936000805160206194e883398151915201920190617d28565b5060608201516164309060038301906013617da2565b505050806001016004600089848151811061644757fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016162b2565b50505b61647f617390565b616487617572565b6000600981905560015493505b838110156164f5576000600b82815481106164ab57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b8054839081106164dc57fe5b6000918252602090912060169091020155600101616494565b505050505050565b60006111c083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250617760565b6000828201838110156111c05760405162461bcd60e51b8152600401610e72906188dc565b6001548151604080518281526020808402820101909152606092919083908280156165a357816020015b606081526020019060019003908161658e5790505b50600b5490915083146165ba579250611d7d915050565b60005b828110156166c957600b6001600460008985815181106165d957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061660d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156166a55780601f1061667a576101008083540402835291602001916166a5565b820191906000526020600020905b81548152906001019060200180831161668857829003601f168201915b50505050508282815181106166b657fe5b60209081029190910101526001016165bd565b50949350505050565b60005b8281101561681f57600082878388016040516020016166f59291906184eb565b6040516020818303038152906040528051906020012060001c8161671557fe5b06905080850182870114616816576000898388018151811061673357fe5b602002602001015190506060898489018151811061674d57fe5b602002602001015190508a8388018151811061676557fe5b60200260200101518b858a018151811061677b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106167aa57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505089838801815181106167d857fe5b60200260200101518a858a01815181106167ee57fe5b6020026020010181905250808a8489018151811061680857fe5b602002602001018190525050505b506001016166d5565b5050505050505050565b600980546001908101909155600b80548390811061684357fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b828154811061687957fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b6000816040516020016168d491906184cf565b60405160208183030381529060405280519060200120836040516020016168fb91906184cf565b6040516020818303038152906040528051906020012014905092915050565b015190565b81518151600091600191811480831461693b5760009250616979565b600160208701838101602088015b6002848385100114156169745780518351146169685760009650600093505b60209283019201616949565b505050505b5090949350505050565b6001600160a01b038116600090815260046020526040812054806169ac57506000199050611d7d565b6001810390506000600182815481106169c157fe5b90600052602060002090600402016003015490506000600183815481106169e457fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90616a3d9085906193bb565b60405180910390a280616a5557829350505050611d7d565b6000818381616a6057fe5b0490508015616afc5760005b84811015616aae57616a8582600183815481106157cc57fe5b60018281548110616a9257fe5b6000918252602090912060036004909202010155600101616a6c565b50600180549085015b81811015616af957616ad083600183815481106157cc57fe5b60018281548110616add57fe5b6000918252602090912060036004909202010155600101616ab7565b50505b5091949350505050565b600082616b1557506000611e2d565b82820282848281616b2257fe5b04146111c05760405162461bcd60e51b8152600401610e7290618eda565b60006111c083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061778c565b616b8a617f3a565b506040805180820190915281518152602082810190820152919050565b616baf617e6c565b616bb8826177c3565b616bc157600080fd5b6000616bd083602001516177fd565b60208085015160408051808201909152868152920190820152915050919050565b6000616bfb617f3a565b505080518051602091820151919092015191011190565b616c1a617f3a565b616c2382616bf1565b616c2c57600080fd5b60208201516000616c3c82617860565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590616c7557508151602110155b616c7e57600080fd5b6000616c8d83602001516177fd565b90508083600001511015616cb35760405162461bcd60e51b8152600401610e72906190cf565b8251602080850151830180519284900392918310156166c957506020919091036101000a90049392505050565b6060616ceb826177c3565b616cf457600080fd5b6000616cff83617941565b9050606081604051908082528060200260200182016040528015616d3d57816020015b616d2a617f3a565b815260200190600190039081616d225790505b5090506000616d4f85602001516177fd565b60208601510190506000805b84811015616da657616d6c83617860565b9150604051806040016040528083815260200184815250848281518110616d8f57fe5b602090810291909101015291810191600101616d5b565b509195945050505050565b616db9617df3565b60606000616dc5617df3565b6060616dcf617e6c565b616dd887616ba7565b90506000805b616de783616bf1565b15616ebc5780616e1257616e02616dfd84616c12565b61799d565b6001600160a01b03168552616eb4565b8060011415616e3a57616e27616dfd84616c12565b6001600160a01b03166020860152616eb4565b8060021415616e6257616e4f616dfd84616c12565b6001600160a01b03166040860152616eb4565b8060031415616e8e57616e776140d284616c12565b6001600160401b0316606086015260019150616eb4565b8060041415616eaf57616ea8616ea384616c12565b6179b7565b9350616eb4565b616ebc565b600101616dde565b50929791965091945092505050565b6060611e2d616ed983617a27565b617b0d565b6060815160001415616eff5750604080516000815260208101909152611d7d565b606082600081518110616f0e57fe5b602002602001015190506000600190505b8351811015616f4f57616f4582858381518110616f3857fe5b6020026020010151617b5f565b9150600101616f1f565b506111c0616f62825160c060ff16617bdc565b82617b5f565b60608060006120026001600160a01b031663c473318f6040518163ffffffff1660e01b815260040160206040518083038186803b158015616fa857600080fd5b505afa158015616fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616fe091906183a4565b90508085518851011015616ff5575083518651015b60608160405190808252806020026020018201604052801561703157816020015b61701e617df3565b8152602001906001900390816170165790505b50905060608260405190808252806020026020018201604052801561706a57816020015b60608152602001906001900390816170555790505b50905060008060005b8b518310806170825750895182105b801561708d57508581105b15617322578b518314156170fd578982815181106170a757fe5b60200260200101518582815181106170bb57fe5b60200260200101819052508882815181106170d257fe5b60200260200101518482815181106170e657fe5b602090810291909101015260019182019101617073565b8951821415617168578b838151811061711257fe5b602002602001015185828151811061712657fe5b60200260200101819052508a838151811061713d57fe5b602002602001015184828151811061715157fe5b602090810291909101015260019283019201617073565b89828151811061717457fe5b6020026020010151606001516001600160401b03168c848151811061719557fe5b6020026020010151606001516001600160401b03161115617211578b83815181106171bc57fe5b60200260200101518582815181106171d057fe5b60200260200101819052508a83815181106171e757fe5b60200260200101518482815181106171fb57fe5b602002602001018190525082600101925061731a565b89828151811061721d57fe5b6020026020010151606001516001600160401b03168c848151811061723e57fe5b6020026020010151606001516001600160401b031610156172ba5789828151811061726557fe5b602002602001015185828151811061727957fe5b602002602001018190525088828151811061729057fe5b60200260200101518482815181106172a457fe5b602002602001018190525081600101915061731a565b8982815181106172c657fe5b6020026020010151600001516001600160a01b03168c84815181106172e757fe5b6020026020010151600001516001600160a01b0316101561730e578b83815181106171bc57fe5b8982815181106170a757fe5b600101617073565b50929a91995090975050505050505050565b805182516000916001600160a01b03918216911614801561736e575081602001516001600160a01b031683602001516001600160a01b0316145b80156111c05750506040908101519101516001600160a01b0390811691161490565b601254601354808211156173db57805b828110156173d95760128054806173b357fe5b6001900381819060005260206000200160006173cf9190617e28565b90556001016173a0565b505b60008183106173ea57816173ec565b825b905060005b81811015617504576174a96012828154811061740957fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156174975780601f1061746c57610100808354040283529160200191617497565b820191906000526020600020905b81548152906001019060200180831161747a57829003601f168201915b5050505050601383815481106136e257fe5b6174fc57601381815481106174ba57fe5b90600052602060002001601282815481106174d157fe5b9060005260206000200190805460018160011615610100020316600290046174fa929190617e8c565b505b6001016173f1565b5082821115610e9457825b82811015613ccd5760126013828154811061752657fe5b6000918252602080832084546001818101875595855291909320929091018054617569949390920192909160026101009282161592909202600019011604617e8c565b5060010161750f565b601354600b54808211156175bd57805b828110156175bb57601380548061759557fe5b6001900381819060005260206000200160006175b19190617e28565b9055600101617582565b505b60008183106175cc57816175ce565b825b905060005b818110156176ed5761768b601382815481106175eb57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156176795780601f1061764e57610100808354040283529160200191617679565b820191906000526020600020905b81548152906001019060200180831161765c57829003601f168201915b5050505050600b83815481106161df57fe5b6176e557600b818154811061769c57fe5b9060005260206000209060160201600201601382815481106176ba57fe5b9060005260206000200190805460018160011615610100020316600290046176e3929190617e8c565b505b6001016175d3565b5082821115610e9457825b82811015613ccd576013600b828154811061770f57fe5b60009182526020808320845460018082018755958552919093206016929092029092016002908101805461775795939094019390926000199082161561010002011604617e8c565b506001016176f8565b600081848411156177845760405162461bcd60e51b8152600401610e7291906186af565b505050900390565b600081836177ad5760405162461bcd60e51b8152600401610e7291906186af565b5060008385816177b957fe5b0495945050505050565b80516000906177d457506000611d7d565b6020820151805160001a9060c08210156177f357600092505050611d7d565b5060019392505050565b8051600090811a6080811015617817576000915050611d7d565b60b8811080617832575060c08110801590617832575060f881105b15617841576001915050611d7d565b60c08110156178555760b519019050611d7d565b60f519019050611d7d565b80516000908190811a608081101561787b576001915061793a565b60b881101561789057607e198101915061793a565b60c08110156178e157600060b78203600186019550806020036101000a8651049150600181018201935050808310156178db5760405162461bcd60e51b8152600401610e7290618d98565b5061793a565b60f88110156178f65760be198101915061793a565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156179385760405162461bcd60e51b8152600401610e7290618d98565b505b5092915050565b805160009061795257506000611d7d565b6000809050600061796684602001516177fd565b602085015185519181019250015b808210156179945761798582617860565b82019150826001019250617974565b50909392505050565b80516000906015146179ae57600080fd5b611e2d82616c60565b80516060906179c557600080fd5b60006179d483602001516177fd565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015617a0b576020820181803683370190505b50905060008160200190506166c9848760200151018285617cae565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416617a6b57506018617a8f565b6fffffffffffffffffffffffffffffffff198416617a8b57506010617a8f565b5060005b6020811015617ac557818181518110617aa457fe5b01602001516001600160f81b03191615617abd57617ac5565b600101617a8f565b60008160200390506060816040519080825280601f01601f191660200182016040528015617afa576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015617b3f5750607f60f81b82600081518110617b2d57fe5b01602001516001600160f81b03191611155b15617b4b575080611d7d565b611e2d617b5d8351608060ff16617bdc565b835b6060806040519050835180825260208201818101602087015b81831015617b90578051835260209283019201617b78565b50855184518101855292509050808201602086015b81831015617bbd578051835260209283019201617ba5565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310617c065760405162461bcd60e51b8152600401610e7290618ad2565b60408051600180825281830190925260609160208201818036833701905050905060378411617c605782840160f81b81600081518110617c4257fe5b60200101906001600160f81b031916908160001a9053509050611e2d565b6060617c6b85617a27565b90508381510160370160f81b82600081518110617c8457fe5b60200101906001600160f81b031916908160001a905350617ca58282617b5f565b95945050505050565b80617cb857610e94565b5b60208110617cd8578251825260209283019290910190601f1901617cb9565b915181516020939093036101000a6000190180199091169216919091179052565b60405180608001604052806000815260200160001515815260200160608152602001617d23617f54565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617d6957805160ff1916838001178555617d96565b82800160010185558215617d96579182015b82811115617d96578251825591602001919060010190617d7b565b506134b2929150617f73565b8260138101928215617d965791602002820182811115617d96578251825591602001919060010190617d7b565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b50805460018160011615610100020316600290046000825580601f10617e4e5750611f95565b601f016020900490600052602060002090810190611f959190617f73565b6040518060400160405280617e7f617f3a565b8152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617ec55780548555617d96565b82800160010185558215617d9657600052602060002091601f016020900482015b82811115617d96578254825591600101919060010190617ee6565b8260138101928215617d965791820182811115617d96578254825591600101919060010190617ee6565b50611f95906013810190617f73565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b61269b91905b808211156134b25760008155600101617f79565b8035611e2d81619492565b60008083601f840112617fa9578182fd5b5081356001600160401b03811115617fbf578182fd5b6020830191508360208083028501011115615d0757600080fd5b6000601f8381840112617fea578182fd5b8235617ffd617ff882619447565b619421565b818152925060208084019085810160005b8481101561808f578135880189603f82011261802957600080fd5b838101356001600160401b0381111561804157600080fd5b618052818901601f19168601619421565b81815260408c8184860101111561806857600080fd5b8281850188840137506000918101860191909152855250928201929082019060010161800e565b50505050505092915050565b600082601f8301126180ab578081fd5b81356180b9617ff882619447565b8181529150602080830190848101818402860182018710156180da57600080fd5b6000805b8581101561808f5782356001600160401b03811681146180fc578283fd5b855293830193918301916001016180de565b60008083601f84011261811f578182fd5b5081356001600160401b03811115618135578182fd5b602083019150836020828501011115615d0757600080fd5b60006020828403121561815e578081fd5b81356111c081619492565b60006020828403121561817a578081fd5b81516111c081619492565b6000806000806040858703121561819a578283fd5b84356001600160401b03808211156181b0578485fd5b6181bc88838901617f98565b909650945060208701359150808211156181d4578384fd5b506181e187828801617f98565b95989497509550505050565b600080600060608486031215618201578283fd5b83356001600160401b0380821115618217578485fd5b81860187601f820112618228578586fd5b80359250618238617ff884619447565b80848252602080830192508084018b82838902870101111561825857898afd5b8994505b868510156182825761826e8c82617f8d565b84526001949094019392810192810161825c565b509097508801359350505080821115618299578384fd5b6182a58783880161809b565b935060408601359150808211156182ba578283fd5b506182c786828701617fd9565b9150509250925092565b6000602082840312156182e2578081fd5b815180151581146111c0578182fd5b60008060208385031215618303578182fd5b82356001600160401b03811115618318578283fd5b6183248582860161810e565b90969095509350505050565b60008060008060408587031215618345578384fd5b84356001600160401b038082111561835b578586fd5b6183678883890161810e565b9096509450602087013591508082111561837f578384fd5b506181e18782880161810e565b60006020828403121561839d578081fd5b5035919050565b6000602082840312156183b5578081fd5b5051919050565b600080604083850312156183ce578182fd5b505080516020909101519092909150565b6000806000604084860312156183f3578081fd5b833560ff81168114618403578182fd5b925060208401356001600160401b0381111561841d578182fd5b6184298682870161810e565b9497909650939450505050565b6000815180845260208085019450808401835b8381101561846e5781516001600160a01b031687529582019590820190600101618449565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526184bb816020860160208601619466565b601f01601f19169290920160200192915050565b600082516184e1818460208701619466565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6001600160a01b0392909216825260ff16602082015260400190565b6000602082526111c06020830184618436565b6000604082526185cd6040830185618436565b602083820381850152818551808452828401915082838202850101838801865b8381101561861b57601f198784030185526186098383516184a3565b948601949250908501906001016185ed565b50909998505050505050505050565b60006080825261863d6080830187618436565b828103602084810191909152865180835287820192820190845b8181101561867357845183529383019391830191600101618657565b505084810360408601526186878188618436565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b6000602082526111c060208301846184a3565b6000604082526186d6604083018688618479565b82810360208401526186e9818587618479565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601f908201527f6f6e6c7920736c617368206f72207374616b6548756220636f6e747261637400604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526063908201527f7468652073797374656d52657761726442617365526174696f20706c7573206260408201527f75726e526174696f20616e642073797374656d526577617264416e74694d455660608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252601d908201527f6c656e677468206f66207475726e4c656e677468206d69736d61746368000000604082015260600190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526063908201527f746865206275726e526174696f20706c75732073797374656d5265776172644260408201527f617365526174696f20616e642073797374656d526577617264416e74694d455660608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b6020808252602b908201527f6c656e677468206f662073797374656d526577617264416e74694d455652617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526063908201527f7468652073797374656d526577617264416e74694d4556526174696f20706c7560408201527f73206275726e526174696f20616e642073797374656d5265776172644261736560608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252602f908201527f746865207475726e4c656e6774682073686f756c6420626520696e205b332c3960408201526e5d206f7220657175616c20746f203160881b606082015260800190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526028908201527f6c656e677468206f662073797374656d52657761726442617365526174696f206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206d757374206265207374616b6548756200604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152617ca560608301846184a3565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152617ca5604083018486618479565b6040518181016001600160401b038111828210171561943f57600080fd5b604052919050565b60006001600160401b0382111561945c578081fd5b5060209081020190565b60005b83811015619481578181015183820152602001619469565b83811115613ccd5750506000910152565b6001600160a01b0381168114611f9557600080fdfe70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbbf905ec80f905e8f846942a7cdd959bfe8d9487b2a43b33565295a698f7e294b6a7edd747c0554875d3fc531d19ba1497992c5e941ff80f3f7f110ffd8920a3ac38fdef318fe94a3f86048c27395000f846946488aa4d1955ee33403f8ccb1d4de5fb97c7ade294220f003d8bdfaadf52aa1e55ae4cc485e6794875941a87e90e440a39c99aa9cb5cea0ad6a3f0b2407b86048c27395000f846949ef9f4360c606c7ab4db26b016007d3ad0ab86a0946103af86a874b705854033438383c82575f25bc29418e2db06cbff3e3c5f856410a1838649e760175786048c27395000f84694ee01c3b1283aa067c58eab4709f85e99d46de5fe94ee4b9bfb1871c64e2bcabb1dc382dc8b7c4218a29415904ab26ab0e99d70b51c220ccdcccabee6e29786048c27395000f84694685b1ded8013785d6623cc18d214320b6bb6475994a20ef4e5e4e7e36258dbf51f4d905114cb1b34bc9413e39085dc88704f4394d35209a02b1a9520320c86048c27395000f8469478f3adfc719c99674c072166708589033e2d9afe9448a30d5eaa7b64492a160f139e2da2800ec3834e94055838358c29edf4dcc1ba1985ad58aedbb6be2b86048c27395000f84694c2be4ec20253b8642161bc3f444f53679c1f3d479466f50c616d737e60d7ca6311ff0d9c434197898a94d1d678a2506eeaa365056fe565df8bc8659f28b086048c27395000f846942f7be8361c80a4c1e7e9aaf001d0877f1cfde218945f93992ac37f3e61db2ef8a587a436a161fd210b94ecbc4fb1a97861344dad0867ca3cba2b860411f086048c27395000f84694ce2fd7544e0b2cc94692d4a704debef7bcb613289444abc67b4b2fba283c582387f54c9cba7c34bafa948acc2ab395ded08bb75ce85bf0f95ad2abc51ad586048c27395000f84694b8f7166496996a7da21cf1f1b04d9b3e26a3d077946770572763289aac606e4f327c2f6cc1aa3b3e3b94882d745ed97d4422ca8da1c22ec49d880c4c097286048c27395000f846942d4c407bbe49438ed859fe965b140dcf1aab71a9943ad0939e120f33518fbba04631afe7a3ed6327b194b2bbb170ca4e499a2b0f3cc85ebfa6e8c4dfcbea86048c27395000f846946bbad7cf34b5fa511d8e963dbba288b1960e75d694853b0f6c324d1f4e76c8266942337ac1b0af1a229442498946a51ca5924552ead6fc2af08b94fcba648601d1a94a2000f846944430b3230294d12c6ab2aac5c2cd68e80b16b581947b107f4976a252a6939b771202c28e64e03f52d694795811a7f214084116949fc4f53cedbf189eeab28601d1a94a2000f84694ea0a6e3c511bbd10f4519ece37dc24887e11b55d946811ca77acfb221a49393c193f3a22db829fcc8e9464feb7c04830dd9ace164fc5c52b3f5a29e5018a8601d1a94a2000f846947ae2f5b9e386cd1b50a4550696d957cb4900f03a94e83bcc5077e6b873995c24bac871b5ad856047e19464e48d4057a90b233e026c1041e6012ada897fe88601d1a94a2000f8469482012708dafc9e1b880fd083b32182b869be8e09948e5adc73a2d233a1b496ed3115464dd6c7b887509428b383d324bc9a37f4e276190796ba5a8947f5ed8601d1a94a2000f8469422b81f8e175ffde54d797fe11eb03f9e3bf75f1d94a1c3ef7ca38d8ba80cce3bfc53ebd2903ed21658942767f7447f7b9b70313d4147b795414aecea54718601d1a94a2000f8469468bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d94675cfe570b7902623f47e7f59c9664b5f5065dcf94d84f0d2e50bcf00f2fc476e1c57f5ca2d57f625b8601d1a94a2000f846948c4d90829ce8f72d0163c1d5cf348a862d5506309485c42a7b34309bee2ed6a235f86d16f059deec5894cc2cedc53f0fa6d376336efb67e43d167169f3b78601d1a94a2000f8469435e7a025f4da968de7e4d7e4004197917f4070f194b1182abaeeb3b4d8eba7e6a4162eac7ace23d57394c4fd0d870da52e73de2dd8ded19fe3d26f43a1138601d1a94a2000f84694d6caa02bbebaebb5d7e581e4b66559e635f805ff94c07335cf083c1c46a487f0325769d88e163b653694efaff03b42e41f953a925fc43720e45fb61a19938601d1a94a20000175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a \ No newline at end of file diff --git a/core/systemcontracts/bohr/rialto/StakeHubContract b/core/systemcontracts/bohr/rialto/StakeHubContract new file mode 100644 index 0000000000..d07faefad6 --- /dev/null +++ b/core/systemcontracts/bohr/rialto/StakeHubContract @@ -0,0 +1 @@ +608060405260043610620003ff5760003560e01c80638456cb59116200020f578063cbb04d9d1162000123578063e992aaf511620000ad578063f80a34021162000078578063f80a34021462000c97578063fb50b31f1462000cbc578063fc0c5ff11462000ce1578063ff69ab611462000cf957600080fd5b8063e992aaf51462000c14578063efdbf0e11462000c2c578063f1f74d841462000c68578063f1fad1041462000c8057600080fd5b8063d8ca511f11620000ee578063d8ca511f1462000ba7578063daacdb661462000bbf578063dbda7fb31462000bd7578063e8f67c3b1462000bfc57600080fd5b8063cbb04d9d1462000b03578063d115a2061462000b44578063d6ca429d1462000b5d578063d7c2dfc81462000b8257600080fd5b8063ac43175111620001a5578063bff02e201162000170578063bff02e201462000a90578063c38fbec81462000ac6578063c473318f1462000aeb578063c8509d8114620008e457600080fd5b8063ac4317511462000a0e578063b187bd261462000a33578063baa7199e1462000a53578063bdceadf31462000a7857600080fd5b80638cd22b2211620001e65780638cd22b221462000979578063982ef0a7146200099e578063a43569b314620009b5578063aad3ec9614620009e957600080fd5b80638456cb59146200090957806386d5450614620009215780638a4d3fa8146200095b57600080fd5b806349f41a42116200031357806364028fbd116200029d57806375cc7d89116200026857806375cc7d89146200088f57806376e7d6d614620008b45780638129fc1c14620008cc578063831d65d114620008e457600080fd5b806364028fbd14620007ca578063663706d314620007e15780636ec01b2714620008125780636f8e2fa4146200086a57600080fd5b80634e6fd6c411620002de5780634e6fd6c414620007315780635949187114620007495780635e7cc1c9146200076e57806363a036b5146200079357600080fd5b806349f41a4214620006985780634a49ac4c14620006bd5780634bf6c88214620006e25780634d99dd16146200070c57600080fd5b80631fa8882b1162000395578063417c73a71162000360578063417c73a714620005e4578063449ecfe6146200060957806345211bfd146200062e5780634838d165146200065357600080fd5b80631fa8882b14620005555780632b727c86146200056d5780632e8e8c7114620005925780633840998814620005cc57600080fd5b8063092193ab11620003d6578063092193ab14620004a05780630e9fbf5114620004b75780631182b87514620004dc57806317b4f353146200051057600080fd5b8063046f7da2146200041f578063059ddd2214620004375780630661806e146200047957600080fd5b366200041a5760345460ff166001146200041857600080fd5b005b600080fd5b3480156200042c57600080fd5b506200041862000d11565b3480156200044457600080fd5b506200045c6200045636600462009910565b62000da3565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200048657600080fd5b506200049160365481565b60405190815260200162000470565b62000418620004b136600462009910565b620011cb565b348015620004c457600080fd5b5062000418620004d636600462009974565b6200181c565b348015620004e957600080fd5b5062000501620004fb366004620099b9565b62001b46565b60405162000470919062009a6c565b3480156200051d57600080fd5b506200045c6200052f36600462009b62565b80516020818301810180516045825292820191909301209152546001600160a01b031681565b3480156200056257600080fd5b506200049161025881565b3480156200057a57600080fd5b506200045c6200058c36600462009910565b62001eb9565b3480156200059f57600080fd5b506200045c620005b136600462009910565b604d602052600090815260409020546001600160a01b031681565b348015620005d957600080fd5b506200049160375481565b348015620005f157600080fd5b50620004186200060336600462009910565b62001f0e565b3480156200061657600080fd5b50620004186200062836600462009910565b62001f90565b3480156200063b57600080fd5b50620004186200064d36600462009910565b62002175565b3480156200066057600080fd5b50620006876200067236600462009910565b60016020526000908152604090205460ff1681565b604051901515815260200162000470565b348015620006a557600080fd5b5062000418620006b736600462009910565b62002373565b348015620006ca57600080fd5b5062000418620006dc36600462009910565b6200258f565b348015620006ef57600080fd5b50620006f9600881565b60405160ff909116815260200162000470565b3480156200071957600080fd5b50620004186200072b36600462009bb7565b6200260b565b3480156200073e57600080fd5b506200045c61dead81565b3480156200075657600080fd5b50620004186200076836600462009bf5565b62002c3b565b3480156200077b57600080fd5b50620004186200078d36600462009c65565b62003a34565b348015620007a057600080fd5b50620007b8620007b236600462009c85565b62003c5d565b60405162000470949392919062009cee565b62000418620007db36600462009daa565b62004302565b348015620007ee57600080fd5b50620004916200080036600462009910565b60446020526000908152604090205481565b3480156200081f57600080fd5b50620008376200083136600462009910565b62004986565b6040805182516001600160401b039081168252602080850151821690830152928201519092169082015260600162000470565b3480156200087757600080fd5b50620005016200088936600462009910565b62004a2b565b3480156200089c57600080fd5b5062000418620008ae36600462009910565b62004e57565b348015620008c157600080fd5b5062000491603d5481565b348015620008d957600080fd5b506200041862005029565b348015620008f157600080fd5b506200041862000903366004620099b9565b6200533b565b3480156200091657600080fd5b5062000418620053a5565b3480156200092e57600080fd5b506200045c6200094036600462009910565b6043602052600090815260409020546001600160a01b031681565b3480156200096857600080fd5b5062000491670de0b6b3a764000081565b3480156200098657600080fd5b50620004916200099836600462009bb7565b6200543d565b62000418620009af36600462009e82565b620054f6565b348015620009c257600080fd5b50620009da620009d436600462009910565b62005b93565b60405162000470919062009ec0565b348015620009f657600080fd5b506200041862000a0836600462009bb7565b62005e80565b34801562000a1b57600080fd5b506200041862000a2d36600462009f3d565b62005eed565b34801562000a4057600080fd5b5060005462010000900460ff1662000687565b34801562000a6057600080fd5b506200041862000a7236600462009ff6565b62006d8c565b34801562000a8557600080fd5b5062000491603c5481565b34801562000a9d57600080fd5b5062000ab562000aaf36600462009c85565b62006f59565b60405162000470939291906200a052565b34801562000ad357600080fd5b506200041862000ae536600462009910565b62007135565b34801562000af857600080fd5b506200049160385481565b34801562000b1057600080fd5b5062000b2862000b2236600462009910565b620073f5565b6040805193845291151560208401529082015260600162000470565b34801562000b5157600080fd5b5062000491620186a081565b34801562000b6a57600080fd5b506200041862000b7c3660046200a0af565b62007838565b34801562000b8f57600080fd5b506200041862000ba13660046200a198565b62007a5d565b34801562000bb457600080fd5b5062000491603b5481565b34801562000bcc57600080fd5b506200049160495481565b34801562000be457600080fd5b506200045c62000bf636600462009910565b62007b53565b34801562000c0957600080fd5b506200049160355481565b34801562000c2157600080fd5b5062000491603a5481565b34801562000c3957600080fd5b506200049162000c4b36600462009b62565b805160208183018101805160468252928201919093012091525481565b34801562000c7557600080fd5b5062000491603e5481565b34801562000c8d57600080fd5b50620006f9601181565b34801562000ca457600080fd5b506200049162000cb636600462009bb7565b62007f7d565b34801562000cc957600080fd5b506200041862000cdb36600462009f3d565b62007fee565b34801562000cee57600080fd5b506200049160395481565b34801562000d0657600080fd5b5062000491604a5481565b600054630100000090046001600160a01b0316331462000d44576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff1662000d6e57604051636cd6020160e01b815260040160405180910390fd5b6000805462ff0000191681556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f99190a1565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162000e0e906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462000e3c906200a1fe565b801562000e8d5780601f1062000e615761010080835404028352916020019162000e8d565b820191906000526020600020905b81548152906001019060200180831162000e6f57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462000eb8906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462000ee6906200a1fe565b801562000f375780601f1062000f0b5761010080835404028352916020019162000f37565b820191906000526020600020905b81548152906001019060200180831162000f1957829003601f168201915b5050505050815260200160018201805462000f52906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462000f80906200a1fe565b801562000fd15780601f1062000fa55761010080835404028352916020019162000fd1565b820191906000526020600020905b81548152906001019060200180831162000fb357829003601f168201915b5050505050815260200160028201805462000fec906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200101a906200a1fe565b80156200106b5780601f106200103f576101008083540402835291602001916200106b565b820191906000526020600020905b8154815290600101906020018083116200104d57829003601f168201915b5050505050815260200160038201805462001086906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620010b4906200a1fe565b8015620011055780601f10620010d95761010080835404028352916020019162001105565b820191906000526020600020905b815481529060010190602001808311620010e757829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620011a4575050509190925250509051949350505050565b3361100014620011f757604051630f22c43960e41b815261100060048201526024015b60405180910390fd5b6001600160a01b0380821660009081526043602090815260408083205484168084526041835281842082516101808101845281548716815260018201548716948101949094526002810154909516918301919091526003840154606083015260048401805491949160808401919062001270906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200129e906200a1fe565b8015620012ef5780601f10620012c357610100808354040283529160200191620012ef565b820191906000526020600020905b815481529060010190602001808311620012d157829003601f168201915b50505050508152602001600582016040518060800160405290816000820180546200131a906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462001348906200a1fe565b8015620013995780601f106200136d5761010080835404028352916020019162001399565b820191906000526020600020905b8154815290600101906020018083116200137b57829003601f168201915b50505050508152602001600182018054620013b4906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620013e2906200a1fe565b8015620014335780601f10620014075761010080835404028352916020019162001433565b820191906000526020600020905b8154815290600101906020018083116200141557829003601f168201915b505050505081526020016002820180546200144e906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200147c906200a1fe565b8015620014cd5780601f10620014a157610100808354040283529160200191620014cd565b820191906000526020600020905b815481529060010190602001808311620014af57829003601f168201915b50505050508152602001600382018054620014e8906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462001516906200a1fe565b8015620015675780601f106200153b5761010080835404028352916020019162001567565b820191906000526020600020905b8154815290600101906020018083116200154957829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162001606575050509190925250505060408101519091506001600160a01b031615806200164357508060e001515b156200170057604051611002903490600081818185875af1925050503d80600081146200168d576040519150601f19603f3d011682016040523d82523d6000602084013e62001692565b606091505b505050816001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d604051620016f39060208082526011908201527024a72b20a624a22fab20a624a220aa27a960791b604082015260600190565b60405180910390a2505050565b60408181015160c0830151519151632f303ebb60e11b81526001600160401b0390921660048301526001600160a01b031690635e607d769034906024016000604051808303818588803b1580156200175757600080fd5b505af11580156200176c573d6000803e3d6000fd5b5050505050816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea634604051620017ad91815260200190565b60405180910390a26040808201519051633041949b60e01b815261200591633041949b91620017e2919086906004016200a234565b600060405180830381600087803b158015620017fd57600080fd5b505af115801562001812573d6000803e3d6000fd5b5050505050505b50565b33611001146200184457604051630f22c43960e41b81526110016004820152602401620011ee565b60005462010000900460ff16156200186f57604051631785c68160e01b815260040160405180910390fd5b600060458383604051620018859291906200a24e565b908152604051908190036020019020546001600160a01b03169050620018ad603f8262008257565b620018cb5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038116600090815260416020526040812090620018f2610258426200a274565b604a546000828152604b602052604090205491925011620019265760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b60205260408120805460019290620019479084906200a297565b90915550506040516046906200196190879087906200a24e565b908152602001604051809103902054600014158015620019b157504261025860468787604051620019949291906200a24e565b908152602001604051809103902054620019af91906200a297565b105b15620019d057604051631898eb6b60e01b815260040160405180910390fd5b600080620019e08560026200827a565b915091508162001a0357604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562001a56573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7c91906200a2ad565b905062001a8a858362008304565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28383600260405162001aca939291906200a2dd565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162001b08916001600160a01b0316908a906004016200a234565b600060405180830381600087803b15801562001b2357600080fd5b505af115801562001b38573d6000803e3d6000fd5b505050505050505050505050565b6060336120001462001b7057604051630f22c43960e41b81526120006004820152602401620011ee565b60005462010000900460ff161562001b9b57604051631785c68160e01b815260040160405180910390fd5b6034805460ff19166001179055604080516020601f8501819004810282018101909252838152600091829162001bec918790879081908401838280828437600092019190915250620084cb92505050565b915091508062001c0f5760405163035ede3560e21b815260040160405180910390fd5b816060015160000362001c35575050604080516000815260208101909152905062001ea8565b606082015160405163e04c83a760e01b81526000916110049163e04c83a79162001c659160040190815260200190565b6020604051808303816000875af115801562001c85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cab91906200a30c565b90508062001d525782602001516001600160a01b031683600001516001600160a01b03167fa9084c89a291b43bc984e045671d394974730a159b9a826b577bb148ab504c3a8560600151600160405162001d079291906200a32c565b60405180910390a385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965062001ea895505050505050565b600062001d5f846200862e565b9050600081600481111562001d785762001d786200a2c7565b0362001d9a575050604080516000815260208101909152925062001ea8915050565b6040516000906110049047908381818185875af1925050503d806000811462001de0576040519150601f19603f3d011682016040523d82523d6000602084013e62001de5565b606091505b505090508062001e08576040516312171d8360e31b815260040160405180910390fd5b84602001516001600160a01b031685600001516001600160a01b03167fa9084c89a291b43bc984e045671d394974730a159b9a826b577bb148ab504c3a87606001518560405162001e5b9291906200a32c565b60405180910390a387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092985062001ea8975050505050505050565b6034805460ff191690559392505050565b60008162001ec9603f8262008257565b62001ee75760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038084166000908152604160205260409020600d01541691505b50919050565b600054630100000090046001600160a01b0316331462001f41576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a250565b60005462010000900460ff161562001fbb57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562001fed5760405163b1d02c3d60e01b815260040160405180910390fd5b8062001ffb603f8262008257565b620020195760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166000908152604160205260409020600a81015460ff166200205757604051634b6b857d60e01b815260040160405180910390fd5b6036546002820154604051630913db4760e01b81526001600160a01b03868116600483015290911690630913db4790602401602060405180830381865afa158015620020a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020cd91906200a2ad565b1015620020ed576040516317b204bf60e11b815260040160405180910390fd5b4281600b01541115620021135760405163170cb76760e21b815260040160405180910390fd5b600a8101805460ff191690556049805460019190600090620021379084906200a353565b90915550506040516001600160a01b038416907f9390b453426557da5ebdc31f19a37753ca04addf656d32f35232211bb2af3f1990600090a2505050565b60005462010000900460ff1615620021a057604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620021d25760405163b1d02c3d60e01b815260040160405180910390fd5b620021dc62008c97565b620021e9603f8262008257565b620022075760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0382166200222f57604051636520611b60e11b815260040160405180910390fd5b6001600160a01b03828116600090815260436020526040902054161515806200227057506001600160a01b03821660009081526047602052604090205460ff165b156200228f57604051631e6f587560e11b815260040160405180910390fd5b60006200229b62008c97565b6001600160a01b0381166000908152604160205260409020600c810154919250904290620022cd90610258906200a297565b1115620022ed57604051631f92cdbd60e11b815260040160405180910390fd5b80546001600160a01b039081166000908152604460209081526040808320429081905585548986166001600160a01b031991821681178855600c88019290925581855260439093528184208054958816959093168517909255519092917f6e4e747ca35203f16401c69805c7dd52fff67ef60b0ebc5c7fe16890530f223591a350505050565b3362002381603f8262008257565b6200239f5760405163056e881160e01b815260040160405180910390fd5b60005462010000900460ff1615620023ca57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620023fc5760405163b1d02c3d60e01b815260040160405180910390fd5b6001600160a01b038281166000908152604d60205260409020541615620024365760405163bebdc75760e01b815260040160405180910390fd5b62002443603f8362008257565b15620024625760405163bebdc75760e01b815260040160405180910390fd5b336000818152604160205260409020600d01546001600160a01b039081169084168103620024a35760405163bebdc75760e01b815260040160405180910390fd5b6001600160a01b03811615620024da576001600160a01b0381166000908152604d6020526040902080546001600160a01b03191690555b6001600160a01b038281166000908152604160205260409020600d0180546001600160a01b0319169186169182179055156200253f576001600160a01b038481166000908152604d6020526040902080546001600160a01b0319169184169190911790555b836001600160a01b0316816001600160a01b0316836001600160a01b03167fcbb728765de145e99c00e8ae32a325231e850359b7b8a6da3b84d672ab3f1d0a60405160405180910390a450505050565b600054630100000090046001600160a01b03163314620025c2576040516306fbb1e360e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe0db3499b7fdc3da4cddff5f45d694549c19835e7f719fb5606d3ad1a5de40119190a250565b60005462010000900460ff16156200263657604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620026685760405163b1d02c3d60e01b815260040160405180910390fd5b8162002676603f8262008257565b620026945760405163056e881160e01b815260040160405180910390fd5b81600003620026b657604051639811e0c760e01b815260040160405180910390fd5b6001600160a01b03808416600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805433949160808401916200271e906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200274c906200a1fe565b80156200279d5780601f1062002771576101008083540402835291602001916200279d565b820191906000526020600020905b8154815290600101906020018083116200277f57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620027c8906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620027f6906200a1fe565b8015620028475780601f106200281b5761010080835404028352916020019162002847565b820191906000526020600020905b8154815290600101906020018083116200282957829003601f168201915b5050505050815260200160018201805462002862906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462002890906200a1fe565b8015620028e15780601f10620028b557610100808354040283529160200191620028e1565b820191906000526020600020905b815481529060010190602001808311620028c357829003601f168201915b50505050508152602001600282018054620028fc906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200292a906200a1fe565b80156200297b5780601f106200294f576101008083540402835291602001916200297b565b820191906000526020600020905b8154815290600101906020018083116200295d57829003601f168201915b5050505050815260200160038201805462002996906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620029c4906200a1fe565b801562002a155780601f10620029e95761010080835404028352916020019162002a15565b820191906000526020600020905b815481529060010190602001808311620029f757829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162002ab4575050509190925250505060408082015190516326ccee8b60e11b81526001600160a01b0385811660048301526024820188905292935060009290911690634d99dd16906044016020604051808303816000875af115801562002b2e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b5491906200a2ad565b9050826001600160a01b0316866001600160a01b03167f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b40829802878460405162002ba5929190918252602082015260400190565b60405180910390a3856001600160a01b0316836001600160a01b03160362002bd25762002bd28662008cd8565b6040808301519051633041949b60e01b815261200591633041949b9162002bff919087906004016200a234565b600060405180830381600087803b15801562002c1a57600080fd5b505af115801562002c2f573d6000803e3d6000fd5b50505050505050505050565b60005462010000900460ff161562002c6657604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562002c985760405163b1d02c3d60e01b815260040160405180910390fd5b8362002ca6603f8262008257565b62002cc45760405163056e881160e01b815260040160405180910390fd5b8362002cd2603f8262008257565b62002cf05760405163056e881160e01b815260040160405180910390fd5b6034805460ff19166001179055600084900362002d2057604051639811e0c760e01b815260040160405180910390fd5b846001600160a01b0316866001600160a01b03160362002d535760405163f0e3e62960e01b815260040160405180910390fd5b6001600160a01b038087166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054339491608084019162002dbb906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462002de9906200a1fe565b801562002e3a5780601f1062002e0e5761010080835404028352916020019162002e3a565b820191906000526020600020905b81548152906001019060200180831162002e1c57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462002e65906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462002e93906200a1fe565b801562002ee45780601f1062002eb85761010080835404028352916020019162002ee4565b820191906000526020600020905b81548152906001019060200180831162002ec657829003601f168201915b5050505050815260200160018201805462002eff906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462002f2d906200a1fe565b801562002f7e5780601f1062002f525761010080835404028352916020019162002f7e565b820191906000526020600020905b81548152906001019060200180831162002f6057829003601f168201915b5050505050815260200160028201805462002f99906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462002fc7906200a1fe565b8015620030185780601f1062002fec5761010080835404028352916020019162003018565b820191906000526020600020905b81548152906001019060200180831162002ffa57829003601f168201915b5050505050815260200160038201805462003033906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462003061906200a1fe565b8015620030b25780601f106200308657610100808354040283529160200191620030b2565b820191906000526020600020905b8154815290600101906020018083116200309457829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b8154815260200190600101908083116200315157505050919092525050506001600160a01b03808916600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805494955091939092916080840191620031dc906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200320a906200a1fe565b80156200325b5780601f106200322f576101008083540402835291602001916200325b565b820191906000526020600020905b8154815290600101906020018083116200323d57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462003286906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620032b4906200a1fe565b8015620033055780601f10620032d95761010080835404028352916020019162003305565b820191906000526020600020905b815481529060010190602001808311620032e757829003601f168201915b5050505050815260200160018201805462003320906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200334e906200a1fe565b80156200339f5780601f1062003373576101008083540402835291602001916200339f565b820191906000526020600020905b8154815290600101906020018083116200338157829003601f168201915b50505050508152602001600282018054620033ba906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620033e8906200a1fe565b8015620034395780601f106200340d5761010080835404028352916020019162003439565b820191906000526020600020905b8154815290600101906020018083116200341b57829003601f168201915b5050505050815260200160038201805462003454906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462003482906200a1fe565b8015620034d35780601f10620034a757610100808354040283529160200191620034d3565b820191906000526020600020905b815481529060010190602001808311620034b557829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620035725750505050508152505090508060e001518015620035b55750876001600160a01b0316836001600160a01b031614155b15620035d457604051636468920360e01b815260040160405180910390fd5b60408083015190516352e82ce560e11b81526001600160a01b038581166004830152602482018a9052600092169063a5d059ca906044016020604051808303816000875af11580156200362b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200365191906200a2ad565b9050603754811015620036775760405163dc6f0bdd60e01b815260040160405180910390fd5b896001600160a01b0316846001600160a01b03161480156200370c57506036546040808501519051630913db4760e01b81526001600160a01b038d8116600483015290911690630913db4790602401602060405180830381865afa158015620036e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200370a91906200a2ad565b105b156200372b576040516317b204bf60e11b815260040160405180910390fd5b6000620186a0603a54836200374191906200a369565b6200374d91906200a274565b9050600083604001516001600160a01b03168260405160006040518083038185875af1925050503d8060008114620037a2576040519150601f19603f3d011682016040523d82523d6000602084013e620037a7565b606091505b5050905080620037ca576040516312171d8360e31b815260040160405180910390fd5b620037d682846200a353565b60408086015190516317066a5760e21b81526001600160a01b03898116600483015292955060009290911690635c19a95c90869060240160206040518083038185885af11580156200382c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200385391906200a2ad565b9050866001600160a01b03168c6001600160a01b03168e6001600160a01b03167ffdac6e81913996d95abcc289e90f2d8bd235487ce6fe6f821e7d21002a1915b48e8589604051620038b8939291909283526020830191909152604082015260600190565b60405180910390a4604080516002808252606082018352600092602083019080368337019050509050866040015181600081518110620038fc57620038fc6200a383565b60200260200101906001600160a01b031690816001600160a01b0316815250508560400151816001815181106200393757620039376200a383565b6001600160a01b0390921660209283029190910190910152604051634484077560e01b815261200590634484077590620039789084908c906004016200a399565b600060405180830381600087803b1580156200399357600080fd5b505af1158015620039a8573d6000803e3d6000fd5b505050508a1562003a1a576120056001600160a01b031663e5ed5b1e898f6040518363ffffffff1660e01b8152600401620039e59291906200a234565b600060405180830381600087803b15801562003a0057600080fd5b505af115801562003a15573d6000803e3d6000fd5b505050505b50506034805460ff19169055505050505050505050505050565b60005462010000900460ff161562003a5f57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562003a915760405163b1d02c3d60e01b815260040160405180910390fd5b62003a9b62008c97565b62003aa8603f8262008257565b62003ac65760405163056e881160e01b815260040160405180910390fd5b600062003ad262008c97565b6001600160a01b0381166000908152604160205260409020600c81015491925090429062003b0490610258906200a297565b111562003b2457604051631f92cdbd60e11b815260040160405180910390fd5b60098101546001600160401b03600160401b9091048116908516111562003b5e5760405163dc81db8560e01b815260040160405180910390fd5b60098101546000906001600160401b03908116908616101562003b9c57600982015462003b969086906001600160401b03166200a3c5565b62003bb6565b600982015462003bb6906001600160401b0316866200a3c5565b60098301546001600160401b039182169250600160801b90041681111562003bf15760405163dc81db8560e01b815260040160405180910390fd5b60098201805467ffffffffffffffff19166001600160401b03871690811790915542600c8401556040519081526001600160a01b038416907f78cdd96edf59e09cfd4d26ef6ef6c92d166effe6a40970c54821206d541932cb9060200160405180910390a25050505050565b6060806060600062003c70603f62008dfe565b905080861015620042f957841562003c89578462003c8b565b805b945060008562003c9c88846200a353565b1162003cb45762003cae87836200a353565b62003cb6565b855b9050806001600160401b0381111562003cd35762003cd362009a81565b60405190808252806020026020018201604052801562003cfd578160200160208202803683370190505b509450806001600160401b0381111562003d1b5762003d1b62009a81565b60405190808252806020026020018201604052801562003d45578160200160208202803683370190505b509350806001600160401b0381111562003d635762003d6362009a81565b60405190808252806020026020018201604052801562003d9857816020015b606081526020019060019003908162003d825790505b50925060005b81811015620042f657600062003dc262003db9838b6200a297565b603f9062008e09565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608201526004830180549495509193909291608084019162003e2f906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462003e5d906200a1fe565b801562003eae5780601f1062003e825761010080835404028352916020019162003eae565b820191906000526020600020905b81548152906001019060200180831162003e9057829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462003ed9906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462003f07906200a1fe565b801562003f585780601f1062003f2c5761010080835404028352916020019162003f58565b820191906000526020600020905b81548152906001019060200180831162003f3a57829003601f168201915b5050505050815260200160018201805462003f73906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462003fa1906200a1fe565b801562003ff25780601f1062003fc65761010080835404028352916020019162003ff2565b820191906000526020600020905b81548152906001019060200180831162003fd457829003601f168201915b505050505081526020016002820180546200400d906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200403b906200a1fe565b80156200408c5780601f1062004060576101008083540402835291602001916200408c565b820191906000526020600020905b8154815290600101906020018083116200406e57829003601f168201915b50505050508152602001600382018054620040a7906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620040d5906200a1fe565b8015620041265780601f10620040fa5761010080835404028352916020019162004126565b820191906000526020600020905b8154815290600101906020018083116200410857829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620041c55750505050508152505090508060000151888481518110620041fe57620041fe6200a383565b60200260200101906001600160a01b031690816001600160a01b0316815250508060e00151620042975780604001516001600160a01b03166315d1f8986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200426b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200429191906200a2ad565b6200429a565b60005b878481518110620042af57620042af6200a383565b6020026020010181815250508060800151868481518110620042d557620042d56200a383565b6020026020010181905250505080620042ee906200a3e8565b905062003d9e565b50505b92959194509250565b60005462010000900460ff16156200432d57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200435f5760405163b1d02c3d60e01b815260040160405180910390fd5b336200436d603f8262008257565b156200438c57604051635f28f62b60e01b815260040160405180910390fd5b6001600160a01b038181166000908152604d60205260409020541615620043c657604051631a0a9b9f60e21b815260040160405180910390fd5b6001600160a01b03888116600090815260436020526040902054161515806200440757506001600160a01b03881660009081526047602052604090205460ff165b156200442657604051631e6f587560e11b815260040160405180910390fd5b60006001600160a01b031660458888604051620044459291906200a24e565b908152604051908190036020019020546001600160a01b03161415806200448f5750604887876040516200447b9291906200a24e565b9081526040519081900360200190205460ff165b15620044ae576040516311fdb94760e01b815260040160405180910390fd5b6000620044bc83806200a404565b604051602001620044cf9291906200a24e565b60408051601f1981840301815291815281516020928301206000818152604290935291205490915060ff1615620045195760405163c0bf414360e01b815260040160405180910390fd5b60006200452f670de0b6b3a7640000346200a353565b905060365481101562004555576040516317b204bf60e11b815260040160405180910390fd5b6001600160a01b038a166200457d57604051636520611b60e11b815260040160405180910390fd5b61138862004592604087016020880162009c65565b6001600160401b03161180620045d85750620045b5604086016020870162009c65565b6001600160401b0316620045cd602087018762009c65565b6001600160401b0316115b80620046175750620045f1604086016020870162009c65565b6001600160401b03166200460c606087016040880162009c65565b6001600160401b0316115b15620046365760405163dc81db8560e01b815260040160405180910390fd5b620046816200464685806200a404565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062008e1792505050565b6200469f57604051635dba5ad760e01b815260040160405180910390fd5b620046ae838a8a8a8a62008fb9565b620046cc57604051631647e3cb60e11b815260040160405180910390fd5b60006200471a84620046df87806200a404565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620090e992505050565b905062004729603f85620091ea565b506000838152604260209081526040808320805460ff191660019081179091556001600160a01b0380891680865260419094529190932080548f83166001600160a01b031991821617825593810180548516909317909255600282018054918516919093161790915542600382015560048101620047a98b8d836200a4ac565b508560058201620047bb82826200a574565b5087905060098201620047cf82826200a6ad565b505042600c8201556001600160a01b038c81166000908152604360205260409081902080546001600160a01b031916928816929092179091555185906045906200481d908e908e906200a24e565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316856001600160a01b03168d6001600160a01b03167faecd9fb95e79c75a3a1de93362c6be5fe6ab65770d8614be583884161cd8228d8e8e604051620048a09291906200a77d565b60405180910390a460408051848152602081018590526001600160a01b0387169182916000805160206200ba84833981519152910160405180910390a360408051670de0b6b3a7640000808252602082015261dead916001600160a01b038816916000805160206200ba84833981519152910160405180910390a3604051633041949b60e01b815261200590633041949b906200494490859089906004016200a234565b600060405180830381600087803b1580156200495f57600080fd5b505af115801562004974573d6000803e3d6000fd5b50505050505050505050505050505050565b604080516060810182526000808252602082018190529181019190915281620049b1603f8262008257565b620049cf5760405163056e881160e01b815260040160405180910390fd5b50506001600160a01b031660009081526041602090815260409182902082516060810184526009909101546001600160401b038082168352600160401b8204811693830193909352600160801b90049091169181019190915290565b6001600160a01b0380821660009081526041602090815260408083208151610180810183528154861681526001820154861693810193909352600281015490941690820152600383015460608281019190915260048401805491949160808401919062004a98906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462004ac6906200a1fe565b801562004b175780601f1062004aeb5761010080835404028352916020019162004b17565b820191906000526020600020905b81548152906001019060200180831162004af957829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462004b42906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462004b70906200a1fe565b801562004bc15780601f1062004b955761010080835404028352916020019162004bc1565b820191906000526020600020905b81548152906001019060200180831162004ba357829003601f168201915b5050505050815260200160018201805462004bdc906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462004c0a906200a1fe565b801562004c5b5780601f1062004c2f5761010080835404028352916020019162004c5b565b820191906000526020600020905b81548152906001019060200180831162004c3d57829003601f168201915b5050505050815260200160028201805462004c76906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462004ca4906200a1fe565b801562004cf55780601f1062004cc95761010080835404028352916020019162004cf5565b820191906000526020600020905b81548152906001019060200180831162004cd757829003601f168201915b5050505050815260200160038201805462004d10906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462004d3e906200a1fe565b801562004d8f5780601f1062004d635761010080835404028352916020019162004d8f565b820191906000526020600020905b81548152906001019060200180831162004d7157829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162004e2e5750505091909252505050608001519392505050565b336110011462004e7f57604051630f22c43960e41b81526110016004820152602401620011ee565b6001600160a01b038082166000908152604360205260409020541662004ea7603f8262008257565b62004ec55760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038181166000908152604160205260408082206002810154603b54925163045bc4d160e41b81526004810193909352909316906345bc4d10906024016020604051808303816000875af115801562004f28573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f4e91906200a2ad565b90506000603d544262004f6291906200a297565b905062004f70838262008304565b836001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb28284600160405162004fb0939291906200a2dd565b60405180910390a26002830154604051633041949b60e01b815261200591633041949b9162004fee916001600160a01b03169088906004016200a234565b600060405180830381600087803b1580156200500957600080fd5b505af11580156200501e573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156200504a5750600054600160ff909116105b80620050665750303b15801562005066575060005460ff166001145b620050cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620011ee565b6000805460ff191660011790558015620050ef576000805461ff0019166101001790555b334114620051105760405163022d8c9560e31b815260040160405180910390fd5b3a1562005130576040516383f1b1d360e01b815260040160405180910390fd5b611388603555686c6b935b8bbd400000603655670de0b6b3a7640000603755602d603855607860398190556002603a819055678ac7230489e80000603b55680ad78ebc5ac6200000603c55603d9190915560b4603e55604a556040805160c0810190915260a080825260609182916200baa46020830139806020019051810190620051bc91906200a7b9565b9150604051806101e001604052806101c081526020016200bb446101c09139806020019051810190620051f091906200a85d565b905060005b82518110156200525f576001604760008584815181106200521a576200521a6200a383565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905562005257816200a3e8565b9050620051f5565b5060005b8151811015620052d057600160488383815181106200528657620052866200a383565b60200260200101516040516200529d91906200a95a565b908152604051908190036020019020805491151560ff19909216919091179055620052c8816200a3e8565b905062005263565b50620052f07304d63abcd2b9b1baa327f2dda0f873f197ccd18662009201565b5050801562001819576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b33612000146200536357604051630f22c43960e41b81526120006004820152602401620011ee565b7faa5ba621c8b3d7d05bb9e51a7506108251d4d5dbe542ca66fc7bb52aacb02b6583838360405162005398939291906200a978565b60405180910390a1505050565b600054630100000090046001600160a01b03163314620053d8576040516306fbb1e360e01b815260040160405180910390fd5b60005462010000900460ff16156200540357604051631785c68160e01b815260040160405180910390fd5b6000805462ff00001916620100001781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b60006200544c603f8462008257565b6200546a5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383811660009081526041602052604090819020600201549051636bbf224960e01b815260048101859052911690636bbf2249906024015b602060405180830381865afa158015620054c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054ed91906200a2ad565b90505b92915050565b60005462010000900460ff16156200552157604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620055535760405163b1d02c3d60e01b815260040160405180910390fd5b8162005561603f8262008257565b6200557f5760405163056e881160e01b815260040160405180910390fd5b6037543490811015620055a55760405163dc6f0bdd60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805433949160808401916200560d906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200563b906200a1fe565b80156200568c5780601f1062005660576101008083540402835291602001916200568c565b820191906000526020600020905b8154815290600101906020018083116200566e57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620056b7906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620056e5906200a1fe565b8015620057365780601f106200570a5761010080835404028352916020019162005736565b820191906000526020600020905b8154815290600101906020018083116200571857829003601f168201915b5050505050815260200160018201805462005751906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200577f906200a1fe565b8015620057d05780601f10620057a457610100808354040283529160200191620057d0565b820191906000526020600020905b815481529060010190602001808311620057b257829003601f168201915b50505050508152602001600282018054620057eb906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462005819906200a1fe565b80156200586a5780601f106200583e576101008083540402835291602001916200586a565b820191906000526020600020905b8154815290600101906020018083116200584c57829003601f168201915b5050505050815260200160038201805462005885906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620058b3906200a1fe565b8015620059045780601f10620058d85761010080835404028352916020019162005904565b820191906000526020600020905b815481529060010190602001808311620058e657829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620059a35750505050508152505090508060e001518015620059e65750856001600160a01b0316826001600160a01b031614155b1562005a0557604051636468920360e01b815260040160405180910390fd5b60408082015190516317066a5760e21b81526001600160a01b0384811660048301526000921690635c19a95c90869060240160206040518083038185885af115801562005a56573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062005a7d91906200a2ad565b9050826001600160a01b0316876001600160a01b03166000805160206200ba84833981519152838760405162005abd929190918252602082015260400190565b60405180910390a36040808301519051633041949b60e01b815261200591633041949b9162005af2919087906004016200a234565b600060405180830381600087803b15801562005b0d57600080fd5b505af115801562005b22573d6000803e3d6000fd5b50505050851562001812576040516372f6ad8f60e11b81526120059063e5ed5b1e9062005b569086908b906004016200a234565b600060405180830381600087803b15801562005b7157600080fd5b505af115801562005b86573d6000803e3d6000fd5b5050505050505050505050565b62005bbf6040518060800160405280606081526020016060815260200160608152602001606081525090565b8162005bcd603f8262008257565b62005beb5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b0383166000908152604160205260409081902081516080810190925260050180548290829062005c22906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462005c50906200a1fe565b801562005ca15780601f1062005c755761010080835404028352916020019162005ca1565b820191906000526020600020905b81548152906001019060200180831162005c8357829003601f168201915b5050505050815260200160018201805462005cbc906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462005cea906200a1fe565b801562005d3b5780601f1062005d0f5761010080835404028352916020019162005d3b565b820191906000526020600020905b81548152906001019060200180831162005d1d57829003601f168201915b5050505050815260200160028201805462005d56906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462005d84906200a1fe565b801562005dd55780601f1062005da95761010080835404028352916020019162005dd5565b820191906000526020600020905b81548152906001019060200180831162005db757829003601f168201915b5050505050815260200160038201805462005df0906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462005e1e906200a1fe565b801562005e6f5780601f1062005e435761010080835404028352916020019162005e6f565b820191906000526020600020905b81548152906001019060200180831162005e5157829003601f168201915b505050505081525050915050919050565b60005462010000900460ff161562005eab57604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562005edd5760405163b1d02c3d60e01b815260040160405180910390fd5b62005ee982826200929a565b5050565b336110071462005f1557604051630f22c43960e41b81526110076004820152602401620011ee565b62005f826040518060400160405280601081526020016f1d1c985b9cd9995c91d85cd31a5b5a5d60821b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b156200603d576020811462005fb45783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162005ff7918585808385018382808284376000920191909152509293925050620094039050565b90506108fc8110806200600b575061271081115b15620060345784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b60355562006d47565b620060ae6040518060400160405280601481526020017336b4b729b2b6332232b632b3b0ba34b7b721272160611b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b15620061785760208114620060e05783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006123918585808385018382808284376000920191909152509293925050620094039050565b9050683635c9adc5dea0000081108062006146575069152d02c7e14af680000081115b156200616f5784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b60365562006d47565b620061eb604051806040016040528060168152602001756d696e44656c65676174696f6e424e424368616e676560501b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b15620062b257602081146200621d5783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006260918585808385018382808284376000920191909152509293925050620094039050565b905067016345785d8a0000811080620062805750678ac7230489e8000081115b15620062a95784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b60375562006d47565b62006323604051806040016040528060148152602001736d6178456c656374656456616c696461746f727360601b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b15620063db5760208114620063555783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006398918585808385018382808284376000920191909152509293925050620094039050565b9050801580620063a957506101f481115b15620063d25784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b60385562006d47565b620064446040518060400160405280600c81526020016b1d5b989bdb9914195c9a5bd960a21b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b15620065015760208114620064765783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f8401819004810282018101909252828152600091620064b9918585808385018382808284376000920191909152509293925050620094039050565b90506203f480811080620064cf575062278d0081115b15620064f85784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b60395562006d47565b6200656f60405180604001604052806011815260200170726564656c65676174654665655261746560781b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b156200661c5760208114620065a15783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f8401819004810282018101909252828152600091620065e4918585808385018382808284376000920191909152509293925050620094039050565b90506064811115620066135784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b603a5562006d47565b6200668c60405180604001604052806013815260200172191bdddb9d1a5b5954db185cda105b5bdd5b9d606a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b156200674d5760208114620066be5783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006701918585808385018382808284376000920191909152509293925050620094039050565b9050674563918244f400008110806200671b5750603c5481115b15620067445784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b603b5562006d47565b620067bb6040518060400160405280601181526020017019995b1bdb9e54db185cda105b5bdd5b9d607a1b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b156200687e5760208114620067ed5783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006830918585808385018382808284376000920191909152509293925050620094039050565b905068056bc75e2d631000008110806200684c5750603b548111155b15620068755784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b603c5562006d47565b620068eb6040518060400160405280601081526020016f646f776e74696d654a61696c54696d6560801b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b15620069a857602081146200691d5783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006960918585808385018382808284376000920191909152509293925050620094039050565b90506202a300811080620069765750603e548110155b156200699f5784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b603d5562006d47565b62006a136040518060400160405280600e81526020016d66656c6f6e794a61696c54696d6560901b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b1562006ad0576020811462006a455783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006a88918585808385018382808284376000920191909152509293925050620094039050565b9050620d2f0081108062006a9e5750603d548111155b1562006ac75784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b603e5562006d47565b62006b4a6040518060400160405280601c81526020017f6d617846656c6f6e794265747765656e42726561746865426c6f636b0000000081525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b1562006bf6576020811462006b7c5783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b604080516020601f840181900481028201810190925282815260009162006bbf918585808385018382808284376000920191909152509293925050620094039050565b90508060000362006bed5784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b604a5562006d47565b62006c646040518060400160405280601181526020017039ba30b5b2a43ab1283937ba32b1ba37b960791b81525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620093a69050565b1562006d24576014811462006c965783838383604051630a5a604160e01b8152600401620011ee94939291906200a997565b600062006cde601484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050620094039050565b90506001600160a01b03811662006d125784848484604051630a5a604160e01b8152600401620011ee94939291906200a997565b62006d1d8162009408565b5062006d47565b838383836040516325ee20d560e21b8152600401620011ee94939291906200a997565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e6338484848460405162006d7e94939291906200a997565b60405180910390a150505050565b60005462010000900460ff161562006db757604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562006de95760405163b1d02c3d60e01b815260040160405180910390fd5b816000816001600160401b0381111562006e075762006e0762009a81565b60405190808252806020026020018201604052801562006e31578160200160208202803683370190505b5090506000805b8381101562006f2f5762006e7a87878381811062006e5a5762006e5a6200a383565b905060200201602081019062006e71919062009910565b603f9062008257565b62006e985760405163056e881160e01b815260040160405180910390fd5b6041600088888481811062006eb15762006eb16200a383565b905060200201602081019062006ec8919062009910565b6001600160a01b039081168252602082019290925260400160002060020154845191169250829084908390811062006f045762006f046200a383565b6001600160a01b039092166020928302919091019091015262006f27816200a3e8565b905062006e38565b50604051634484077560e01b81526120059063448407759062002bff90859088906004016200a399565b606080600062006f6a603f62008dfe565b9050808510156200712e57831562006f83578362006f85565b805b935060008462006f9687846200a353565b1162006fae5762006fa886836200a353565b62006fb0565b845b9050806001600160401b0381111562006fcd5762006fcd62009a81565b60405190808252806020026020018201604052801562006ff7578160200160208202803683370190505b509350806001600160401b0381111562007015576200701562009a81565b6040519080825280602002602001820160405280156200703f578160200160208202803683370190505b50925060005b818110156200712b576200705e62003db982896200a297565b8582815181106200707357620070736200a383565b60200260200101906001600160a01b031690816001600160a01b03168152505060416000868381518110620070ac57620070ac6200a383565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020160009054906101000a90046001600160a01b03168482815181106200710057620071006200a383565b6001600160a01b039092166020928302919091019091015262007123816200a3e8565b905062007045565b50505b9250925092565b33611001146200715d57604051630f22c43960e41b81526110016004820152602401620011ee565b60005462010000900460ff16156200718857604051631785c68160e01b815260040160405180910390fd5b6001600160a01b0380821660009081526043602052604090205416620071b0603f8262008257565b620071ce5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038116600090815260416020526040812090620071f5610258426200a274565b604a546000828152604b602052604090205491925011620072295760405163bd52fcdb60e01b815260040160405180910390fd5b6000818152604b602052604081208054600192906200724a9084906200a297565b90915550506001600160a01b038416600090815260446020526040902054158015906200729e57506001600160a01b03841660009081526044602052604090205442906200729c90610258906200a297565b105b15620072bd576040516330abb81d60e21b815260040160405180910390fd5b600080620072cd8560006200827a565b9150915081620072f057604051631b919bb160e11b815260040160405180910390fd5b6002840154603c5460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562007343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200736991906200a2ad565b905062007377858362008304565b856001600160a01b03167f6e9a2ee7aee95665e3a774a212eb11441b217e3e4656ab9563793094689aabb283836000604051620073b7939291906200a2dd565b60405180910390a26002850154604051633041949b60e01b815261200591633041949b9162005b56916001600160a01b0316908a906004016200a234565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384938493849390929160808401919062007466906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007494906200a1fe565b8015620074e55780601f10620074b957610100808354040283529160200191620074e5565b820191906000526020600020905b815481529060010190602001808311620074c757829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462007510906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200753e906200a1fe565b80156200758f5780601f1062007563576101008083540402835291602001916200758f565b820191906000526020600020905b8154815290600101906020018083116200757157829003601f168201915b50505050508152602001600182018054620075aa906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620075d8906200a1fe565b8015620076295780601f10620075fd5761010080835404028352916020019162007629565b820191906000526020600020905b8154815290600101906020018083116200760b57829003601f168201915b5050505050815260200160028201805462007644906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007672906200a1fe565b8015620076c35780601f106200769757610100808354040283529160200191620076c3565b820191906000526020600020905b815481529060010190602001808311620076a557829003601f168201915b50505050508152602001600382018054620076de906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200770c906200a1fe565b80156200775d5780601f1062007731576101008083540402835291602001916200775d565b820191906000526020600020905b8154815290600101906020018083116200773f57829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b815481526020019060010190808311620077fc5750505091909252505050606081015160e0820151610100909201519097919650945092505050565b60005462010000900460ff16156200786357604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff1615620078955760405163b1d02c3d60e01b815260040160405180910390fd5b6200789f62008c97565b620078ac603f8262008257565b620078ca5760405163056e881160e01b815260040160405180910390fd5b6000620078d662008c97565b6001600160a01b0381166000908152604160205260409020600c8101549192509042906200790890610258906200a297565b11156200792857604051631f92cdbd60e11b815260040160405180910390fd5b60058101805462007939906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007967906200a1fe565b8015620079b85780601f106200798c57610100808354040283529160200191620079b8565b820191906000526020600020905b8154815290600101906020018083116200799a57829003601f168201915b5050508287525085916005840191508190620079d590826200a9c2565b5060208201516001820190620079ec90826200a9c2565b506040820151600282019062007a0390826200a9c2565b506060820151600382019062007a1a90826200a9c2565b505042600c830155506040516001600160a01b038316907f85d6366b336ade7f106987ec7a8eac1e8799e508aeab045a39d2f63e0dc969d990600090a250505050565b60005462010000900460ff161562007a8857604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff161562007aba5760405163b1d02c3d60e01b815260040160405180910390fd5b82811462007adb576040516341abc80160e01b815260040160405180910390fd5b60005b8381101562007b4c5762007b3985858381811062007b005762007b006200a383565b905060200201602081019062007b17919062009910565b84848481811062007b2c5762007b2c6200a383565b905060200201356200929a565b62007b44816200a3e8565b905062007ade565b5050505050565b6001600160a01b038082166000908152604160209081526040808320815161018081018352815486168152600182015486169381019390935260028101549094169082015260038301546060820152600483018054929384939091608084019162007bbe906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007bec906200a1fe565b801562007c3d5780601f1062007c115761010080835404028352916020019162007c3d565b820191906000526020600020905b81548152906001019060200180831162007c1f57829003601f168201915b505050505081526020016005820160405180608001604052908160008201805462007c68906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007c96906200a1fe565b801562007ce75780601f1062007cbb5761010080835404028352916020019162007ce7565b820191906000526020600020905b81548152906001019060200180831162007cc957829003601f168201915b5050505050815260200160018201805462007d02906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007d30906200a1fe565b801562007d815780601f1062007d555761010080835404028352916020019162007d81565b820191906000526020600020905b81548152906001019060200180831162007d6357829003601f168201915b5050505050815260200160028201805462007d9c906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007dca906200a1fe565b801562007e1b5780601f1062007def5761010080835404028352916020019162007e1b565b820191906000526020600020905b81548152906001019060200180831162007dfd57829003601f168201915b5050505050815260200160038201805462007e36906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462007e64906200a1fe565b801562007eb55780601f1062007e895761010080835404028352916020019162007eb5565b820191906000526020600020905b81548152906001019060200180831162007e9757829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162007f545750505091909252505050604001519392505050565b600062007f8c603f8462008257565b62007faa5760405163056e881160e01b815260040160405180910390fd5b6001600160a01b038381166000908152604160205260409081902060020154905163aa1966cd60e01b81526004810185905291169063aa1966cd90602401620054a9565b60005462010000900460ff16156200801957604051631785c68160e01b815260040160405180910390fd5b3360009081526001602052604090205460ff16156200804b5760405163b1d02c3d60e01b815260040160405180910390fd5b6200805562008c97565b62008062603f8262008257565b620080805760405163056e881160e01b815260040160405180910390fd5b60006200808c62008c97565b90506200809d818787878762008fb9565b620080bb57604051631647e3cb60e11b815260040160405180910390fd5b60006001600160a01b031660458787604051620080da9291906200a24e565b908152604051908190036020019020546001600160a01b031614158062008124575060488686604051620081109291906200a24e565b9081526040519081900360200190205460ff165b1562008143576040516311fdb94760e01b815260040160405180910390fd5b6001600160a01b0381166000908152604160205260409020600c81015442906200817190610258906200a297565b11156200819157604051631f92cdbd60e11b815260040160405180910390fd5b42604682600401604051620081a791906200aa8a565b9081526040519081900360200190205560048101620081c88789836200a4ac565b5042600c8201556040518290604590620081e6908a908a906200a24e565b90815260405190819003602001812080546001600160a01b039384166001600160a01b0319909116179055908316907f783156582145bd0ff7924fae6953ba054cf1233eb60739a200ddb10de068ff0d9062008246908a908a906200a77d565b60405180910390a250505050505050565b6001600160a01b03811660009081526001830160205260408120541515620054ed565b60008060008484604051602001620082949291906200ab08565b60408051601f1981840301815291815281516020928301206000818152604c90935291205490915042811115620082d457600080935093505050620082fd565b603e54620082e390426200a297565b6000928352604c6020526040909220829055506001925090505b9250929050565b8154604051631507fdb760e11b81526001600160a01b03909116600482015261100090632a0ffb6e90602401600060405180830381600087803b1580156200834b57600080fd5b505af115801562008360573d6000803e3d6000fd5b505050506000600162008374603f62008dfe565b6200838091906200a353565b60495410801591506200843e5760405163d31f968d60e01b81526110006004820152600860248201526120009063d31f968d90604401602060405180830381865afa158015620083d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620083fa91906200a30c565b6200843e5760018301546040516001600160a01b03909116907f2afdc18061ac21cff7d9f11527ab9c8dec6fabd4edf6f894ed634bebd6a20d4590600090a2505050565b82600b01548211156200845357600b83018290555b600a83015460ff16620084c657600a8301805460ff1916600190811790915560498054600090620084869084906200a297565b909155505060018301546040516001600160a01b03909116907f4905ac32602da3fb8b4b7b00c285e5fc4c6c2308cc908b4a1e4e9625a29c90a390600090a25b505050565b604080516080808201835260008083526020808401829052838501829052606080850183905285519384018652828452838201839052838601839052830182905284518086018652828152810182905284518086019095528551855285810190850152919282906200853d9062009474565b90506000805b6200854e83620094e7565b156200862157806000036200858357620085726200856c846200950d565b62009571565b6001600160a01b031684526200860e565b80600103620085af576200859b6200856c846200950d565b6001600160a01b031660208501526200860e565b80600203620085db57620085c76200856c846200950d565b6001600160a01b031660408501526200860e565b806003036200860857620085f9620085f3846200950d565b62009589565b6060850152600191506200860e565b62008621565b62008619816200a3e8565b905062008543565b5091959194509092505050565b6020808201516001600160a01b031660009081526001909152604081205460ff168062008666575060208201516001600160a01b0316155b156200867457506004919050565b81516200868490603f9062008257565b6200869157506002919050565b81516001600160a01b03908116600090815260416020908152604080832081516101808101835281548616815260018201548616938101939093526002810154909416908201526003830154606082015260048301805492939192608084019190620086fd906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200872b906200a1fe565b80156200877c5780601f1062008750576101008083540402835291602001916200877c565b820191906000526020600020905b8154815290600101906020018083116200875e57829003601f168201915b5050505050815260200160058201604051806080016040529081600082018054620087a7906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620087d5906200a1fe565b8015620088265780601f10620087fa5761010080835404028352916020019162008826565b820191906000526020600020905b8154815290600101906020018083116200880857829003601f168201915b5050505050815260200160018201805462008841906200a1fe565b80601f01602080910402602001604051908101604052809291908181526020018280546200886f906200a1fe565b8015620088c05780601f106200889457610100808354040283529160200191620088c0565b820191906000526020600020905b815481529060010190602001808311620088a257829003601f168201915b50505050508152602001600282018054620088db906200a1fe565b80601f016020809104026020016040519081016040528092919081815260200182805462008909906200a1fe565b80156200895a5780601f106200892e576101008083540402835291602001916200895a565b820191906000526020600020905b8154815290600101906020018083116200893c57829003601f168201915b5050505050815260200160038201805462008975906200a1fe565b80601f0160208091040260200160405190810160405280929190818152602001828054620089a3906200a1fe565b8015620089f45780601f10620089c857610100808354040283529160200191620089f4565b820191906000526020600020905b815481529060010190602001808311620089d657829003601f168201915b505050919092525050508152604080516060808201835260098501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600a84015460ff16151582840152600b84015490830152600c8301546080830152600d8301546001600160a01b031660a0830152805161026081019182905260c09092019190600e84019060139082845b81548152602001906001019080831162008a935750505050508152505090508060e00151801562008ade575082600001516001600160a01b031683602001516001600160a01b031614155b1562008aed5750600392915050565b6040808201516060850151602086015192516317066a5760e21b81526001600160a01b03938416600482015260009390921691635c19a95c919060240160206040518083038185885af115801562008b49573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062008b7091906200a2ad565b905083602001516001600160a01b031684600001516001600160a01b03166000805160206200ba8483398151915283876060015160405162008bbc929190918252602082015260400190565b60405180910390a383602001516001600160a01b031684600001516001600160a01b03167f607b17598da6bdca05650a2fc08bd2bc8e38c3236806a0fa8e0daabc1d6cb1d883876060015160405162008c1f929190918252602082015260400190565b60405180910390a360408083015160208601519151633041949b60e01b815261200592633041949b9262008c59929091906004016200a234565b600060405180830381600087803b15801562008c7457600080fd5b505af115801562008c89573d6000803e3d6000fd5b506000979650505050505050565b336000908152604d60205260408120546001600160a01b03161562008cd35750336000908152604d60205260409020546001600160a01b031690565b503390565b6001600160a01b0381166000908152604160205260409020600a81015460ff161562008d02575050565b6036546002820154604051630913db4760e01b81526001600160a01b03858116600483015290911690630913db4790602401602060405180830381865afa15801562008d52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008d7891906200a2ad565b101562005ee95762008d9a81603d544262008d9491906200a297565b62008304565b80546040516335409f7f60e01b81526001600160a01b039091166004820152611000906335409f7f90602401600060405180830381600087803b15801562008de157600080fd5b505af115801562008df6573d6000803e3d6000fd5b505050505050565b6000620054f0825490565b6000620054ed838362009661565b60008082905060038151108062008e2f575060098151115b1562008e3e5750600092915050565b60418160008151811062008e565762008e566200a383565b016020015160f81c108062008e885750605a8160008151811062008e7e5762008e7e6200a383565b016020015160f81c115b1562008e975750600092915050565b60015b815181101562008faf57603082828151811062008ebb5762008ebb6200a383565b016020015160f81c108062008eec5750603982828151811062008ee25762008ee26200a383565b016020015160f81c115b801562008f3c5750604182828151811062008f0b5762008f0b6200a383565b016020015160f81c108062008f3c5750605a82828151811062008f325762008f326200a383565b016020015160f81c115b801562008f8c5750606182828151811062008f5b5762008f5b6200a383565b016020015160f81c108062008f8c5750607a82828151811062008f825762008f826200a383565b016020015160f81c115b1562008f9c575060009392505050565b62008fa7816200a3e8565b905062008e9a565b5060019392505050565b600060308414158062008fcd575060608214155b1562008fdc57506000620090e0565b60008686864660405160200162008ff794939291906200ab46565b60408051808303601f1901815282825280516020918201208184528383019092529092506000919060208201818036833701905050905081602082015260008186868a8a604051602001620090519594939291906200ab73565b60408051808303601f190181526001808452838301909252925060009190602082018180368337019050509050815160016020830182602086016066600019fa6200909b57600080fd5b50600081600081518110620090b457620090b46200a383565b016020015160f81c905060018114620090d657600095505050505050620090e0565b6001955050505050505b95945050505050565b60008061200361dead6040516200910090620098ec565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562009143573d6000803e3d6000fd5b509050806001600160a01b031663f399e22e3486866040518463ffffffff1660e01b8152600401620091779291906200abab565b6000604051808303818588803b1580156200919157600080fd5b505af1158015620091a6573d6000803e3d6000fd5b50506040516001600160a01b038086169450881692507fd481492e4e93bb36b4c12a5af93f03be3bf04b454dfbc35dd2663fa26f44d5b09150600090a39392505050565b6000620054ed836001600160a01b0384166200968e565b600054610100900460ff166200926e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620011ee565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b81620092a8603f8262008257565b620092c65760405163056e881160e01b815260040160405180910390fd5b6001600160a01b03838116600090815260416020526040808220600201549051635569f64b60e11b8152336004820152602481018690529192169063aad3ec96906044016020604051808303816000875af11580156200932a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200935091906200a2ad565b9050336001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683836040516200939891815260200190565b60405180910390a350505050565b600081604051602001620093bb91906200a95a565b6040516020818303038152906040528051906020012083604051602001620093e491906200a95a565b6040516020818303038152906040528051906020012014905092915050565b015190565b600080546040516001600160a01b0380851693630100000090930416917f44fc1b38a4abaa91ebd1b628a5b259a698f86238c8217d68f516e87769c60c0b91a3600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6040805160808101825260009181018281526060820183905281526020810191909152620094a282620096e0565b620094ac57600080fd5b6000620094bd836020015162009713565b8360200151620094ce91906200a297565b6040805180820190915293845260208401525090919050565b80518051602082015160009291620094ff916200a297565b836020015110915050919050565b60408051808201909152600080825260208201526200952c82620094e7565b6200953657600080fd5b602082015160006200954882620097a2565b90506200955681836200a297565b60209485015260408051808201909152908152928301525090565b80516000906015146200958357600080fd5b620054f0825b8051600090158015906200959f57508151602110155b620095a957600080fd5b6000620095ba836020015162009713565b90508083600001511015620096125760405162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f66667365740000000000006044820152606401620011ee565b8251600090620096249083906200a353565b90506000808386602001516200963b91906200a297565b90508051915060208310156200965857826020036101000a820491505b50949350505050565b60008260000182815481106200967b576200967b6200a383565b9060005260206000200154905092915050565b6000818152600183016020526040812054620096d757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620054f0565b506000620054f0565b80516000908103620096f457506000919050565b6020820151805160001a9060c082101562008faf575060009392505050565b8051600090811a60808110156200972d5750600092915050565b60b88110806200974a575060c081108015906200974a575060f881105b15620097595750600192915050565b60c0811015620097945762009771600160b86200abd1565b620097809060ff16826200a353565b6200978d9060016200a297565b9392505050565b62009771600160f86200abd1565b80516000908190811a6080811015620097bf5760019150620098e5565b60b8811015620097eb57620097d66080826200a353565b620097e39060016200a297565b9150620098e5565b60c08110156200986457600060b78203600186019550806020036101000a8651049150600181018201935050808310156200985d5760405162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b6044820152606401620011ee565b50620098e5565b60f88110156200987b57620097d660c0826200a353565b600060f78203600186019550806020036101000a865104915060018101820193505080831015620098e35760405162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b6044820152606401620011ee565b505b5092915050565b610e96806200abee83390190565b6001600160a01b03811681146200181957600080fd5b6000602082840312156200992357600080fd5b81356200978d81620098fa565b60008083601f8401126200994357600080fd5b5081356001600160401b038111156200995b57600080fd5b602083019150836020828501011115620082fd57600080fd5b600080602083850312156200998857600080fd5b82356001600160401b038111156200999f57600080fd5b620099ad8582860162009930565b90969095509350505050565b600080600060408486031215620099cf57600080fd5b833560ff81168114620099e157600080fd5b925060208401356001600160401b03811115620099fd57600080fd5b62009a0b8682870162009930565b9497909650939450505050565b60005b8381101562009a3557818101518382015260200162009a1b565b50506000910152565b6000815180845262009a5881602086016020860162009a18565b601f01601f19169290920160200192915050565b602081526000620054ed602083018462009a3e565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562009abc5762009abc62009a81565b60405290565b604051601f8201601f191681016001600160401b038111828210171562009aed5762009aed62009a81565b604052919050565b60006001600160401b0382111562009b115762009b1162009a81565b50601f01601f191660200190565b600062009b3662009b308462009af5565b62009ac2565b905082815283838301111562009b4b57600080fd5b828260208301376000602084830101529392505050565b60006020828403121562009b7557600080fd5b81356001600160401b0381111562009b8c57600080fd5b8201601f8101841362009b9e57600080fd5b62009baf8482356020840162009b1f565b949350505050565b6000806040838503121562009bcb57600080fd5b823562009bd881620098fa565b946020939093013593505050565b80151581146200181957600080fd5b6000806000806080858703121562009c0c57600080fd5b843562009c1981620098fa565b9350602085013562009c2b81620098fa565b925060408501359150606085013562009c448162009be6565b939692955090935050565b6001600160401b03811681146200181957600080fd5b60006020828403121562009c7857600080fd5b81356200978d8162009c4f565b6000806040838503121562009c9957600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101562009ce35781516001600160a01b03168752958201959082019060010162009cbc565b509495945050505050565b60808152600062009d03608083018762009ca8565b82810360208481019190915286518083528782019282019060005b8181101562009d3c5784518352938301939183019160010162009d1e565b5050848103604086015286518082528282019350600581901b8201830183890160005b8381101562009d9157601f1985840301875262009d7e83835162009a3e565b9686019692509085019060010162009d5f565b5050809550505050505082606083015295945050505050565b600080600080600080600087890360e081121562009dc757600080fd5b883562009dd481620098fa565b975060208901356001600160401b038082111562009df157600080fd5b62009dff8c838d0162009930565b909950975060408b013591508082111562009e1957600080fd5b62009e278c838d0162009930565b90975095508591506060605f198401121562009e4257600080fd5b60608b01945060c08b013592508083111562009e5d57600080fd5b505088016080818b03121562009e7257600080fd5b8091505092959891949750929550565b6000806040838503121562009e9657600080fd5b823562009ea381620098fa565b9150602083013562009eb58162009be6565b809150509250929050565b60208152600082516080602084015262009ede60a084018262009a3e565b90506020840151601f198085840301604086015262009efe838362009a3e565b9250604086015191508085840301606086015262009f1d838362009a3e565b9250606086015191508085840301608086015250620090e0828262009a3e565b6000806000806040858703121562009f5457600080fd5b84356001600160401b038082111562009f6c57600080fd5b62009f7a8883890162009930565b9096509450602087013591508082111562009f9457600080fd5b5062009fa38782880162009930565b95989497509550505050565b60008083601f84011262009fc257600080fd5b5081356001600160401b0381111562009fda57600080fd5b6020830191508360208260051b8501011115620082fd57600080fd5b6000806000604084860312156200a00c57600080fd5b83356001600160401b038111156200a02357600080fd5b6200a0318682870162009faf565b90945092505060208401356200a04781620098fa565b809150509250925092565b6060815260006200a067606083018662009ca8565b82810360208401526200a07b818662009ca8565b915050826040830152949350505050565b600082601f8301126200a09e57600080fd5b620054ed8383356020850162009b1f565b6000602082840312156200a0c257600080fd5b81356001600160401b03808211156200a0da57600080fd5b90830190608082860312156200a0ef57600080fd5b6200a0f962009a97565b8235828111156200a10957600080fd5b6200a117878286016200a08c565b8252506020830135828111156200a12d57600080fd5b6200a13b878286016200a08c565b6020830152506040830135828111156200a15457600080fd5b6200a162878286016200a08c565b6040830152506060830135828111156200a17b57600080fd5b6200a189878286016200a08c565b60608301525095945050505050565b600080600080604085870312156200a1af57600080fd5b84356001600160401b03808211156200a1c757600080fd5b6200a1d58883890162009faf565b909650945060208701359150808211156200a1ef57600080fd5b5062009fa38782880162009faf565b600181811c908216806200a21357607f821691505b60208210810362001f0857634e487b7160e01b600052602260045260246000fd5b6001600160a01b0392831681529116602082015260400190565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826200a29257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620054f057620054f06200a25e565b6000602082840312156200a2c057600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600383106200a2fe576200a2fe6200a2c7565b826040830152949350505050565b6000602082840312156200a31f57600080fd5b81516200978d8162009be6565b82815260408101600583106200a346576200a3466200a2c7565b8260208301529392505050565b81810381811115620054f057620054f06200a25e565b8082028115828204841417620054f057620054f06200a25e565b634e487b7160e01b600052603260045260246000fd5b6040815260006200a3ae604083018562009ca8565b905060018060a01b03831660208301529392505050565b6001600160401b03828116828216039080821115620098e557620098e56200a25e565b6000600182016200a3fd576200a3fd6200a25e565b5060010190565b6000808335601e198436030181126200a41c57600080fd5b8301803591506001600160401b038211156200a43757600080fd5b602001915036819003821315620082fd57600080fd5b601f821115620084c657600081815260208120601f850160051c810160208610156200a4765750805b601f850160051c820191505b8181101562008df6578281556001016200a482565b600019600383901b1c191660019190911b1790565b6001600160401b038311156200a4c6576200a4c662009a81565b6200a4de836200a4d783546200a1fe565b836200a44d565b6000601f8411600181146200a51157600085156200a4fc5750838201355b6200a50886826200a497565b84555062007b4c565b600083815260209020601f19861690835b828110156200a54457868501358255602094850194600190920191016200a522565b50868210156200a5625760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6200a58082836200a404565b6001600160401b038111156200a59a576200a59a62009a81565b6200a5b2816200a5ab85546200a1fe565b856200a44d565b6000601f8211600181146200a5e557600083156200a5d05750838201355b6200a5dc84826200a497565b8655506200a642565b600085815260209020601f19841690835b828110156200a61857868501358255602094850194600190920191016200a5f6565b50848210156200a6365760001960f88660031b161c19848701351681555b505060018360011b0185555b505050506200a65560208301836200a404565b6200a6658183600186016200a4ac565b50506200a67660408301836200a404565b6200a6868183600286016200a4ac565b50506200a69760608301836200a404565b6200a6a78183600386016200a4ac565b50505050565b81356200a6ba8162009c4f565b6001600160401b03811690508154816001600160401b0319821617835560208401356200a6e78162009c4f565b6fffffffffffffffff0000000000000000604091821b166fffffffffffffffffffffffffffffffff198316841781178555908501356200a7278162009c4f565b6001600160c01b0319929092169092179190911760809190911b67ffffffffffffffff60801b1617905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600062009baf6020830184866200a754565b60006001600160401b038211156200a7af576200a7af62009a81565b5060051b60200190565b600060208083850312156200a7cd57600080fd5b82516001600160401b038111156200a7e457600080fd5b8301601f810185136200a7f657600080fd5b80516200a80762009b30826200a793565b81815260059190911b820183019083810190878311156200a82757600080fd5b928401925b828410156200a8525783516200a84281620098fa565b825292840192908401906200a82c565b979650505050505050565b600060208083850312156200a87157600080fd5b82516001600160401b03808211156200a88957600080fd5b818501915085601f8301126200a89e57600080fd5b81516200a8af62009b30826200a793565b81815260059190911b830184019084810190888311156200a8cf57600080fd5b8585015b838110156200a94d578051858111156200a8ed5760008081fd5b8601603f81018b136200a9005760008081fd5b8781015160406200a91562009b308362009af5565b8281528d828486010111156200a92b5760008081fd5b6200a93c838c830184870162009a18565b86525050509186019186016200a8d3565b5098975050505050505050565b600082516200a96e81846020870162009a18565b9190910192915050565b60ff84168152604060208201526000620090e06040830184866200a754565b6040815260006200a9ad6040830186886200a754565b82810360208401526200a8528185876200a754565b81516001600160401b038111156200a9de576200a9de62009a81565b6200a9f6816200a9ef84546200a1fe565b846200a44d565b602080601f8311600181146200aa2a57600084156200aa155750858301515b6200aa2185826200a497565b86555062008df6565b600085815260208120601f198616915b828110156200aa5b578886015182559484019460019091019084016200aa3a565b50858210156200aa7a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200aa9a816200a1fe565b600182811680156200aab557600181146200aacb576200aafc565b60ff19841687528215158302870194506200aafc565b8760005260208060002060005b858110156200aaf35781548a8201529084019082016200aad8565b50505082870194505b50929695505050505050565b6bffffffffffffffffffffffff198360601b1681526000600383106200ab32576200ab326200a2c7565b5060f89190911b6014820152601501919050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b600086516200ab87818460208b0162009a18565b82018587823760009086019081528385823760009301928352509095945050505050565b6001600160a01b038316815260406020820181905260009062009baf9083018462009a3e565b60ff8281168282160390811115620054f057620054f06200a25e56fe608060405260405162000e9638038062000e96833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e6f60279139620002f8565b9392505050565b60006200018060008051602062000e4f83398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e4f83398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61087580620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656424d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e0400000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000030b86b3146bdd2200b1dbdb1cea5e40d3451c028cbb4fb03b1826f7f2d82bee76bbd5cd68a74a16a7eceea093fd5826b9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003087ce273bb9b51fd69e50de7a8d9a99cfb3b1a5c6a7b85f6673d137a5a2ce7df3d6ee4e6d579a142d58b0606c4a7a1c27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a33ac14980d85c0d154c5909ebf7a11d455f54beb4d5d0dc1d8b3670b9c4a6b6c450ee3d623ecc48026f09ed1f0b5c1200000000000000000000000000000000a164736f6c6343000811000a \ No newline at end of file diff --git a/core/systemcontracts/bohr/rialto/ValidatorContract b/core/systemcontracts/bohr/rialto/ValidatorContract new file mode 100644 index 0000000000..78dbe27aa8 --- /dev/null +++ b/core/systemcontracts/bohr/rialto/ValidatorContract @@ -0,0 +1 @@ +60806040526004361061051c5760003560e01c80638a7beb01116102a2578063c81b166211610165578063e40716a1116100cc578063f92eb86b11610085578063f92eb86b14610d8d578063f9a2bbc714610da2578063fc3e590814610db7578063fccc281314610dcc578063fd4ad81f14610de1578063fd6a687914610e1057610523565b8063e40716a114610cfb578063ea321e4914610d10578063eb57e20214610d30578063eda5868c14610d50578063f1fad10414610d65578063f340fa0114610d7a57610523565b8063d86222d51161011e578063d86222d514610c7d578063daacdb6614610c92578063dc927faf14610ca7578063df8079e914610cbc578063e086c7b114610cd1578063e1c7392a14610ce657610523565b8063c81b166214610c09578063c8509d81146109ae578063cb75a59214610c1e578063ce910b0c14610c33578063d58918ae14610c53578063d68fb56a14610c6857610523565b8063aa82dce111610209578063aef198a9116101c2578063aef198a914610b93578063b7ab4db514610ba8578063b8cf4ef114610bca578063bf9f499514610734578063c466689d14610bdf578063c6d3394514610bf457610523565b8063aa82dce114610aff578063aad5606314610b14578063aaf5eb6814610b29578063ab51bb9614610b3e578063ac43175114610b53578063ad3c9da614610b7357610523565b80639dc092621161025b5780639dc0926214610a815780639fe0f81614610a96578063a0dc275814610aab578063a1a11bf514610ac0578063a5422d5c14610ad5578063a78abc1614610aea57610523565b80638a7beb01146109f85780638b5ad0c914610a0d5780638c5d749d14610a225780638d19a41014610a375780639369d7de14610a5757806396713da914610a6c57610523565b80635192c82c116103ea578063718a8aa81161035157806381650b621161030a57806381650b6214610984578063820dcaa814610999578063831d65d1146109ae578063853230aa1461093057806386249882146109ce57806388b32f11146109e357610523565b8063718a8aa81461090657806375d47a0a1461091b57806378dfed4a146109305780637942fd05146109455780637a84ca2a1461095a5780637e434d541461096f57610523565b80635d77156c116103a35780635d77156c1461086057806360eba4fe1461087557806362b72cf5146108955780636969a25c146108aa5780636e47b482146108dc57806370fd5bad146108f157610523565b80635192c82c146107cc57806351b4dce3146107e157806351e80672146107f657806355614fcc1461080b578063565c56b31461082b5780635667515a1461084b57610523565b80632a0ffb6e1161048e5780633dffc387116104475780633dffc3871461073457806343756e5c1461075657806345cf9daf1461076b578063493279b1146107805780634bf6c882146107a25780634df6e0c3146107b757610523565b80632a0ffb6e14610671578063300c356714610691578063321d398a146106b15780633365af3a146106d157806335409f7f146106f15780633b071dcc1461071157610523565b8063152ad3b8116104e0578063152ad3b8146105db5780631bd14ed8146105fd5780631e4c1524146106125780631ff1806914610632578063219f22d514610647578063280870281461065c57610523565b806304c4fec61461052857806307a568471461053f5780630bee7a671461056a5780630e2374a51461058c5780631182b875146105ae57610523565b3661052357005b600080fd5b34801561053457600080fd5b5061053d610e25565b005b34801561054b57600080fd5b50610554610e99565b604051610561919061947a565b60405180910390f35b34801561057657600080fd5b5061057f610e9f565b60405161056191906194a4565b34801561059857600080fd5b506105a1610ea4565b60405161056191906185b8565b3480156105ba57600080fd5b506105ce6105c936600461849e565b610eaa565b604051610561919061876e565b3480156105e757600080fd5b506105f06111a6565b6040516105619190618763565b34801561060957600080fd5b506105546111af565b34801561061e57600080fd5b5061053d61062d3660046182ac565b6111b5565b34801561063e57600080fd5b5061055461188b565b34801561065357600080fd5b5061057f611891565b34801561066857600080fd5b506105a1611896565b34801561067d57600080fd5b5061053d61068c36600461820c565b61189c565b34801561069d57600080fd5b5061053d6106ac366004618244565b611949565b3480156106bd57600080fd5b506105f06106cc36600461844b565b611c92565b3480156106dd57600080fd5b506105f06106ec36600461844b565b611d61565b3480156106fd57600080fd5b5061053d61070c36600461820c565b611e12565b34801561071d57600080fd5b50610726611f77565b604051610561929190618679565b34801561074057600080fd5b50610749612253565b60405161056191906194b5565b34801561076257600080fd5b506105a1612258565b34801561077757600080fd5b5061055461225e565b34801561078c57600080fd5b50610795612264565b604051610561919061946b565b3480156107ae57600080fd5b5061074961226a565b3480156107c357600080fd5b5061072661226f565b3480156107d857600080fd5b506105546123fb565b3480156107ed57600080fd5b506105a1612401565b34801561080257600080fd5b506105a1612407565b34801561081757600080fd5b506105f061082636600461820c565b61240d565b34801561083757600080fd5b5061055461084636600461820c565b612442565b34801561085757600080fd5b50610749612493565b34801561086c57600080fd5b5061057f612498565b34801561088157600080fd5b506105ce61089036600461844b565b61249d565b3480156108a157600080fd5b50610554612543565b3480156108b657600080fd5b506108ca6108c536600461844b565b612549565b604051610561969594939291906185e5565b3480156108e857600080fd5b506105a16125ad565b3480156108fd57600080fd5b506107496125b3565b34801561091257600080fd5b506107496125b8565b34801561092757600080fd5b506105a16125bd565b34801561093c57600080fd5b506105546125c3565b34801561095157600080fd5b506107496125c9565b34801561096657600080fd5b506105546125ce565b34801561097b57600080fd5b506105a16125d4565b34801561099057600080fd5b5061057f6125da565b3480156109a557600080fd5b506105546125df565b3480156109ba57600080fd5b5061053d6109c936600461849e565b6125e5565b3480156109da57600080fd5b50610554612646565b3480156109ef57600080fd5b5061055461264c565b348015610a0457600080fd5b506105f0612652565b348015610a1957600080fd5b5061055461265b565b348015610a2e57600080fd5b50610554612661565b348015610a4357600080fd5b50610554610a5236600461820c565b61267e565b348015610a6357600080fd5b5061053d6126be565b348015610a7857600080fd5b506107496127d2565b348015610a8d57600080fd5b506105a16127d7565b348015610aa257600080fd5b506105546127dd565b348015610ab757600080fd5b506105546127e2565b348015610acc57600080fd5b506105a16127e7565b348015610ae157600080fd5b506105ce6127ed565b348015610af657600080fd5b506105f0612809565b348015610b0b57600080fd5b506105a1612812565b348015610b2057600080fd5b506105a1612818565b348015610b3557600080fd5b5061055461281e565b348015610b4a57600080fd5b5061057f612493565b348015610b5f57600080fd5b5061053d610b6e3660046183ef565b612827565b348015610b7f57600080fd5b50610554610b8e36600461820c565b613320565b348015610b9f57600080fd5b50610554613332565b348015610bb457600080fd5b50610bbd61333f565b6040516105619190618666565b348015610bd657600080fd5b5061055461342a565b348015610beb57600080fd5b5061055461342f565b348015610c0057600080fd5b506105546125b3565b348015610c1557600080fd5b506105a1613435565b348015610c2a57600080fd5b5061055461343b565b348015610c3f57600080fd5b506105ce610c4e36600461844b565b613441565b348015610c5f57600080fd5b5061055461344e565b348015610c7457600080fd5b50610554613454565b348015610c8957600080fd5b50610554613493565b348015610c9e57600080fd5b5061055461349f565b348015610cb357600080fd5b506105a16134a5565b348015610cc857600080fd5b506105a16134ab565b348015610cdd57600080fd5b50610554610e9f565b348015610cf257600080fd5b5061053d6134b1565b348015610d0757600080fd5b50610554613742565b348015610d1c57600080fd5b506105f0610d2b3660046183b0565b613748565b348015610d3c57600080fd5b5061053d610d4b36600461820c565b6138ce565b348015610d5c57600080fd5b5061057f6139d2565b348015610d7157600080fd5b506107496139d7565b61053d610d8836600461820c565b6139dc565b348015610d9957600080fd5b50610554613d92565b348015610dae57600080fd5b506105a1613d98565b348015610dc357600080fd5b506107496127dd565b348015610dd857600080fd5b506105a1613d9e565b348015610ded57600080fd5b50610e01610dfc36600461844b565b613da4565b60405161056193929190619483565b348015610e1c57600080fd5b506105a1613e66565b6000610e303361267e565b9050600b8181548110610e3f57fe5b600091825260209091206001601690920201015460ff16610e7b5760405162461bcd60e51b8152600401610e729061909b565b60405180910390fd5b6000610e85613454565b9050610e943383836001613e6c565b505050565b60095481565b606481565b61200181565b60005460609060ff16610ecf5760405162461bcd60e51b8152600401610e729061892d565b600b54610f8d57610ede617db8565b60015460005b81811015610f8957600b8054600181018255600091909152835160008051602061958783398151915260169092029182019081556020808601516000805160206195c78339815191528401805460ff1916911515919091179055604086015180518794610f65936000805160206195a7833981519152909101920190617de7565b506060820151610f7b9060038301906013617e61565b505050806001019050610ee4565b5050505b610f95617e8e565b6000610fd685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061414192505050565b9150915080610ff257610fe960646142fd565b9250505061119f565b815160009060ff16611017576110108360200151846040015161435e565b905061116b565b825160ff16600114156111675782602001515160011461105c5760008051602061956783398151915260405161104c90618f54565b60405180910390a1506067611162565b6000836020015160008151811061106f57fe5b602090810291909101810151516001600160a01b038116600090815260049092526040909120549091508015806110d057506001808203815481106110b057fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561110e576040516001600160a01b038316907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a261115b565b600061111d8360018403615520565b905080611159576040516001600160a01b038416907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a25b505b6000925050505b61116b565b5060655b63ffffffff8116611190575050604080516000815260208101909152915061119f9050565b611199816142fd565b93505050505b9392505050565b60075460ff1681565b600f5481565b3341146111d45760405162461bcd60e51b8152600401610e72906192d2565b3a156111f25760405162461bcd60e51b8152600401610e7290618fda565b825160408051828152602080840282010190915260609082801561123057816020015b61121d617eb2565b8152602001906001900390816112155790505b50905060005b828110156112da576040518060c0016040528087838151811061125557fe5b60200260200101516001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200186838151811061129757fe5b60200260200101516001600160401b0316815260200160001515815260200160008152508282815181106112c757fe5b6020908102919091010152600101611236565b5060405163d31f968d60e01b81526120009063d31f968d90611305906110009060089060040161864a565b60206040518083038186803b15801561131d57600080fd5b505afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190618390565b15611678578051601554818111156113f757815b818110156113f557601580548061137c57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b031916905560030155905560168054806113cf57fe5b6001900381819060005260206000200160006113eb9190617ee7565b9055600101611369565b505b60005b828110156116375781811061151f57601584828151811061141757fe5b602090810291909101810151825460018181018555600094855293839020825160049092020180546001600160a01b039283166001600160a01b0319918216178255938301519481018054958316958516959095179094556040820151600285018054606085015160808601511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590961692909716919091179290921692909217169290921790915560a0015160039091015585516016908790839081106114e757fe5b602090810291909101810151825460018101845560009384529282902081516115199491909101929190910190617de7565b5061162f565b83818151811061152b57fe5b60200260200101516015828154811061154057fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015585518690829081106115fb57fe5b60200260200101516016828154811061161057fe5b90600052602060002001908051906020019061162d929190617de7565b505b6001016113fa565b507fb8e726330a0dad1cf3d04e925663b17e391f1ed547d79b7f4e5f344119b4424682604051611667919061947a565b60405180910390a150505050610e94565b60608061168583866158e3565b9150915060005b60015481101561177b576000600182815481106116a557fe5b906000526020600020906004020160030154905080600014611772576000600183815481106116d057fe5b9060005260206000209060040201600301819055506120026001600160a01b031663092193ab826001858154811061170457fe5b60009182526020909120600491820201546040516001600160e01b031960e086901b16815261173f926001600160a01b0390921691016185b8565b6000604051808303818588803b15801561175857600080fd5b505af115801561176c573d6000803e3d6000fd5b50505050505b5060010161168c565b5047156117e9577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516117b1919061947a565b60405180910390a1604051611002904780156108fc02916000818181858888f193505050501580156117e7573d6000803e3d6000fd5b505b60006003819055600555815115611804576118048282615dcd565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561184157600080fd5b505af1158015611855573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a150505050505050565b60035481565b606881565b61200581565b33612002146118bd5760405162461bcd60e51b8152600401610e7290619434565b60005b60155481101561194557816001600160a01b0316601582815481106118e157fe5b60009182526020909120600490910201546001600160a01b0316141561193d5760016015828154811061191057fe5b9060005260206000209060040201600201601c6101000a81548160ff021916908315150217905550611945565b6001016118c0565b5050565b3341146119685760405162461bcd60e51b8152600401610e72906192d2565b60105443116119895760405162461bcd60e51b8152600401610e7290618b4f565b3a156119a75760405162461bcd60e51b8152600401610e7290618fda565b60005460ff166119c95760405162461bcd60e51b8152600401610e729061892d565b60006110023168056bc75e2d63100000811115611a00576119f98168056bc75e2d6310000063ffffffff6165bc16565b9150611a07565b5050611c88565b6040516309a99b4f60e41b815261100290639a99b4f090611a2e90309086906004016185cc565b602060405180830381600087803b158015611a4857600080fd5b505af1158015611a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a809190618463565b915081611a8e575050611c88565b6000805b84811015611abc57858582818110611aa657fe5b9050602002013582019150806001019050611a92565b5080611aca57505050611c88565b6000806000805b89811015611c805784898983818110611ae657fe5b90506020020135880281611af657fe5b0493508a8a82818110611b0557fe5b9050602002016020810190611b1a919061820c565b6001600160a01b03811660009081526004602052604090205490935091508115611c36576000600180840381548110611b4f57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611bbc57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8586604051611baf919061947a565b60405180910390a2611c30565b600354611bcf908663ffffffff6165fe16565b6003908155810154611be7908663ffffffff6165fe16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611c2790889061947a565b60405180910390a25b50611c78565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8585604051611c6f919061947a565b60405180910390a25b600101611ad1565b505050505050505b5050436010555050565b6001546000908210611ca657506000611d5c565b60006001600160a01b031660018381548110611cbe57fe5b60009182526020909120600490910201546001600160a01b03161480611cee57506008541580611cee5750600a54155b80611cfd575060085460095410155b80611d0e5750611d0c82611d61565b155b80611d3757506000600b8381548110611d2357fe5b906000526020600020906016020160000154115b80611d4b57506001611d4761333f565b5111155b15611d5857506000611d5c565b5060015b919050565b6001546000908210611d7557506000611d5c565b600b548210611db25760018281548110611d8b57fe5b9060005260206000209060040201600201601c9054906101000a900460ff16159050611d5c565b60018281548110611dbf57fe5b9060005260206000209060040201600201601c9054906101000a900460ff16158015611e0c5750600b8281548110611df357fe5b600091825260209091206001601690920201015460ff16155b92915050565b600b54611ed057611e21617db8565b60015460005b81811015611ecc57600b8054600181018255600091909152835160008051602061958783398151915260169092029182019081556020808601516000805160206195c78339815191528401805460ff1916911515919091179055604086015180518794611ea8936000805160206195a7833981519152909101920190617de7565b506060820151611ebe9060038301906013617e61565b505050806001019050611e27565b5050505b336110011480611ee1575033612002145b611efd5760405162461bcd60e51b8152600401610e7290618964565b6001600160a01b03811660009081526004602052604090205480611f215750611f74565b6001810390506000600b8281548110611f3657fe5b600091825260209091206001601690920201015460ff169050611f598383615520565b8015611f625750805b15610e94576009805460001901905550505b50565b60015460609081906000805b82811015611fca5760018181548110611f9857fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611fc2576001909101905b600101611f83565b50606081604051908082528060200260200182016040528015611ff7578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561203057816020015b606081526020019060019003908161201b5790505b50600b54600094509091508414156121ab5760005b848110156121a5576001818154811061205a57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661219d576001818154811061208a57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106120b557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106120e257fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561217a5780601f1061214f5761010080835404028352916020019161217a565b820191906000526020600020905b81548152906001019060200180831161215d57829003601f168201915b505050505082858151811061218b57fe5b60209081029190910101526001909301925b600101612045565b50612247565b60005b8481101561224557600181815481106121c357fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661223d57600181815481106121f357fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061221e57fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016121ae565b505b909450925050505b9091565b600181565b61100181565b60085481565b6102ca81565b600881565b6060806000600e549050600080600c541161228b57601561228f565b600c545b9050606061229b61333f565b905060606122a882616623565b9050828251116122bf57909450925061224f915050565b838383510310156122d1578282510393505b83156123075760c843046122ed83838388880360008a8a616791565b6123058383838888038989038a8b8b8b510301616791565b505b606083604051908082528060200260200182016040528015612333578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561236c57816020015b60608152602001906001900390816123575790505b50905060005b858110156123ed5784818151811061238657fe5b602002602001015183828151811061239a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106123c657fe5b60200260200101518282815181106123da57fe5b6020908102919091010152600101612372565b509096509450505050509091565b60065481565b61200681565b61200081565b6001600160a01b03811660009081526004602052604081205480612435576000915050611d5c565b6000190161119f81611d61565b6001600160a01b0381166000908152600460205260408120548061246a576000915050611d5c565b60018082038154811061247957fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b601281815481106124aa57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529350909183018282801561253b5780601f106125105761010080835404028352916020019161253b565b820191906000526020600020905b81548152906001019060200180831161251e57829003601f168201915b505050505081565b60105481565b6001818154811061255657fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b61200381565b606681565b61271081565b33612000146126065760405162461bcd60e51b8152600401610e7290619283565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051612639939291906194c3565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6000601754600014156126765750600161267b565b506017545b90565b6001600160a01b038116600090815260046020526040812054806126b45760405162461bcd60e51b8152600401610e729061920b565b6000190192915050565b600b5461277c576126cd617db8565b60015460005b8181101561277857600b8054600181018255600091909152835160008051602061958783398151915260169092029182019081556020808601516000805160206195c78339815191528401805460ff1916911515919091179055604086015180518794612754936000805160206195a7833981519152909101920190617de7565b50606082015161276a9060038301906013617e61565b5050508060010190506126d3565b5050505b6008546127895760036008555b600a54612796576002600a555b60006127a13361267e565b90506127ac81611c92565b6127c85760405162461bcd60e51b8152600401610e7290618f11565b611f7433826168e8565b600981565b61100781565b600381565b60c881565b61100681565b6040518060a00160405280607881526020016195e76078913981565b60005460ff1681565b61200281565b61300081565b6402540be40081565b60005460ff166128495760405162461bcd60e51b8152600401610e729061892d565b336110071461286a5760405162461bcd60e51b8152600401610e7290619008565b6128d484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506169809050565b1561297157602081146128f95760405162461bcd60e51b8152600401610e72906191c5565b604080516020601f8401819004810282018101909252828152600091612937918585808385018382808284376000920191909152506169d992505050565b90506064811015801561294d5750620186a08111155b6129695760405162461bcd60e51b8152600401610e7290618d72565b6002556132dd565b6129d184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506169809050565b15612a8657602081146129f65760405162461bcd60e51b8152600401610e72906187b3565b604080516020601f8401819004810282018101909252828152600091612a34918585808385018382808284376000920191909152506169d992505050565b9050612710612a60601854612a54600f54856165fe90919063ffffffff16565b9063ffffffff6165fe16565b1115612a7e5760405162461bcd60e51b8152600401610e7290618c98565b6006556132dd565b612af084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506169809050565b15612b8a5760208114612b155760405162461bcd60e51b8152600401610e72906187ea565b604080516020601f8401819004810282018101909252828152600091612b53918585808385018382808284376000920191909152506169d992505050565b600c5490915080612b62575060155b808210612b815760405162461bcd60e51b8152600401610e7290618bb9565b506008556132dd565b612bf384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506169809050565b15612c8c5760208114612c185760405162461bcd60e51b8152600401610e72906188b3565b604080516020601f8401819004810282018101909252828152600091612c56918585808385018382808284376000920191909152506169d992505050565b9050600081118015612c685750600a81105b612c845760405162461bcd60e51b8152600401610e7290619367565b600a556132dd565b612d0084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506169809050565b15612d8f5760208114612d255760405162461bcd60e51b8152600401610e7290618867565b604080516020601f8401819004810282018101909252828152600091612d63918585808385018382808284376000920191909152506169d992505050565b9050600d54811115612d875760405162461bcd60e51b8152600401610e7290618de8565b600e556132dd565b612df884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506169809050565b15612e7a5760208114612e1d5760405162461bcd60e51b8152600401610e7290619056565b604080516020601f8401819004810282018101909252828152600091612e5b918585808385018382808284376000920191909152506169d992505050565b600d819055600e54909150811015612e7457600d54600e555b506132dd565b612ede84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506169809050565b15612f8c5760208114612f035760405162461bcd60e51b8152600401610e72906188f8565b604080516020601f8401819004810282018101909252828152600091612f41918585808385018382808284376000920191909152506169d992505050565b905060008111612f635760405162461bcd60e51b8152600401610e7290618a61565b6064811115612f845760405162461bcd60e51b8152600401610e7290618aa9565b600c556132dd565b612ff884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601581527473797374656d52657761726442617365526174696f60581b602082015291506169809050565b156130a1576020811461301d5760405162461bcd60e51b8152600401610e729061931f565b604080516020601f840181900481028201810190925282815260009161305b918585808385018382808284376000920191909152506169d992505050565b905061271061307b601854612a54600654856165fe90919063ffffffff16565b11156130995760405162461bcd60e51b8152600401610e72906189d2565b600f556132dd565b61311584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f73797374656d526577617264416e74694d4556526174696f0000000000000000602082015291506169809050565b156131be576020811461313a5760405162461bcd60e51b8152600401610e7290618d27565b604080516020601f8401819004810282018101909252828152600091613178918585808385018382808284376000920191909152506169d992505050565b9050612710613198600f54612a54600654856165fe90919063ffffffff16565b11156131b65760405162461bcd60e51b8152600401610e7290618e82565b6018556132dd565b61321f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a8152690e8eae4dc98cadccee8d60b31b602082015291506169809050565b156132c557602081146132445760405162461bcd60e51b8152600401610e7290618c16565b604080516020601f8401819004810282018101909252828152600091613282918585808385018382808284376000920191909152506169d992505050565b905060038110158015613296575060098111155b806132a15750806001145b6132bd5760405162461bcd60e51b8152600401610e729061913f565b6017556132dd565b60405162461bcd60e51b8152600401610e72906193c4565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040516133129493929190618781565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b8281101561336e5761335a81611d61565b15613366578160010191505b600101613349565b5060608160405190808252806020026020018201604052801561339b578160200160208202803683370190505b5090506000915060005b83811015613422576133b681611d61565b1561341a57600181815481106133c857fe5b600091825260209091206004909102015482516001600160a01b03909116908390859081106133f357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b6001016133a5565b509250505090565b601581565b61027181565b61100281565b60175481565b601381815481106124aa57fe5b60185481565b600061345e61333f565b519050600080600c5411613473576015613477565b600c545b905080821115613485578091505b8161348f57600191505b5090565b67016345785d8a000081565b60055481565b61100381565b61200481565b60005460ff16156134d45760405162461bcd60e51b8152600401610e7290619108565b6134dc617e8e565b60006134ff6040518060a00160405280607881526020016195e760789139614141565b91509150806135205760405162461bcd60e51b8152600401610e7290619242565b613528617db8565b60005b83602001515181101561372957600b8054600181018255600091909152825160008051602061958783398151915260169092029182019081556020808501516000805160206195c78339815191528401805460ff19169115159190911790556040850151805186946135b1936000805160206195a7833981519152909101920190617de7565b5060608201516135c79060038301906013617e61565b505050836040015181815181106135da57fe5b6020026020010151600b82815481106135ef57fe5b90600052602060002090601602016002019080519060200190613613929190617de7565b5060018460200151828151811061362657fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a0909301516003909301929092559187015180519185019391859081106136fc57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205560010161352b565b50506103e860025550506000805460ff19166001179055565b600d5481565b601354600090815b818110156138515761383985858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506013805490925085915081106137a157fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561382f5780601f106138045761010080835404028352916020019161382f565b820191906000526020600020905b81548152906001019060200180831161381257829003601f168201915b50505050506169de565b1561384957600192505050611e0c565b600101613750565b5060125460005b818110156138c2576138a986868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506012805490925085915081106137a157fe5b156138ba5760019350505050611e0c565b600101613858565b50600095945050505050565b33611001146138ef5760405162461bcd60e51b8152600401610e72906193eb565b600b546139ad576138fe617db8565b60015460005b818110156139a957600b8054600181018255600091909152835160008051602061958783398151915260169092029182019081556020808601516000805160206195c78339815191528401805460ff1916911515919091179055604086015180518794613985936000805160206195a7833981519152909101920190617de7565b50606082015161399b9060038301906013617e61565b505050806001019050613904565b5050505b60006139b882616a42565b90506139c381611c92565b156119455761194582826168e8565b606581565b601181565b3341146139fb5760405162461bcd60e51b8152600401610e72906192d2565b60005460ff16613a1d5760405162461bcd60e51b8152600401610e729061892d565b60003411613a3d5760405162461bcd60e51b8152600401610e7290618db9565b3a15613a5b5760405162461bcd60e51b8152600401610e7290618fda565b6001600160a01b03811660009081526004602052604090205460145434919060ff16613a9b57610271600f556103e86006556014805460ff191660011790555b600f546017546001108015613ab257506000601854115b15613ad7576001601754036017544381613ac857fe5b066018540281613ad457fe5b04015b600083118015613ae75750600081115b15613b94576000613b10612710613b04348563ffffffff616bc516565b9063ffffffff616bff16565b90508015613b92576040516110029082156108fc029083906000818181858888f19350505050158015613b47573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051613b77919061947a565b60405180910390a1613b8f848263ffffffff6165bc16565b93505b505b600083118015613ba657506000600654115b15613c4c576000613bc8612710613b0460065434616bc590919063ffffffff16565b90508015613c4a5760405161dead9082156108fc029083906000818181858888f19350505050158015613bff573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051613c2f919061947a565b60405180910390a1613c47848263ffffffff6165bc16565b93505b505b8115613d4a576000600180840381548110613c6357fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615613cd057846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051613cc3919061947a565b60405180910390a2613d44565b600354613ce3908563ffffffff6165fe16565b6003908155810154613cfb908563ffffffff6165fe16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590613d3b90879061947a565b60405180910390a25b50613d8c565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051613d83919061947a565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110613db157fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff90911694919291830182828015613e5c5780601f10613e3157610100808354040283529160200191613e5c565b820191906000526020600020905b815481529060010190602001808311613e3f57829003601f168201915b5050505050905083565b61100481565b6000600a5460001480613e7d575082155b80613e885750600954155b15613e9557506000614139565b60096000815460019003919050819055506000613ee0600a54613b0486613b04600b8a81548110613ec257fe5b6000918252602090912060169091020154439063ffffffff6165bc16565b90506000600b8681548110613ef157fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b158015613f5657600080fd5b505afa158015613f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8e919061847b565b91509150600093508083106140ef57613fa78888615520565b5060405163436aa28360e11b8152600090612002906386d5450690613fd0908c906004016185b8565b60206040518083038186803b158015613fe857600080fd5b505afa158015613ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140209190618228565b6001600160a01b03161461408e576040516328aa02b160e01b8152611001906328aa02b190614057908b9087908a90600401618627565b600060405180830381600087803b15801561407157600080fd5b505af1158015614085573d6000803e3d6000fd5b505050506140e6565b6040516305bfb49960e41b815261100190635bfb4990906140b3908b906004016185b8565b600060405180830381600087803b1580156140cd57600080fd5b505af11580156140e1573d6000803e3d6000fd5b505050505b60019350614101565b818310614101576140ff88616a42565b505b6040516001600160a01b038916907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050505b949350505050565b614149617e8e565b6000614153617e8e565b61415b617f2b565b61416c61416786616c41565b616c66565b90506000805b61417b83616cb0565b156142ef57806141a05761419661419184616cd1565b616d1f565b60ff1684526142e7565b80600114156142e25760606141bc6141b785616cd1565b616d9f565b905080516040519080825280602002602001820160405280156141f957816020015b6141e6617eb2565b8152602001906001900390816141de5790505b508560200181905250805160405190808252806020026020018201604052801561423757816020015b60608152602001906001900390816142225790505b50604086015260005b81518110156142d757614251617eb2565b6060600061427185858151811061426457fe5b6020026020010151616e70565b92509250925080614291578860009a509a505050505050505050506142f8565b82896020015185815181106142a257fe5b602002602001018190525081896040015185815181106142be57fe5b6020026020010181905250505050806001019050614240565b5060019250506142e7565b6142ef565b600101614172565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161431757905050905061433d8363ffffffff16616f8a565b8160008151811061434a57fe5b602002602001018190525061119f81616f9d565b60006064835111156143955760008051602061956783398151915260405161438590618b06565b60405180910390a1506066611e0c565b60005b83518110156144335760005b8181101561442a578481815181106143b857fe5b6020026020010151600001516001600160a01b03168583815181106143d957fe5b6020026020010151600001516001600160a01b031614156144225760008051602061956783398151915260405161440f90618c4d565b60405180910390a1606692505050611e0c565b6001016143a4565b50600101614398565b5060608060606015805480602002602001604051908101604052809291908181526020016000905b828210156144e55760008481526020908190206040805160c0810182526004860290920180546001600160a01b039081168452600180830154821685870152600283015491821693850193909352600160a01b81046001600160401b03166060850152600160e01b900460ff16151560808401526003015460a0830152908352909201910161445b565b50505050905060606016805480602002602001604051908101604052809291908181526020016000905b828210156145ba5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156145a65780601f1061457b576101008083540402835291602001916145a6565b820191906000526020600020905b81548152906001019060200180831161458957829003601f168201915b50505050508152602001906001019061450f565b50505050905060005b8251811015614617578281815181106145d857fe5b6020026020010151606001516003028382815181106145f357fe5b60209081029190910101516001600160401b039091166060909101526001016145c3565b5060608061462789898686617027565b9150915061463582826158e3565b60015460408051828152602080840282010190915292985090965060009550859450925060609150828015614674578160200160208202803683370190505b50905060005b828110156148055760006001600160a01b03166120026001600160a01b03166386d54506600184815481106146ab57fe5b60009182526020909120600491820201546040516001600160e01b031960e085901b1681526146e6926001600160a01b0390921691016185b8565b60206040518083038186803b1580156146fe57600080fd5b505afa158015614712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147369190618228565b6001600160a01b03161461479857600182828151811061475257fe5b602002602001019060ff16908160ff16815250506001818154811061477357fe5b906000526020600020906004020160030154600014614793578360010193505b6147fd565b67016345785d8a0000600182815481106147ae57fe5b906000526020600020906004020160030154106147d0578460010194506147fd565b600181815481106147dd57fe5b9060005260206000209060040201600301546000146147fd578360010193505b60010161467a565b50606084604051908082528060200260200182016040528015614832578160200160208202803683370190505b509050606085604051908082528060200260200182016040528015614861578160200160208202803683370190505b509050606086604051908082528060200260200182016040528015614890578160200160208202803683370190505b5090506060876040519080825280602002602001820160405280156148bf578160200160208202803683370190505b50905060006060886040519080825280602002602001820160405280156148f0578160200160208202803683370190505b50905060608960405190808252806020026020018201604052801561491f578160200160208202803683370190505b50905060009a506000995060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561496757600080fd5b505afa15801561497b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499f9190618463565b905067016345785d8a00008111156149eb576000805160206195678339815191526040516149cc906190c7565b60405180910390a160689e505050505050505050505050505050611e0c565b60005b8a811015614d7f57898181518110614a0257fe5b602002602001015160ff1660011415614af85760018181548110614a2257fe5b906000526020600020906004020160030154600014614af35760018181548110614a4857fe5b600091825260209091206004909102015484516001600160a01b039091169085908e908110614a7357fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110614aa057fe5b906000526020600020906004020160030154838d81518110614abe57fe5b60200260200101818152505060018a8d81518110614ad857fe5b602002602001019060ff16908160ff16815250508b6001019b505b614d77565b67016345785d8a000060018281548110614b0e57fe5b90600052602060002090600402016003015410614c935760018181548110614b3257fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898e81518110614b6357fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be40060018381548110614b9857fe5b90600052602060002090600402016003015481614bb157fe5b0660018381548110614bbf57fe5b906000526020600020906004020160030154039050614be783826165bc90919063ffffffff16565b898f81518110614bf357fe5b60200260200101818152505060018281548110614c0c57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878f81518110614c3d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888f81518110614c6a57fe5b6020908102919091010152614c85868263ffffffff6165fe16565b95508d6001019d5050614d77565b60018181548110614ca057fe5b906000526020600020906004020160030154600014614d775760018181548110614cc657fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848d81518110614cf757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110614d2457fe5b906000526020600020906004020160030154838d81518110614d4257fe5b60200260200101818152505060008a8d81518110614d5c57fe5b602002602001019060ff16908160ff16815250508b6001019b505b6001016149ee565b5060008415614ff5576002546040516303702b2960e51b815261100491636e056520918891614db9918e918e918d914201906004016186e9565b6020604051808303818588803b158015614dd257600080fd5b505af193505050508015614e03575060408051601f3d908101601f19168201909252614e0091810190618390565b60015b614f7a576040516000815260443d1015614e1f57506000614eba565b60046000803e60005160e01c6308c379a08114614e40576000915050614eba565b60043d036004833e81513d60248201116001600160401b0382111715614e6b57600092505050614eba565b80830180516001600160401b03811115614e8c576000945050505050614eba565b8060208301013d8601811115614eaa57600095505050505050614eba565b601f01601f191660405250925050505b80614ec55750614f07565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051614ef9919061876e565b60405180910390a250614f75565b3d808015614f31576040519150601f19603f3d011682016040523d82523d6000602084013e614f36565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051614f6b919061876e565b60405180910390a2505b614ff5565b8015614fbc577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051614faf919061947a565b60405180910390a1614ff3565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051614fea90618830565b60405180910390a25b505b80156151ab5760005b87518110156151a957600088828151811061501557fe5b6020026020010151905060006001828154811061502e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc918590811061505f57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f193505050509050801561511b57600182815481106150a057fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d91859081106150ef57fe5b90600052602060002090600402016003015460405161510e919061947a565b60405180910390a261519f565b6001828154811061512857fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d918590811061517757fe5b906000526020600020906004020160030154604051615196919061947a565b60405180910390a25b5050600101614ffe565b505b8351156153a15760005b845181101561539f578a81815181106151ca57fe5b602002602001015160ff1660011415615269576120026001600160a01b031663092193ab8583815181106151fa57fe5b602002602001015187848151811061520e57fe5b60200260200101516040518363ffffffff1660e01b815260040161523291906185b8565b6000604051808303818588803b15801561524b57600080fd5b505af115801561525f573d6000803e3d6000fd5b5050505050615397565b600085828151811061527757fe5b60200260200101516001600160a01b03166108fc86848151811061529757fe5b60200260200101519081150290604051600060405180830381858888f193505050509050801561532d578582815181106152cd57fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d86848151811061530b57fe5b6020026020010151604051615320919061947a565b60405180910390a2615395565b85828151811061533957fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d86848151811061537757fe5b602002602001015160405161538c919061947a565b60405180910390a25b505b6001016151b5565b505b5050505050505050505050505060005b60015481101561540e57600181815481106153c857fe5b906000526020600020906004020160030154600014615406576000600182815481106153f057fe5b9060005260206000209060040201600301819055505b6001016153b1565b50471561547c577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d47604051615444919061947a565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561547a573d6000803e3d6000fd5b505b60006003819055600555815115615497576154978282615dcd565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156154d457600080fd5b505af11580156154e8573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b6000806001838154811061553057fe5b9060005260206000209060040201600301549050600060018080549050039050600161555a61333f565b511161558f5760006001858154811061556f57fe5b906000526020600020906004020160030181905550600092505050611e0c565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70836040516155c8919061947a565b60405180910390a26001600160a01b038516600090815260046020526040812055835b600154600019018110156157b5576001816001018154811061560957fe5b90600052602060002090600402016001828154811061562457fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106156e557fe5b9060005260206000209060160201600b828154811061570057fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff1990921691909117905560028084018054615757938386019390821615610100026000190190911604617f4b565b5061576a60038281019084016013617fc0565b5090505080600101600460006001848154811061578357fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016155eb565b5060018054806157c157fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061581457fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906158466002830182617ee7565b615854600383016000617fea565b50509055600081838161586357fe5b04905080156158d75760015460005b818110156158d4576158ab836001838154811061588b57fe5b9060005260206000209060040201600301546165fe90919063ffffffff16565b600182815481106158b857fe5b6000918252602090912060036004909202010155600101615872565b50505b50600195945050505050565b6060806000808080806158f4613454565b6001549091505b8015615b2657600181039250600b838154811061591457fe5b600091825260209091206001601690920201015460ff1661593457615b1d565b6001838154811061594157fe5b600091825260208220600490910201546001600160a01b0316955061596b90869085908590613e6c565b93508361597757615b1d565b60405163436aa28360e11b81526000908190612002906386d54506906159a1908a906004016185b8565b60206040518083038186803b1580156159b957600080fd5b505afa1580156159cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159f19190618228565b90506001600160a01b03811615615a7a576040516302ceee9160e11b81526120029063059ddd2290615a279084906004016185b8565b60206040518083038186803b158015615a3f57600080fd5b505afa158015615a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a779190618228565b91505b60005b8c51811015615b1957876001600160a01b03168d8281518110615a9c57fe5b6020026020010151600001516001600160a01b03161480615ae55750826001600160a01b03168d8281518110615ace57fe5b6020026020010151600001516001600160a01b0316145b15615b115760018d8281518110615af857fe5b6020908102919091010151901515608090910152615b19565b600101615a7d565b5050505b600019016158fb565b5060005b8951811015615b9357898181518110615b3f57fe5b60200260200101516080015180615b7f575060006001600160a01b03168a8281518110615b6857fe5b6020026020010151600001516001600160a01b0316145b15615b8b578560010195505b600101615b2a565b5088518510615c7b5760408051600180825281830190925290816020015b615bb9617eb2565b815260200190600190039081615bb1575050604080516001808252818301909252919850602082015b6060815260200190600190039081615be257905050955088600081518110615c0657fe5b602002602001015187600081518110615c1b57fe5b602002602001018190525087600081518110615c3357fe5b602002602001015186600081518110615c4857fe5b6020026020010181905250600087600081518110615c6257fe5b6020908102919091010151901515608090910152615dc0565b84895103604051908082528060200260200182016040528015615cb857816020015b615ca5617eb2565b815260200190600190039081615c9d5790505b50965084895103604051908082528060200260200182016040528015615cf257816020015b6060815260200190600190039081615cdd5790505b5095506000915060005b8951811015615dbe57898181518110615d1157fe5b602002602001015160800151158015615d54575060006001600160a01b03168a8281518110615d3c57fe5b6020026020010151600001516001600160a01b031614155b15615db657898181518110615d6557fe5b6020026020010151888481518110615d7957fe5b6020026020010181905250888181518110615d9057fe5b6020026020010151878481518110615da457fe5b60200260200101819052508260010192505b600101615cfc565b505b50505050505b9250929050565b600154825160005b82811015615eea576001615de7617eb2565b60018381548110615df457fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b84811015615ebe57878181518110615e8457fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b03161415615eb65760009250615ebe565b600101615e70565b508115615ee05780516001600160a01b03166000908152600460205260408120555b5050600101615dd5565b5080821115615fa957805b82811015615fa7576001805480615f0857fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b805480615f5b57fe5b60008281526020812060166000199093019283020181815560018101805460ff1916905590615f8d6002830182617ee7565b615f9b600383016000617fea565b50509055600101615ef5565b505b6000818310615fb85781615fba565b825b905060005b8181101561635e5761606c868281518110615fd657fe5b602002602001015160018381548110615feb57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a08201526173f3565b61622057806001016004600088848151811061608457fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106160c057fe5b6020026020010151600182815481106160d557fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a090910151600390910155845185908290811061619057fe5b6020026020010151600b82815481106161a557fe5b906000526020600020906016020160020190805190602001906161c9929190617de7565b506000600b82815481106161d957fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061620a57fe5b6000918252602090912060169091020155616356565b85818151811061622c57fe5b6020026020010151606001516001828154811061624557fe5b906000526020600020906004020160020160146101000a8154816001600160401b0302191690836001600160401b0316021790555061630b85828151811061628957fe5b6020026020010151600b838154811061629e57fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561382f5780601f106138045761010080835404028352916020019161382f565b6163565784818151811061631b57fe5b6020026020010151600b828154811061633057fe5b90600052602060002090601602016002019080519060200190616354929190617de7565b505b600101615fbf565b50828211156165365761636f617db8565b835b838110156165335785818151811061638557fe5b6020026020010151826040018190525060018782815181106163a357fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206195878339815191528101918255858301516000805160206195c78339815191528201805491151560ff19909216919091179055928501518051869492936164d9936000805160206195a783398151915201920190617de7565b5060608201516164ef9060038301906013617e61565b505050806001016004600089848151811061650657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101616371565b50505b61653e61744f565b616546617631565b6000600981905560015493505b838110156165b4576000600b828154811061656a57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061659b57fe5b6000918252602090912060169091020155600101616553565b505050505050565b600061119f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061781f565b60008282018381101561119f5760405162461bcd60e51b8152600401610e729061899b565b60015481516040805182815260208084028201019091526060929190839082801561666257816020015b606081526020019060019003908161664d5790505b50600b549091508314616679579250611d5c915050565b60005b8281101561678857600b60016004600089858151811061669857fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205403815481106166cc57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156167645780601f1061673957610100808354040283529160200191616764565b820191906000526020600020905b81548152906001019060200180831161674757829003601f168201915b505050505082828151811061677557fe5b602090810291909101015260010161667c565b50949350505050565b60005b828110156168de57600082878388016040516020016167b49291906185aa565b6040516020818303038152906040528051906020012060001c816167d457fe5b069050808501828701146168d557600089838801815181106167f257fe5b602002602001015190506060898489018151811061680c57fe5b602002602001015190508a8388018151811061682457fe5b60200260200101518b858a018151811061683a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b8489018151811061686957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061689757fe5b60200260200101518a858a01815181106168ad57fe5b6020026020010181905250808a848901815181106168c757fe5b602002602001018190525050505b50600101616794565b5050505050505050565b600980546001908101909155600b80548390811061690257fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b828154811061693857fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001616993919061858e565b60405160208183030381529060405280519060200120836040516020016169ba919061858e565b6040516020818303038152906040528051906020012014905092915050565b015190565b8151815160009160019181148083146169fa5760009250616a38565b600160208701838101602088015b600284838510011415616a33578051835114616a275760009650600093505b60209283019201616a08565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480616a6b57506000199050611d5c565b600181039050600060018281548110616a8057fe5b9060005260206000209060040201600301549050600060018381548110616aa357fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90616afc90859061947a565b60405180910390a280616b1457829350505050611d5c565b6000818381616b1f57fe5b0490508015616bbb5760005b84811015616b6d57616b44826001838154811061588b57fe5b60018281548110616b5157fe5b6000918252602090912060036004909202010155600101616b2b565b50600180549085015b81811015616bb857616b8f836001838154811061588b57fe5b60018281548110616b9c57fe5b6000918252602090912060036004909202010155600101616b76565b50505b5091949350505050565b600082616bd457506000611e0c565b82820282848281616be157fe5b041461119f5760405162461bcd60e51b8152600401610e7290618f99565b600061119f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061784b565b616c49617ff9565b506040805180820190915281518152602082810190820152919050565b616c6e617f2b565b616c7782617882565b616c8057600080fd5b6000616c8f83602001516178bc565b60208085015160408051808201909152868152920190820152915050919050565b6000616cba617ff9565b505080518051602091820151919092015191011190565b616cd9617ff9565b616ce282616cb0565b616ceb57600080fd5b60208201516000616cfb8261791f565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590616d3457508151602110155b616d3d57600080fd5b6000616d4c83602001516178bc565b90508083600001511015616d725760405162461bcd60e51b8152600401610e729061918e565b82516020808501518301805192849003929183101561678857506020919091036101000a90049392505050565b6060616daa82617882565b616db357600080fd5b6000616dbe83617a00565b9050606081604051908082528060200260200182016040528015616dfc57816020015b616de9617ff9565b815260200190600190039081616de15790505b5090506000616e0e85602001516178bc565b60208601510190506000805b84811015616e6557616e2b8361791f565b9150604051806040016040528083815260200184815250848281518110616e4e57fe5b602090810291909101015291810191600101616e1a565b509195945050505050565b616e78617eb2565b60606000616e84617eb2565b6060616e8e617f2b565b616e9787616c66565b90506000805b616ea683616cb0565b15616f7b5780616ed157616ec1616ebc84616cd1565b617a5c565b6001600160a01b03168552616f73565b8060011415616ef957616ee6616ebc84616cd1565b6001600160a01b03166020860152616f73565b8060021415616f2157616f0e616ebc84616cd1565b6001600160a01b03166040860152616f73565b8060031415616f4d57616f3661419184616cd1565b6001600160401b0316606086015260019150616f73565b8060041415616f6e57616f67616f6284616cd1565b617a76565b9350616f73565b616f7b565b600101616e9d565b50929791965091945092505050565b6060611e0c616f9883617ae6565b617bcc565b6060815160001415616fbe5750604080516000815260208101909152611d5c565b606082600081518110616fcd57fe5b602002602001015190506000600190505b835181101561700e5761700482858381518110616ff757fe5b6020026020010151617c1e565b9150600101616fde565b5061119f617021825160c060ff16617c9b565b82617c1e565b60608060006120026001600160a01b031663c473318f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561706757600080fd5b505afa15801561707b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061709f9190618463565b905080855188510110156170b4575083518651015b6060816040519080825280602002602001820160405280156170f057816020015b6170dd617eb2565b8152602001906001900390816170d55790505b50905060608260405190808252806020026020018201604052801561712957816020015b60608152602001906001900390816171145790505b50905060008060005b8b518310806171415750895182105b801561714c57508581105b156173e1578b518314156171bc5789828151811061716657fe5b602002602001015185828151811061717a57fe5b602002602001018190525088828151811061719157fe5b60200260200101518482815181106171a557fe5b602090810291909101015260019182019101617132565b8951821415617227578b83815181106171d157fe5b60200260200101518582815181106171e557fe5b60200260200101819052508a83815181106171fc57fe5b602002602001015184828151811061721057fe5b602090810291909101015260019283019201617132565b89828151811061723357fe5b6020026020010151606001516001600160401b03168c848151811061725457fe5b6020026020010151606001516001600160401b031611156172d0578b838151811061727b57fe5b602002602001015185828151811061728f57fe5b60200260200101819052508a83815181106172a657fe5b60200260200101518482815181106172ba57fe5b60200260200101819052508260010192506173d9565b8982815181106172dc57fe5b6020026020010151606001516001600160401b03168c84815181106172fd57fe5b6020026020010151606001516001600160401b031610156173795789828151811061732457fe5b602002602001015185828151811061733857fe5b602002602001018190525088828151811061734f57fe5b602002602001015184828151811061736357fe5b60200260200101819052508160010191506173d9565b89828151811061738557fe5b6020026020010151600001516001600160a01b03168c84815181106173a657fe5b6020026020010151600001516001600160a01b031610156173cd578b838151811061727b57fe5b89828151811061716657fe5b600101617132565b50929a91995090975050505050505050565b805182516000916001600160a01b03918216911614801561742d575081602001516001600160a01b031683602001516001600160a01b0316145b801561119f5750506040908101519101516001600160a01b0390811691161490565b6012546013548082111561749a57805b8281101561749857601280548061747257fe5b60019003818190600052602060002001600061748e9190617ee7565b905560010161745f565b505b60008183106174a957816174ab565b825b905060005b818110156175c357617568601282815481106174c857fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156175565780601f1061752b57610100808354040283529160200191617556565b820191906000526020600020905b81548152906001019060200180831161753957829003601f168201915b5050505050601383815481106137a157fe5b6175bb576013818154811061757957fe5b906000526020600020016012828154811061759057fe5b9060005260206000200190805460018160011615610100020316600290046175b9929190617f4b565b505b6001016174b0565b5082821115610e9457825b82811015613d8c576012601382815481106175e557fe5b6000918252602080832084546001818101875595855291909320929091018054617628949390920192909160026101009282161592909202600019011604617f4b565b506001016175ce565b601354600b548082111561767c57805b8281101561767a57601380548061765457fe5b6001900381819060005260206000200160006176709190617ee7565b9055600101617641565b505b600081831061768b578161768d565b825b905060005b818110156177ac5761774a601382815481106176aa57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156177385780601f1061770d57610100808354040283529160200191617738565b820191906000526020600020905b81548152906001019060200180831161771b57829003601f168201915b5050505050600b838154811061629e57fe5b6177a457600b818154811061775b57fe5b90600052602060002090601602016002016013828154811061777957fe5b9060005260206000200190805460018160011615610100020316600290046177a2929190617f4b565b505b600101617692565b5082821115610e9457825b82811015613d8c576013600b82815481106177ce57fe5b60009182526020808320845460018082018755958552919093206016929092029092016002908101805461781695939094019390926000199082161561010002011604617f4b565b506001016177b7565b600081848411156178435760405162461bcd60e51b8152600401610e72919061876e565b505050900390565b6000818361786c5760405162461bcd60e51b8152600401610e72919061876e565b50600083858161787857fe5b0495945050505050565b805160009061789357506000611d5c565b6020820151805160001a9060c08210156178b257600092505050611d5c565b5060019392505050565b8051600090811a60808110156178d6576000915050611d5c565b60b88110806178f1575060c081108015906178f1575060f881105b15617900576001915050611d5c565b60c08110156179145760b519019050611d5c565b60f519019050611d5c565b80516000908190811a608081101561793a57600191506179f9565b60b881101561794f57607e19810191506179f9565b60c08110156179a057600060b78203600186019550806020036101000a86510491506001810182019350508083101561799a5760405162461bcd60e51b8152600401610e7290618e57565b506179f9565b60f88110156179b55760be19810191506179f9565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156179f75760405162461bcd60e51b8152600401610e7290618e57565b505b5092915050565b8051600090617a1157506000611d5c565b60008090506000617a2584602001516178bc565b602085015185519181019250015b80821015617a5357617a448261791f565b82019150826001019250617a33565b50909392505050565b8051600090601514617a6d57600080fd5b611e0c82616d1f565b8051606090617a8457600080fd5b6000617a9383602001516178bc565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015617aca576020820181803683370190505b5090506000816020019050616788848760200151018285617d6d565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416617b2a57506018617b4e565b6fffffffffffffffffffffffffffffffff198416617b4a57506010617b4e565b5060005b6020811015617b8457818181518110617b6357fe5b01602001516001600160f81b03191615617b7c57617b84565b600101617b4e565b60008160200390506060816040519080825280601f01601f191660200182016040528015617bb9576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015617bfe5750607f60f81b82600081518110617bec57fe5b01602001516001600160f81b03191611155b15617c0a575080611d5c565b611e0c617c1c8351608060ff16617c9b565b835b6060806040519050835180825260208201818101602087015b81831015617c4f578051835260209283019201617c37565b50855184518101855292509050808201602086015b81831015617c7c578051835260209283019201617c64565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310617cc55760405162461bcd60e51b8152600401610e7290618b91565b60408051600180825281830190925260609160208201818036833701905050905060378411617d1f5782840160f81b81600081518110617d0157fe5b60200101906001600160f81b031916908160001a9053509050611e0c565b6060617d2a85617ae6565b90508381510160370160f81b82600081518110617d4357fe5b60200101906001600160f81b031916908160001a905350617d648282617c1e565b95945050505050565b80617d7757610e94565b5b60208110617d97578251825260209283019290910190601f1901617d78565b915181516020939093036101000a6000190180199091169216919091179052565b60405180608001604052806000815260200160001515815260200160608152602001617de2618013565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617e2857805160ff1916838001178555617e55565b82800160010185558215617e55579182015b82811115617e55578251825591602001919060010190617e3a565b5061348f929150618032565b8260138101928215617e555791602002820182811115617e55578251825591602001919060010190617e3a565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b50805460018160011615610100020316600290046000825580601f10617f0d5750611f74565b601f016020900490600052602060002090810190611f749190618032565b6040518060400160405280617f3e617ff9565b8152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617f845780548555617e55565b82800160010185558215617e5557600052602060002091601f016020900482015b82811115617e55578254825591600101919060010190617fa5565b8260138101928215617e555791820182811115617e55578254825591600101919060010190617fa5565b50611f74906013810190618032565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b61267b91905b8082111561348f5760008155600101618038565b8035611e0c81619551565b60008083601f840112618068578182fd5b5081356001600160401b0381111561807e578182fd5b6020830191508360208083028501011115615dc657600080fd5b6000601f83818401126180a9578182fd5b82356180bc6180b782619506565b6194e0565b818152925060208084019085810160005b8481101561814e578135880189603f8201126180e857600080fd5b838101356001600160401b0381111561810057600080fd5b618111818901601f191686016194e0565b81815260408c8184860101111561812757600080fd5b828185018884013750600091810186019190915285525092820192908201906001016180cd565b50505050505092915050565b600082601f83011261816a578081fd5b81356181786180b782619506565b81815291506020808301908481018184028601820187101561819957600080fd5b6000805b8581101561814e5782356001600160401b03811681146181bb578283fd5b8552938301939183019160010161819d565b60008083601f8401126181de578182fd5b5081356001600160401b038111156181f4578182fd5b602083019150836020828501011115615dc657600080fd5b60006020828403121561821d578081fd5b813561119f81619551565b600060208284031215618239578081fd5b815161119f81619551565b60008060008060408587031215618259578283fd5b84356001600160401b038082111561826f578485fd5b61827b88838901618057565b90965094506020870135915080821115618293578384fd5b506182a087828801618057565b95989497509550505050565b6000806000606084860312156182c0578283fd5b83356001600160401b03808211156182d6578485fd5b81860187601f8201126182e7578586fd5b803592506182f76180b784619506565b80848252602080830192508084018b82838902870101111561831757898afd5b8994505b868510156183415761832d8c8261804c565b84526001949094019392810192810161831b565b509097508801359350505080821115618358578384fd5b6183648783880161815a565b93506040860135915080821115618379578283fd5b5061838686828701618098565b9150509250925092565b6000602082840312156183a1578081fd5b8151801515811461119f578182fd5b600080602083850312156183c2578182fd5b82356001600160401b038111156183d7578283fd5b6183e3858286016181cd565b90969095509350505050565b60008060008060408587031215618404578384fd5b84356001600160401b038082111561841a578586fd5b618426888389016181cd565b9096509450602087013591508082111561843e578384fd5b506182a0878288016181cd565b60006020828403121561845c578081fd5b5035919050565b600060208284031215618474578081fd5b5051919050565b6000806040838503121561848d578182fd5b505080516020909101519092909150565b6000806000604084860312156184b2578081fd5b833560ff811681146184c2578182fd5b925060208401356001600160401b038111156184dc578182fd5b6184e8868287016181cd565b9497909650939450505050565b6000815180845260208085019450808401835b8381101561852d5781516001600160a01b031687529582019590820190600101618508565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000815180845261857a816020860160208601619525565b601f01601f19169290920160200192915050565b600082516185a0818460208701619525565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6001600160a01b0392909216825260ff16602082015260400190565b60006020825261119f60208301846184f5565b60006040825261868c60408301856184f5565b602083820381850152818551808452828401915082838202850101838801865b838110156186da57601f198784030185526186c8838351618562565b948601949250908501906001016186ac565b50909998505050505050505050565b6000608082526186fc60808301876184f5565b828103602084810191909152865180835287820192820190845b8181101561873257845183529383019391830191600101618716565b5050848103604086015261874681886184f5565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b60006020825261119f6020830184618562565b600060408252618795604083018688618538565b82810360208401526187a8818587618538565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601f908201527f6f6e6c7920736c617368206f72207374616b6548756220636f6e747261637400604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526063908201527f7468652073797374656d52657761726442617365526174696f20706c7573206260408201527f75726e526174696f20616e642073797374656d526577617264416e74694d455660608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252601d908201527f6c656e677468206f66207475726e4c656e677468206d69736d61746368000000604082015260600190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526063908201527f746865206275726e526174696f20706c75732073797374656d5265776172644260408201527f617365526174696f20616e642073797374656d526577617264416e74694d455660608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b6020808252602b908201527f6c656e677468206f662073797374656d526577617264416e74694d455652617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526063908201527f7468652073797374656d526577617264416e74694d4556526174696f20706c7560408201527f73206275726e526174696f20616e642073797374656d5265776172644261736560608201527f526174696f206d757374206265206e6f2067726561746572207468616e20313060808201526203030360ec1b60a082015260c00190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252602f908201527f746865207475726e4c656e6774682073686f756c6420626520696e205b332c3960408201526e5d206f7220657175616c20746f203160881b606082015260800190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526028908201527f6c656e677468206f662073797374656d52657761726442617365526174696f206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206d757374206265207374616b6548756200604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152617d646060830184618562565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152617d64604083018486618538565b6040518181016001600160401b03811182821017156194fe57600080fd5b604052919050565b60006001600160401b0382111561951b578081fd5b5060209081020190565b60005b83811015619540578181015183820152602001619528565b83811115613d8c5750506000910152565b6001600160a01b0381168114611f7457600080fdfe70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaf87680f873f871949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d79164b085e6972fc98cd3c81d64d40e325acfed44365b97a7567a27939c14dbc7512ddcf54cb1284eb637cfa308ae4e00cb5588a164736f6c6343000604000a \ No newline at end of file diff --git a/core/systemcontracts/bohr/types.go b/core/systemcontracts/bohr/types.go new file mode 100644 index 0000000000..7c859194a0 --- /dev/null +++ b/core/systemcontracts/bohr/types.go @@ -0,0 +1,27 @@ +package bohr + +import _ "embed" + +// contract codes for Mainnet upgrade +var ( + //go:embed mainnet/ValidatorContract + MainnetValidatorContract string + //go:embed mainnet/StakeHubContract + MainnetStakeHubContract string +) + +// contract codes for Chapel upgrade +var ( + //go:embed chapel/ValidatorContract + ChapelValidatorContract string + //go:embed chapel/StakeHubContract + ChapelStakeHubContract string +) + +// contract codes for Rialto upgrade +var ( + //go:embed rialto/ValidatorContract + RialtoValidatorContract string + //go:embed rialto/StakeHubContract + RialtoStakeHubContract string +) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index 341fe7e512..83a2aa491a 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -4,10 +4,11 @@ import ( "encoding/hex" "fmt" "math/big" + "reflect" "strings" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/systemcontracts/bohr" "github.com/ethereum/go-ethereum/core/systemcontracts/bruno" "github.com/ethereum/go-ethereum/core/systemcontracts/euler" "github.com/ethereum/go-ethereum/core/systemcontracts/feynman" @@ -22,6 +23,7 @@ import ( "github.com/ethereum/go-ethereum/core/systemcontracts/planck" "github.com/ethereum/go-ethereum/core/systemcontracts/plato" "github.com/ethereum/go-ethereum/core/systemcontracts/ramanujan" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" ) @@ -39,7 +41,7 @@ type Upgrade struct { Configs []*UpgradeConfig } -type upgradeHook func(blockNumber *big.Int, contractAddr common.Address, statedb *state.StateDB) error +type upgradeHook func(blockNumber *big.Int, contractAddr common.Address, statedb vm.StateDB) error const ( mainNet = "Mainnet" @@ -78,6 +80,8 @@ var ( feynmanFixUpgrade = make(map[string]*Upgrade) haberFixUpgrade = make(map[string]*Upgrade) + + bohrUpgrade = make(map[string]*Upgrade) ) func init() { @@ -736,12 +740,61 @@ func init() { }, }, } + + bohrUpgrade[mainNet] = &Upgrade{ + UpgradeName: "bohr", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/398c9364aad5261c1ecd90ac3ab2df89b65c45e3", + Code: bohr.MainnetValidatorContract, + }, + { + ContractAddr: common.HexToAddress(StakeHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/398c9364aad5261c1ecd90ac3ab2df89b65c45e3", + Code: bohr.MainnetStakeHubContract, + }, + }, + } + + bohrUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "bohr", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/398c9364aad5261c1ecd90ac3ab2df89b65c45e3", + Code: bohr.ChapelValidatorContract, + }, + { + ContractAddr: common.HexToAddress(StakeHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/398c9364aad5261c1ecd90ac3ab2df89b65c45e3", + Code: bohr.ChapelStakeHubContract, + }, + }, + } + + bohrUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "bohr", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/398c9364aad5261c1ecd90ac3ab2df89b65c45e3", + Code: bohr.RialtoValidatorContract, + }, + { + ContractAddr: common.HexToAddress(StakeHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/398c9364aad5261c1ecd90ac3ab2df89b65c45e3", + Code: bohr.RialtoStakeHubContract, + }, + }, + } } -func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, lastBlockTime uint64, blockTime uint64, statedb *state.StateDB) { - if config == nil || blockNumber == nil || statedb == nil { +func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, lastBlockTime uint64, blockTime uint64, statedb vm.StateDB) { + if config == nil || blockNumber == nil || statedb == nil || reflect.ValueOf(statedb).IsNil() { return } + var network string switch GenesisHash { /* Add mainnet genesis hash */ @@ -816,12 +869,16 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I applySystemContractUpgrade(haberFixUpgrade[network], blockNumber, statedb, logger) } + if config.IsOnBohr(blockNumber, lastBlockTime, blockTime) { + applySystemContractUpgrade(bohrUpgrade[network], blockNumber, statedb, logger) + } + /* apply other upgrades */ } -func applySystemContractUpgrade(upgrade *Upgrade, blockNumber *big.Int, statedb *state.StateDB, logger log.Logger) { +func applySystemContractUpgrade(upgrade *Upgrade, blockNumber *big.Int, statedb vm.StateDB, logger log.Logger) { if upgrade == nil { logger.Info("Empty upgrade config", "height", blockNumber.String()) return diff --git a/core/systemcontracts/upgrade_test.go b/core/systemcontracts/upgrade_test.go index 1d8270fd94..3f88d7687b 100644 --- a/core/systemcontracts/upgrade_test.go +++ b/core/systemcontracts/upgrade_test.go @@ -2,9 +2,13 @@ package systemcontracts import ( "crypto/sha256" + "math/big" "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" ) @@ -39,3 +43,31 @@ func TestAllCodesHash(t *testing.T) { allCodeHash := sha256.Sum256(allCodes) require.Equal(t, allCodeHash[:], common.Hex2Bytes("833cc0fc87c46ad8a223e44ccfdc16a51a7e7383525136441bd0c730f06023df")) } + +func TestUpgradeBuildInSystemContractNilInterface(t *testing.T) { + var ( + config = params.BSCChainConfig + blockNumber = big.NewInt(37959559) + lastBlockTime uint64 = 1713419337 + blockTime uint64 = 1713419340 + statedb vm.StateDB + ) + + GenesisHash = params.BSCGenesisHash + + UpgradeBuildInSystemContract(config, blockNumber, lastBlockTime, blockTime, statedb) +} + +func TestUpgradeBuildInSystemContractNilValue(t *testing.T) { + var ( + config = params.BSCChainConfig + blockNumber = big.NewInt(37959559) + lastBlockTime uint64 = 1713419337 + blockTime uint64 = 1713419340 + statedb vm.StateDB = (*state.StateDB)(nil) + ) + + GenesisHash = params.BSCGenesisHash + + UpgradeBuildInSystemContract(config, blockNumber, lastBlockTime, blockTime, statedb) +} diff --git a/core/types/blob_sidecar.go b/core/types/blob_sidecar.go index d4f63602d0..a97d1ed406 100644 --- a/core/types/blob_sidecar.go +++ b/core/types/blob_sidecar.go @@ -2,10 +2,12 @@ package types import ( "bytes" + "encoding/json" "errors" "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/rlp" ) @@ -53,3 +55,40 @@ func (s *BlobSidecar) SanityCheck(blockNumber *big.Int, blockHash common.Hash) e } return nil } + +func (s *BlobSidecar) MarshalJSON() ([]byte, error) { + fields := map[string]interface{}{ + "blockHash": s.BlockHash, + "blockNumber": hexutil.EncodeUint64(s.BlockNumber.Uint64()), + "txHash": s.TxHash, + "txIndex": hexutil.EncodeUint64(s.TxIndex), + } + fields["blobSidecar"] = s.BlobTxSidecar + return json.Marshal(fields) +} + +func (s *BlobSidecar) UnmarshalJSON(input []byte) error { + type blobSidecar struct { + BlobSidecar BlobTxSidecar `json:"blobSidecar"` + BlockNumber *hexutil.Big `json:"blockNumber"` + BlockHash common.Hash `json:"blockHash"` + TxIndex *hexutil.Big `json:"txIndex"` + TxHash common.Hash `json:"txHash"` + } + var blob blobSidecar + if err := json.Unmarshal(input, &blob); err != nil { + return err + } + s.BlobTxSidecar = blob.BlobSidecar + if blob.BlockNumber == nil { + return errors.New("missing required field 'blockNumber' for BlobSidecar") + } + s.BlockNumber = blob.BlockNumber.ToInt() + s.BlockHash = blob.BlockHash + if blob.TxIndex == nil { + return errors.New("missing required field 'txIndex' for BlobSidecar") + } + s.TxIndex = blob.TxIndex.ToInt().Uint64() + s.TxHash = blob.TxHash + return nil +} diff --git a/core/types/block.go b/core/types/block.go index 422363b32f..c7619f3f76 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -673,10 +673,7 @@ type DiffAccountsInBlock struct { Transactions []DiffAccountsInTx } -var ( - extraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity - extraSeal = 65 // Fixed number of extra-data suffix bytes reserved for signer seal -) +var extraSeal = 65 // Fixed number of extra-data suffix bytes reserved for signer seal // SealHash returns the hash of a block prior to it being sealed. func SealHash(header *Header, chainId *big.Int) (hash common.Hash) { @@ -687,48 +684,51 @@ func SealHash(header *Header, chainId *big.Int) (hash common.Hash) { } func EncodeSigHeader(w io.Writer, header *Header, chainId *big.Int) { - err := rlp.Encode(w, []interface{}{ - chainId, - header.ParentHash, - header.UncleHash, - header.Coinbase, - header.Root, - header.TxHash, - header.ReceiptHash, - header.Bloom, - header.Difficulty, - header.Number, - header.GasLimit, - header.GasUsed, - header.Time, - header.Extra[:len(header.Extra)-extraSeal], // this will panic if extra is too short, should check before calling encodeSigHeader - header.MixDigest, - header.Nonce, - }) - if err != nil { - panic("can't encode: " + err.Error()) + var err error + if header.ParentBeaconRoot != nil && *header.ParentBeaconRoot == (common.Hash{}) { + err = rlp.Encode(w, []interface{}{ + chainId, + header.ParentHash, + header.UncleHash, + header.Coinbase, + header.Root, + header.TxHash, + header.ReceiptHash, + header.Bloom, + header.Difficulty, + header.Number, + header.GasLimit, + header.GasUsed, + header.Time, + header.Extra[:len(header.Extra)-extraSeal], // this will panic if extra is too short, should check before calling encodeSigHeader + header.MixDigest, + header.Nonce, + header.BaseFee, + header.WithdrawalsHash, + header.BlobGasUsed, + header.ExcessBlobGas, + header.ParentBeaconRoot, + }) + } else { + err = rlp.Encode(w, []interface{}{ + chainId, + header.ParentHash, + header.UncleHash, + header.Coinbase, + header.Root, + header.TxHash, + header.ReceiptHash, + header.Bloom, + header.Difficulty, + header.Number, + header.GasLimit, + header.GasUsed, + header.Time, + header.Extra[:len(header.Extra)-extraSeal], // this will panic if extra is too short, should check before calling encodeSigHeader + header.MixDigest, + header.Nonce, + }) } -} - -func EncodeSigHeaderWithoutVoteAttestation(w io.Writer, header *Header, chainId *big.Int) { - err := rlp.Encode(w, []interface{}{ - chainId, - header.ParentHash, - header.UncleHash, - header.Coinbase, - header.Root, - header.TxHash, - header.ReceiptHash, - header.Bloom, - header.Difficulty, - header.Number, - header.GasLimit, - header.GasUsed, - header.Time, - header.Extra[:extraVanity], // this will panic if extra is too short, should check before calling encodeSigHeaderWithoutVoteAttestation - header.MixDigest, - header.Nonce, - }) if err != nil { panic("can't encode: " + err.Error()) } diff --git a/core/vote/vote_manager.go b/core/vote/vote_manager.go index a7eaf10b09..891785482b 100644 --- a/core/vote/vote_manager.go +++ b/core/vote/vote_manager.go @@ -3,10 +3,13 @@ package vote import ( "bytes" "fmt" + "math/big" "sync" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/parlia" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/downloader" @@ -17,7 +20,13 @@ import ( const blocksNumberSinceMining = 5 // the number of blocks need to wait before voting, counting from the validator begin to mine +var diffInTurn = big.NewInt(2) // Block difficulty for in-turn signatures var votesManagerCounter = metrics.NewRegisteredCounter("votesManager/local", nil) +var notJustified = metrics.NewRegisteredCounter("votesManager/notJustified", nil) +var inTurnJustified = metrics.NewRegisteredCounter("votesManager/inTurnJustified", nil) +var notInTurnJustified = metrics.NewRegisteredCounter("votesManager/notInTurnJustified", nil) +var continuousJustified = metrics.NewRegisteredCounter("votesManager/continuousJustified", nil) +var notContinuousJustified = metrics.NewRegisteredCounter("votesManager/notContinuousJustified", nil) // Backend wraps all methods required for voting. type Backend interface { @@ -31,8 +40,8 @@ type VoteManager struct { chain *core.BlockChain - chainHeadCh chan core.ChainHeadEvent - chainHeadSub event.Subscription + highestVerifiedBlockCh chan core.HighestVerifiedBlockEvent + highestVerifiedBlockSub event.Subscription // used for backup validators to sync votes from corresponding mining validator syncVoteCh chan core.NewVoteEvent @@ -47,12 +56,12 @@ type VoteManager struct { func NewVoteManager(eth Backend, chain *core.BlockChain, pool *VotePool, journalPath, blsPasswordPath, blsWalletPath string, engine consensus.PoSA) (*VoteManager, error) { voteManager := &VoteManager{ - eth: eth, - chain: chain, - chainHeadCh: make(chan core.ChainHeadEvent, chainHeadChanSize), - syncVoteCh: make(chan core.NewVoteEvent, voteBufferForPut), - pool: pool, - engine: engine, + eth: eth, + chain: chain, + highestVerifiedBlockCh: make(chan core.HighestVerifiedBlockEvent, highestVerifiedBlockChanSize), + syncVoteCh: make(chan core.NewVoteEvent, voteBufferForPut), + pool: pool, + engine: engine, } // Create voteSigner. @@ -72,7 +81,7 @@ func NewVoteManager(eth Backend, chain *core.BlockChain, pool *VotePool, journal voteManager.journal = voteJournal // Subscribe to chain head event. - voteManager.chainHeadSub = voteManager.chain.SubscribeChainHeadEvent(voteManager.chainHeadCh) + voteManager.highestVerifiedBlockSub = voteManager.chain.SubscribeHighestVerifiedHeaderEvent(voteManager.highestVerifiedBlockCh) voteManager.syncVoteSub = voteManager.pool.SubscribeNewVoteEvent(voteManager.syncVoteCh) go voteManager.loop() @@ -82,7 +91,7 @@ func NewVoteManager(eth Backend, chain *core.BlockChain, pool *VotePool, journal func (voteManager *VoteManager) loop() { log.Debug("vote manager routine loop started") - defer voteManager.chainHeadSub.Unsubscribe() + defer voteManager.highestVerifiedBlockSub.Unsubscribe() defer voteManager.syncVoteSub.Unsubscribe() events := voteManager.eth.EventMux().Subscribe(downloader.StartEvent{}, downloader.DoneEvent{}, downloader.FailedEvent{}) @@ -117,7 +126,7 @@ func (voteManager *VoteManager) loop() { log.Debug("downloader is in DoneEvent mode, set the startVote flag to true") startVote = true } - case cHead := <-voteManager.chainHeadCh: + case cHead := <-voteManager.highestVerifiedBlockCh: if !startVote { log.Debug("startVote flag is false, continue") continue @@ -133,18 +142,27 @@ func (voteManager *VoteManager) loop() { continue } - if cHead.Block == nil { - log.Debug("cHead.Block is nil, continue") + if cHead.Header == nil { + log.Debug("cHead.Header is nil, continue") continue } - curHead := cHead.Block.Header() + curHead := cHead.Header + if p, ok := voteManager.engine.(*parlia.Parlia); ok { + nextBlockMinedTime := time.Unix(int64((curHead.Time + p.Period())), 0) + timeForBroadcast := 50 * time.Millisecond // enough to broadcast a vote + if time.Now().Add(timeForBroadcast).After(nextBlockMinedTime) { + log.Warn("too late to vote", "Head.Time(Second)", curHead.Time, "Now(Millisecond)", time.Now().UnixMilli()) + continue + } + } + // Check if cur validator is within the validatorSet at curHead if !voteManager.engine.IsActiveValidatorAt(voteManager.chain, curHead, func(bLSPublicKey *types.BLSPublicKey) bool { return bytes.Equal(voteManager.signer.PubKey[:], bLSPublicKey[:]) }) { - log.Debug("cur validator is not within the validatorSet at curHead") + log.Debug("local validator with voteKey is not within the validatorSet at curHead") continue } @@ -191,6 +209,36 @@ func (voteManager *VoteManager) loop() { voteManager.pool.PutVote(voteMessage) votesManagerCounter.Inc(1) } + + // check the latest justified block, which indicating the stability of the network + curJustifiedNumber, _, err := voteManager.engine.GetJustifiedNumberAndHash(voteManager.chain, []*types.Header{curHead}) + if err == nil && curJustifiedNumber != 0 { + if curJustifiedNumber+1 != curHead.Number.Uint64() { + log.Debug("not justified", "blockNumber", curHead.Number.Uint64()-1) + notJustified.Inc(1) + } else { + parent := voteManager.chain.GetHeaderByHash(curHead.ParentHash) + if parent != nil { + if parent.Difficulty.Cmp(diffInTurn) == 0 { + inTurnJustified.Inc(1) + } else { + log.Debug("not in turn block justified", "blockNumber", parent.Number.Int64(), "blockHash", parent.Hash()) + notInTurnJustified.Inc(1) + } + + lastJustifiedNumber, _, err := voteManager.engine.GetJustifiedNumberAndHash(voteManager.chain, []*types.Header{parent}) + if err == nil { + if lastJustifiedNumber == 0 || lastJustifiedNumber+1 == curJustifiedNumber { + continuousJustified.Inc(1) + } else { + log.Debug("not continuous block justified", "lastJustified", lastJustifiedNumber, "curJustified", curJustifiedNumber) + notContinuousJustified.Inc(1) + } + } + } + } + } + case event := <-voteManager.syncVoteCh: voteMessage := event.Vote if voteManager.eth.IsMining() || !bytes.Equal(voteManager.signer.PubKey[:], voteMessage.VoteAddress[:]) { @@ -206,7 +254,7 @@ func (voteManager *VoteManager) loop() { case <-voteManager.syncVoteSub.Err(): log.Debug("voteManager subscribed votes failed") return - case <-voteManager.chainHeadSub.Err(): + case <-voteManager.highestVerifiedBlockSub.Err(): log.Debug("voteManager subscribed chainHead failed") return } diff --git a/core/vote/vote_pool.go b/core/vote/vote_pool.go index defa92674b..3b64e2cea3 100644 --- a/core/vote/vote_pool.go +++ b/core/vote/vote_pool.go @@ -24,7 +24,7 @@ const ( lowerLimitOfVoteBlockNumber = 256 upperLimitOfVoteBlockNumber = 11 // refer to fetcher.maxUncleDist - chainHeadChanSize = 10 // chainHeadChanSize is the size of channel listening to ChainHeadEvent. + highestVerifiedBlockChanSize = 10 // highestVerifiedBlockChanSize is the size of channel listening to HighestVerifiedBlockEvent. ) var ( @@ -57,8 +57,8 @@ type VotePool struct { curVotesPq *votesPriorityQueue futureVotesPq *votesPriorityQueue - chainHeadCh chan core.ChainHeadEvent - chainHeadSub event.Subscription + highestVerifiedBlockCh chan core.HighestVerifiedBlockEvent + highestVerifiedBlockSub event.Subscription votesCh chan *types.VoteEnvelope @@ -69,19 +69,19 @@ type votesPriorityQueue []*types.VoteData func NewVotePool(chain *core.BlockChain, engine consensus.PoSA) *VotePool { votePool := &VotePool{ - chain: chain, - receivedVotes: mapset.NewSet[common.Hash](), - curVotes: make(map[common.Hash]*VoteBox), - futureVotes: make(map[common.Hash]*VoteBox), - curVotesPq: &votesPriorityQueue{}, - futureVotesPq: &votesPriorityQueue{}, - chainHeadCh: make(chan core.ChainHeadEvent, chainHeadChanSize), - votesCh: make(chan *types.VoteEnvelope, voteBufferForPut), - engine: engine, + chain: chain, + receivedVotes: mapset.NewSet[common.Hash](), + curVotes: make(map[common.Hash]*VoteBox), + futureVotes: make(map[common.Hash]*VoteBox), + curVotesPq: &votesPriorityQueue{}, + futureVotesPq: &votesPriorityQueue{}, + highestVerifiedBlockCh: make(chan core.HighestVerifiedBlockEvent, highestVerifiedBlockChanSize), + votesCh: make(chan *types.VoteEnvelope, voteBufferForPut), + engine: engine, } // Subscribe events from blockchain and start the main event loop. - votePool.chainHeadSub = votePool.chain.SubscribeChainHeadEvent(votePool.chainHeadCh) + votePool.highestVerifiedBlockSub = votePool.chain.SubscribeHighestVerifiedHeaderEvent(votePool.highestVerifiedBlockCh) go votePool.loop() return votePool @@ -89,18 +89,18 @@ func NewVotePool(chain *core.BlockChain, engine consensus.PoSA) *VotePool { // loop is the vote pool's main even loop, waiting for and reacting to outside blockchain events and votes channel event. func (pool *VotePool) loop() { - defer pool.chainHeadSub.Unsubscribe() + defer pool.highestVerifiedBlockSub.Unsubscribe() for { select { // Handle ChainHeadEvent. - case ev := <-pool.chainHeadCh: - if ev.Block != nil { - latestBlockNumber := ev.Block.NumberU64() + case ev := <-pool.highestVerifiedBlockCh: + if ev.Header != nil { + latestBlockNumber := ev.Header.Number.Uint64() pool.prune(latestBlockNumber) - pool.transferVotesFromFutureToCur(ev.Block.Header()) + pool.transferVotesFromFutureToCur(ev.Header) } - case <-pool.chainHeadSub.Err(): + case <-pool.highestVerifiedBlockSub.Err(): return // Handle votes channel and put the vote into vote pool. @@ -135,7 +135,7 @@ func (pool *VotePool) putIntoVotePool(vote *types.VoteEnvelope) bool { var votesPq *votesPriorityQueue isFutureVote := false - voteBlock := pool.chain.GetHeaderByHash(targetHash) + voteBlock := pool.chain.GetVerifiedBlockByHash(targetHash) if voteBlock == nil { votes = pool.futureVotes votesPq = pool.futureVotesPq @@ -226,7 +226,7 @@ func (pool *VotePool) transferVotesFromFutureToCur(latestBlockHeader *types.Head futurePqBuffer := make([]*types.VoteData, 0) for futurePq.Len() > 0 && futurePq.Peek().TargetNumber <= latestBlockNumber { blockHash := futurePq.Peek().TargetHash - header := pool.chain.GetHeaderByHash(blockHash) + header := pool.chain.GetVerifiedBlockByHash(blockHash) if header == nil { // Put into pq buffer used for later put again into futurePq futurePqBuffer = append(futurePqBuffer, heap.Pop(futurePq).(*types.VoteData)) diff --git a/eth/api_backend.go b/eth/api_backend.go index 671664d4a0..b7a3bd07fb 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/parlia" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/bloombits" "github.com/ethereum/go-ethereum/core/rawdb" @@ -416,6 +417,16 @@ func (b *EthAPIBackend) Engine() consensus.Engine { return b.eth.engine } +func (b *EthAPIBackend) CurrentValidators() ([]common.Address, error) { + if p, ok := b.eth.engine.(*parlia.Parlia); ok { + service := p.APIs(b.Chain())[0].Service + currentHead := rpc.LatestBlockNumber + return service.(*parlia.API).GetValidators(¤tHead) + } + + return []common.Address{}, errors.New("not supported") +} + func (b *EthAPIBackend) CurrentHeader() *types.Header { return b.eth.blockchain.CurrentHeader() } diff --git a/eth/backend.go b/eth/backend.go index 67dedc21d6..7679d367bb 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -183,13 +183,15 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { } // Override the chain config with provided settings. var overrides core.ChainOverrides - if config.OverrideCancun != nil { - chainConfig.CancunTime = config.OverrideCancun - overrides.OverrideCancun = config.OverrideCancun - } - if config.OverrideHaber != nil { - chainConfig.HaberTime = config.OverrideHaber - overrides.OverrideHaber = config.OverrideHaber + if config.OverridePassedForkTime != nil { + chainConfig.ShanghaiTime = config.OverridePassedForkTime + chainConfig.KeplerTime = config.OverridePassedForkTime + chainConfig.FeynmanTime = config.OverridePassedForkTime + chainConfig.FeynmanFixTime = config.OverridePassedForkTime + chainConfig.CancunTime = config.OverridePassedForkTime + chainConfig.HaberTime = config.OverridePassedForkTime + chainConfig.HaberFixTime = config.OverridePassedForkTime + overrides.OverridePassedForkTime = config.OverridePassedForkTime } if config.OverrideBohr != nil { chainConfig.BohrTime = config.OverrideBohr diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 664f775052..09925d7d66 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -558,8 +558,8 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td, ttd * } else { d.ancientLimit = 0 } - frozen, _ := d.stateDB.Ancients() // Ignore the error here since light client can also hit here. - itemAmountInAncient, _ := d.stateDB.ItemAmountInAncient() + frozen, _ := d.stateDB.BlockStore().Ancients() // Ignore the error here since light client can also hit here. + itemAmountInAncient, _ := d.stateDB.BlockStore().ItemAmountInAncient() // If a part of blockchain data has already been written into active store, // disable the ancient style insertion explicitly. if origin >= frozen && itemAmountInAncient != 0 { @@ -1671,9 +1671,9 @@ func (d *Downloader) reportSnapSyncProgress(force bool) { } // Don't report anything until we have a meaningful progress var ( - headerBytes, _ = d.stateDB.AncientSize(rawdb.ChainFreezerHeaderTable) - bodyBytes, _ = d.stateDB.AncientSize(rawdb.ChainFreezerBodiesTable) - receiptBytes, _ = d.stateDB.AncientSize(rawdb.ChainFreezerReceiptTable) + headerBytes, _ = d.stateDB.BlockStore().AncientSize(rawdb.ChainFreezerHeaderTable) + bodyBytes, _ = d.stateDB.BlockStore().AncientSize(rawdb.ChainFreezerBodiesTable) + receiptBytes, _ = d.stateDB.BlockStore().AncientSize(rawdb.ChainFreezerReceiptTable) ) syncedBytes := common.StorageSize(headerBytes + bodyBytes + receiptBytes) if syncedBytes == 0 { diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 91845579bf..c1f095e853 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -190,11 +190,8 @@ type Config struct { // send-transaction variants. The unit is ether. RPCTxFeeCap float64 - // OverrideCancun (TODO: remove after the fork) - OverrideCancun *uint64 `toml:",omitempty"` - - // OverrideHaber (TODO: remove after the fork) - OverrideHaber *uint64 `toml:",omitempty"` + // OverridePassedForkTime + OverridePassedForkTime *uint64 `toml:",omitempty"` // OverrideBohr (TODO: remove after the fork) OverrideBohr *uint64 `toml:",omitempty"` diff --git a/eth/ethconfig/gen_config.go b/eth/ethconfig/gen_config.go index 9d55cf990f..b7c10d95a8 100644 --- a/eth/ethconfig/gen_config.go +++ b/eth/ethconfig/gen_config.go @@ -71,8 +71,7 @@ func (c Config) MarshalTOML() (interface{}, error) { RPCGasCap uint64 RPCEVMTimeout time.Duration RPCTxFeeCap float64 - OverrideCancun *uint64 `toml:",omitempty"` - OverrideHaber *uint64 `toml:",omitempty"` + OverridePassedForkTime *uint64 `toml:",omitempty"` OverrideBohr *uint64 `toml:",omitempty"` OverrideVerkle *uint64 `toml:",omitempty"` BlobExtraReserve uint64 @@ -132,8 +131,7 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.RPCGasCap = c.RPCGasCap enc.RPCEVMTimeout = c.RPCEVMTimeout enc.RPCTxFeeCap = c.RPCTxFeeCap - enc.OverrideCancun = c.OverrideCancun - enc.OverrideHaber = c.OverrideHaber + enc.OverridePassedForkTime = c.OverridePassedForkTime enc.OverrideBohr = c.OverrideBohr enc.OverrideVerkle = c.OverrideVerkle enc.BlobExtraReserve = c.BlobExtraReserve @@ -197,8 +195,7 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { RPCGasCap *uint64 RPCEVMTimeout *time.Duration RPCTxFeeCap *float64 - OverrideCancun *uint64 `toml:",omitempty"` - OverrideHaber *uint64 `toml:",omitempty"` + OverridePassedForkTime *uint64 `toml:",omitempty"` OverrideBohr *uint64 `toml:",omitempty"` OverrideVerkle *uint64 `toml:",omitempty"` BlobExtraReserve *uint64 @@ -367,11 +364,8 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.RPCTxFeeCap != nil { c.RPCTxFeeCap = *dec.RPCTxFeeCap } - if dec.OverrideCancun != nil { - c.OverrideCancun = dec.OverrideCancun - } - if dec.OverrideHaber != nil { - c.OverrideHaber = dec.OverrideHaber + if dec.OverridePassedForkTime != nil { + c.OverridePassedForkTime = dec.OverridePassedForkTime } if dec.OverrideBohr != nil { c.OverrideBohr = dec.OverrideBohr diff --git a/eth/filters/filter_system_test.go b/eth/filters/filter_system_test.go index c3e465036d..7e35403425 100644 --- a/eth/filters/filter_system_test.go +++ b/eth/filters/filter_system_test.go @@ -436,7 +436,7 @@ func TestInvalidLogFilterCreation(t *testing.T) { } } -// TestLogFilterUninstall tests invalid getLogs requests +// TestInvalidGetLogsRequest tests invalid getLogs requests func TestInvalidGetLogsRequest(t *testing.T) { t.Parallel() diff --git a/eth/protocols/eth/dispatcher.go b/eth/protocols/eth/dispatcher.go index ae98820cd6..146eec3f60 100644 --- a/eth/protocols/eth/dispatcher.go +++ b/eth/protocols/eth/dispatcher.go @@ -136,7 +136,7 @@ func (p *Peer) dispatchRequest(req *Request) error { } } -// dispatchRequest fulfils a pending request and delivers it to the requested +// dispatchResponse fulfils a pending request and delivers it to the requested // sink. func (p *Peer) dispatchResponse(res *Response, metadata func() interface{}) error { resOp := &response{ diff --git a/eth/protocols/snap/sync.go b/eth/protocols/snap/sync.go index 988a632e5a..56d48649dd 100644 --- a/eth/protocols/snap/sync.go +++ b/eth/protocols/snap/sync.go @@ -409,8 +409,8 @@ type SyncPeer interface { // - The peer delivers a stale response after a previous timeout // - The peer delivers a refusal to serve the requested state type Syncer struct { - db ethdb.KeyValueStore // Database to store the trie nodes into (and dedup) - scheme string // Node scheme used in node database + db ethdb.Database // Database to store the trie nodes into (and dedup) + scheme string // Node scheme used in node database root common.Hash // Current state trie root being synced tasks []*accountTask // Current account task set being synced @@ -478,7 +478,7 @@ type Syncer struct { // NewSyncer creates a new snapshot syncer to download the Ethereum state over the // snap protocol. -func NewSyncer(db ethdb.KeyValueStore, scheme string) *Syncer { +func NewSyncer(db ethdb.Database, scheme string) *Syncer { return &Syncer{ db: db, scheme: scheme, @@ -719,11 +719,11 @@ func (s *Syncer) Sync(root common.Hash, cancel chan struct{}) error { // cleanPath is used to remove the dangling nodes in the stackTrie. func (s *Syncer) cleanPath(batch ethdb.Batch, owner common.Hash, path []byte) { - if owner == (common.Hash{}) && rawdb.ExistsAccountTrieNode(s.db, path) { + if owner == (common.Hash{}) && rawdb.ExistsAccountTrieNode(s.db.StateStoreReader(), path) { rawdb.DeleteAccountTrieNode(batch, path) deletionGauge.Inc(1) } - if owner != (common.Hash{}) && rawdb.ExistsStorageTrieNode(s.db, owner, path) { + if owner != (common.Hash{}) && rawdb.ExistsStorageTrieNode(s.db.StateStoreReader(), owner, path) { rawdb.DeleteStorageTrieNode(batch, owner, path) deletionGauge.Inc(1) } @@ -735,6 +735,7 @@ func (s *Syncer) cleanPath(batch ethdb.Batch, owner common.Hash, path []byte) { func (s *Syncer) loadSyncStatus() { var progress SyncProgress + stateDiskDB := s.db.GetStateStore() if status := rawdb.ReadSnapshotSyncStatus(s.db); status != nil { if err := json.Unmarshal(status, &progress); err != nil { log.Error("Failed to decode snap sync status", "err", err) @@ -747,7 +748,7 @@ func (s *Syncer) loadSyncStatus() { task := task // closure for task.genBatch in the stacktrie writer callback task.genBatch = ethdb.HookedBatch{ - Batch: s.db.NewBatch(), + Batch: stateDiskDB.NewBatch(), OnPut: func(key []byte, value []byte) { s.accountBytes += common.StorageSize(len(key) + len(value)) }, @@ -773,7 +774,7 @@ func (s *Syncer) loadSyncStatus() { subtask := subtask // closure for subtask.genBatch in the stacktrie writer callback subtask.genBatch = ethdb.HookedBatch{ - Batch: s.db.NewBatch(), + Batch: stateDiskDB.NewBatch(), OnPut: func(key []byte, value []byte) { s.storageBytes += common.StorageSize(len(key) + len(value)) }, @@ -841,7 +842,7 @@ func (s *Syncer) loadSyncStatus() { last = common.MaxHash } batch := ethdb.HookedBatch{ - Batch: s.db.NewBatch(), + Batch: stateDiskDB.NewBatch(), OnPut: func(key []byte, value []byte) { s.accountBytes += common.StorageSize(len(key) + len(value)) }, @@ -1894,7 +1895,7 @@ func (s *Syncer) processAccountResponse(res *accountResponse) { } // Check if the account is a contract with an unknown storage trie if account.Root != types.EmptyRootHash { - if !rawdb.HasTrieNode(s.db, res.hashes[i], nil, account.Root, s.scheme) { + if !rawdb.HasTrieNode(s.db.StateStoreReader(), res.hashes[i], nil, account.Root, s.scheme) { // If there was a previous large state retrieval in progress, // don't restart it from scratch. This happens if a sync cycle // is interrupted and resumed later. However, *do* update the @@ -1986,12 +1987,25 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { if res.subTask != nil { res.subTask.req = nil } + + var usingMultDatabase bool batch := ethdb.HookedBatch{ - Batch: s.db.NewBatch(), + Batch: s.db.GetStateStore().NewBatch(), OnPut: func(key []byte, value []byte) { s.storageBytes += common.StorageSize(len(key) + len(value)) }, } + var snapBatch ethdb.HookedBatch + if s.db.StateStore() != nil { + usingMultDatabase = true + snapBatch = ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.storageBytes += common.StorageSize(len(key) + len(value)) + }, + } + } + var ( slots int oldStorageBytes = s.storageBytes @@ -2061,7 +2075,7 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { } // Our first task is the one that was just filled by this response. batch := ethdb.HookedBatch{ - Batch: s.db.NewBatch(), + Batch: s.db.GetStateStore().NewBatch(), OnPut: func(key []byte, value []byte) { s.storageBytes += common.StorageSize(len(key) + len(value)) }, @@ -2088,7 +2102,7 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { }) for r.Next() { batch := ethdb.HookedBatch{ - Batch: s.db.NewBatch(), + Batch: s.db.GetStateStore().NewBatch(), OnPut: func(key []byte, value []byte) { s.storageBytes += common.StorageSize(len(key) + len(value)) }, @@ -2184,8 +2198,11 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { // outdated during the sync, but it can be fixed later during the // snapshot generation. for j := 0; j < len(res.hashes[i]); j++ { - rawdb.WriteStorageSnapshot(batch, account, res.hashes[i][j], res.slots[i][j]) - + if usingMultDatabase { + rawdb.WriteStorageSnapshot(snapBatch, account, res.hashes[i][j], res.slots[i][j]) + } else { + rawdb.WriteStorageSnapshot(batch, account, res.hashes[i][j], res.slots[i][j]) + } // If we're storing large contracts, generate the trie nodes // on the fly to not trash the gluing points if i == len(res.hashes)-1 && res.subTask != nil { @@ -2205,7 +2222,7 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { // If the chunk's root is an overflown but full delivery, // clear the heal request. accountHash := res.accounts[len(res.accounts)-1] - if root == res.subTask.root && rawdb.HasStorageTrieNode(s.db, accountHash, nil, root) { + if root == res.subTask.root && rawdb.HasStorageTrieNode(s.db.StateStoreReader(), accountHash, nil, root) { for i, account := range res.mainTask.res.hashes { if account == accountHash { res.mainTask.needHeal[i] = false @@ -2225,6 +2242,11 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { if err := batch.Write(); err != nil { log.Crit("Failed to persist storage slots", "err", err) } + if usingMultDatabase { + if err := snapBatch.Write(); err != nil { + log.Crit("Failed to persist storage slots", "err", err) + } + } s.storageSynced += uint64(slots) log.Debug("Persisted set of storage slots", "accounts", len(res.hashes), "slots", slots, "bytes", s.storageBytes-oldStorageBytes) @@ -2323,12 +2345,25 @@ func (s *Syncer) commitHealer(force bool) { return } batch := s.db.NewBatch() - if err := s.healer.scheduler.Commit(batch); err != nil { + var stateBatch ethdb.Batch + var err error + if s.db.StateStore() != nil { + stateBatch = s.db.StateStore().NewBatch() + err = s.healer.scheduler.Commit(batch, stateBatch) + } else { + err = s.healer.scheduler.Commit(batch, nil) + } + if err != nil { log.Error("Failed to commit healing data", "err", err) } if err := batch.Write(); err != nil { log.Crit("Failed to persist healing data", "err", err) } + if s.db.StateStore() != nil { + if err := stateBatch.Write(); err != nil { + log.Crit("Failed to persist healing data", "err", err) + } + } log.Debug("Persisted set of healing data", "type", "trienodes", "bytes", common.StorageSize(batch.ValueSize())) } diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go index 86ce653b7c..8cf50eb528 100644 --- a/ethclient/ethclient.go +++ b/ethclient/ethclient.go @@ -131,8 +131,8 @@ func (ec *Client) BlockReceipts(ctx context.Context, blockNrOrHash rpc.BlockNumb } // BlobSidecars return the Sidecars of a given block number or hash. -func (ec *Client) BlobSidecars(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) ([]*types.BlobTxSidecar, error) { - var r []*types.BlobTxSidecar +func (ec *Client) BlobSidecars(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) ([]*types.BlobSidecar, error) { + var r []*types.BlobSidecar err := ec.c.CallContext(ctx, &r, "eth_getBlobSidecars", blockNrOrHash.String()) if err == nil && r == nil { return nil, ethereum.NotFound @@ -141,8 +141,8 @@ func (ec *Client) BlobSidecars(ctx context.Context, blockNrOrHash rpc.BlockNumbe } // BlobSidecarByTxHash return a sidecar of a given blob transaction -func (ec *Client) BlobSidecarByTxHash(ctx context.Context, hash common.Hash) (*types.BlobTxSidecar, error) { - var r *types.BlobTxSidecar +func (ec *Client) BlobSidecarByTxHash(ctx context.Context, hash common.Hash) (*types.BlobSidecar, error) { + var r *types.BlobSidecar err := ec.c.CallContext(ctx, &r, "eth_getBlobSidecarByTxHash", hash) if err == nil && r == nil { return nil, ethereum.NotFound @@ -361,7 +361,7 @@ func (ec *Client) TransactionInBlock(ctx context.Context, blockHash common.Hash, return json.tx, err } -// TransactionInBlock returns a single transaction at index in the given block. +// TransactionsInBlock returns a single transaction at index in the given block. func (ec *Client) TransactionsInBlock(ctx context.Context, number *big.Int) ([]*types.Transaction, error) { var rpcTxs []*rpcTransaction err := ec.c.CallContext(ctx, &rpcTxs, "eth_getTransactionsByBlockNumber", toBlockNumArg(number)) @@ -376,7 +376,7 @@ func (ec *Client) TransactionsInBlock(ctx context.Context, number *big.Int) ([]* return txs, err } -// TransactionInBlock returns a single transaction at index in the given block. +// TransactionRecipientsInBlock returns a single transaction at index in the given block. func (ec *Client) TransactionRecipientsInBlock(ctx context.Context, number *big.Int) ([]*types.Receipt, error) { var rs []*types.Receipt err := ec.c.CallContext(ctx, &rs, "eth_getTransactionReceiptsByBlockNumber", toBlockNumArg(number)) diff --git a/ethdb/database.go b/ethdb/database.go index e4bfbc95bc..5d7d54353c 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -180,12 +180,6 @@ type StateStoreReader interface { StateStoreReader() Reader } -type BlockStore interface { - BlockStore() Database - SetBlockStore(block Database) - HasSeparateBlockStore() bool -} - type BlockStoreReader interface { BlockStoreReader() Reader } @@ -194,6 +188,14 @@ type BlockStoreWriter interface { BlockStoreWriter() Writer } +// MultiDatabaseReader contains the methods required to read data from both key-value as well as +// blockStore or stateStore. +type MultiDatabaseReader interface { + KeyValueReader + StateStoreReader + BlockStoreReader +} + // Reader contains the methods required to read data from both key-value as well as // immutable ancient data. type Reader interface { @@ -234,6 +236,13 @@ type DiffStore interface { type StateStore interface { StateStore() Database SetStateStore(state Database) + GetStateStore() Database +} + +type BlockStore interface { + BlockStore() Database + SetBlockStore(block Database) + HasSeparateBlockStore() bool } // Database contains all the methods required by the high level database to not diff --git a/ethdb/memorydb/memorydb.go b/ethdb/memorydb/memorydb.go index 2a939f9a18..fa2456e3ee 100644 --- a/ethdb/memorydb/memorydb.go +++ b/ethdb/memorydb/memorydb.go @@ -39,6 +39,9 @@ var ( // errSnapshotReleased is returned if callers want to retrieve data from a // released snapshot. errSnapshotReleased = errors.New("snapshot released") + + // errNotSupported is returned if the database doesn't support the required operation. + errNotSupported = errors.New("this operation is not supported") ) // Database is an ephemeral key-value store. Apart from basic data storage @@ -47,6 +50,84 @@ var ( type Database struct { db map[string][]byte lock sync.RWMutex + + stateStore ethdb.Database + blockStore ethdb.Database +} + +func (db *Database) ModifyAncients(f func(ethdb.AncientWriteOp) error) (int64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) TruncateHead(n uint64) (uint64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) TruncateTail(n uint64) (uint64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) Sync() error { + //TODO implement me + panic("implement me") +} + +func (db *Database) TruncateTableTail(kind string, tail uint64) (uint64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) ResetTable(kind string, startAt uint64, onlyEmpty bool) error { + //TODO implement me + panic("implement me") +} + +func (db *Database) HasAncient(kind string, number uint64) (bool, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) Ancient(kind string, number uint64) ([]byte, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) Ancients() (uint64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) Tail() (uint64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) AncientSize(kind string) (uint64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) ItemAmountInAncient() (uint64, error) { + //TODO implement me + panic("implement me") +} + +func (db *Database) AncientOffSet() uint64 { + //TODO implement me + panic("implement me") +} + +func (db *Database) ReadAncients(fn func(ethdb.AncientReaderOp) error) (err error) { + //TODO implement me + panic("implement me") } // New returns a wrapped map with all the required database interface methods @@ -204,6 +285,37 @@ func (db *Database) Len() int { return len(db.db) } +func (db *Database) StateStoreReader() ethdb.Reader { + if db.stateStore == nil { + return db + } + return db.stateStore +} + +func (db *Database) BlockStoreReader() ethdb.Reader { + if db.blockStore == nil { + return db + } + return db.blockStore +} + +func (db *Database) BlockStoreWriter() ethdb.Writer { + if db.blockStore == nil { + return db + } + return db.blockStore +} + +// convertLegacyFn takes a raw freezer entry in an older format and +// returns it in the new format. +type convertLegacyFn = func([]byte) ([]byte, error) + +// MigrateTable processes the entries in a given table in sequence +// converting them to a new format if they're of an old format. +func (db *Database) MigrateTable(kind string, convert convertLegacyFn) error { + return errNotSupported +} + // keyvalue is a key-value tuple tagged with a deletion field to allow creating // memory-database write batches. type keyvalue struct { diff --git a/ethdb/remotedb/remotedb.go b/ethdb/remotedb/remotedb.go index 2ba5807a32..f755dd16bc 100644 --- a/ethdb/remotedb/remotedb.go +++ b/ethdb/remotedb/remotedb.go @@ -122,6 +122,10 @@ func (db *Database) SetStateStore(state ethdb.Database) { panic("not supported") } +func (db *Database) GetStateStore() ethdb.Database { + panic("not supported") +} + func (db *Database) StateStoreReader() ethdb.Reader { return db } diff --git a/go.mod b/go.mod index 018e7d0375..08968e57b5 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/ethereum/go-ethereum go 1.21 -toolchain go1.21.5 - require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 github.com/Microsoft/go-winio v0.6.1 @@ -30,7 +28,6 @@ require ( github.com/fatih/color v1.16.0 github.com/fatih/structs v1.1.0 github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e - github.com/fjl/memsize v0.0.2 github.com/fsnotify/fsnotify v1.6.0 github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 @@ -39,7 +36,7 @@ require ( github.com/golang/protobuf v1.5.4 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/gofuzz v1.2.0 - github.com/google/uuid v1.4.0 + github.com/google/uuid v1.5.0 github.com/gorilla/websocket v1.5.1 github.com/graph-gophers/graphql-go v1.3.0 github.com/hashicorp/go-bexpr v0.1.10 @@ -98,6 +95,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/DataDog/zstd v1.5.5 // indirect + github.com/allegro/bigcache v1.2.1 // indirect github.com/aristanetworks/goarista v0.0.0-20200805130819-fd197cf57d96 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 // indirect @@ -234,12 +232,10 @@ require ( github.com/prometheus/common v0.47.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/prometheus/prom2json v1.3.0 // indirect - github.com/prysmaticlabs/eth2-types v0.0.0-20210303084904-c9735a06829d // indirect github.com/prysmaticlabs/fastssz v0.0.0-20221107182844-78142813af44 // indirect github.com/prysmaticlabs/go-bitfield v0.0.0-20210809151128-385d8c5e3fb7 // indirect github.com/prysmaticlabs/gohashtree v0.0.4-beta // indirect github.com/prysmaticlabs/prombbolt v0.0.0-20210126082820-9b7adba6db7c // indirect - github.com/prysmaticlabs/prysm v0.0.0-20220124113610-e26cde5e091b // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/quic-go v0.42.0 // indirect github.com/quic-go/webtransport-go v0.6.0 // indirect @@ -250,9 +246,10 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/schollz/progressbar/v3 v3.3.4 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.10.0 // indirect + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e // indirect github.com/tidwall/gjson v1.10.2 // indirect github.com/tidwall/match v1.1.1 // indirect @@ -267,7 +264,7 @@ require ( github.com/wealdtech/go-eth2-util v1.6.3 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + go.etcd.io/bbolt v1.3.9 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/dig v1.17.1 // indirect go.uber.org/fx v1.20.1 // indirect @@ -280,8 +277,10 @@ require ( golang.org/x/term v0.18.0 // indirect google.golang.org/api v0.44.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/grpc v1.56.3 // indirect + google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect @@ -296,8 +295,7 @@ require ( ) replace ( - github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.23.0 - github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-tendermint v0.0.0-20230417032003-4cda1f296fb2 + github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-cometbft v1.3.1 github.com/grpc-ecosystem/grpc-gateway/v2 => github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20210702154020-550e1cd83ec1 github.com/syndtr/goleveldb v1.0.1 => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/tendermint => github.com/bnb-chain/tendermint v0.31.16 diff --git a/go.sum b/go.sum index e3581fa194..f3b7589a13 100644 --- a/go.sum +++ b/go.sum @@ -1,18 +1,14 @@ -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -cloud.google.com/go v0.16.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.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.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= 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.44.3/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 v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= @@ -26,149 +22,25 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= -cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= -cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= -cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= 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/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= -cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= -cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= -cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= -cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= -cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= 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/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= -cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= -cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= -cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= -cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= -cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= -cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= -cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= 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= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= -cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/jaeger v0.2.1 h1:yGBYzYMewVL0yO9qqJv3Z5+IRhPdU7e9o/2oKpX4YvI= contrib.go.opencensus.io/exporter/jaeger v0.2.1/go.mod h1:Y8IsLgdxqh1QxYxPC5IgXVmBaeLUeQFfBeBi9PbeZd0= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= @@ -177,13 +49,6 @@ dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBr dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -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-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= @@ -194,26 +59,14 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -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/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -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/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -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/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= @@ -223,97 +76,55 @@ github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20240209103030-ec53fa766bf8/go.mod h1:L1QpLBqXlboJMOC2hndG95d1eiElzKsBhjzcuy8pxeM= -github.com/MariusVanDerWijden/tx-fuzz v1.3.3-0.20240227085032-f70dd7c85c97/go.mod h1:xcjGtET6+7KeDHcwLQp3sIfyFALtoTjzZgY8Y+RUozM= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794/go.mod h1:7e+I0LQFUI9AXWxOfsQROs9xPhoJtbsyWcjJqDd4KPY= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= github.com/aristanetworks/glog v0.0.0-20191112221043-67e8567f59f3/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= -github.com/aristanetworks/goarista v0.0.0-20200521140103-6c3304613b30/go.mod h1:QZe5Yh80Hp1b6JxQdpfSEEe8X7hTyTEZSosSrFf/oJE= github.com/aristanetworks/goarista v0.0.0-20200805130819-fd197cf57d96 h1:XJH0YfVFKbq782tlNThzN/Ud5qm/cx6LXOA/P6RkTxc= github.com/aristanetworks/goarista v0.0.0-20200805130819-fd197cf57d96/go.mod h1:QZe5Yh80Hp1b6JxQdpfSEEe8X7hTyTEZSosSrFf/oJE= github.com/aristanetworks/splunk-hec-go v0.3.3/go.mod h1:1VHO9r17b0K7WmOlLb9nTk/2YanvOEnLMUgsFrxBROc= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= github.com/aws/aws-sdk-go-v2 v1.21.2 h1:+LXZ0sgo8quN9UOKXXzAWRT3FWd4NxeXWOZom9pE7GA= github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= github.com/aws/aws-sdk-go-v2/config v1.18.45 h1:Aka9bI7n8ysuwPeFdm77nfbyHCAKQ3z9ghB3S/38zes= github.com/aws/aws-sdk-go-v2/config v1.18.45/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8= github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= -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/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 h1:nFBQlGtkbPzp/NjZLuFxRqmT91rLJkgvsEQs68h962Y= @@ -322,29 +133,20 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 h1:JRVhO25+r3ar2mKGP7 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= -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/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= -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/route53 v1.30.2 h1:/RPQNjh1sDIezpXaFIkZb7MlXnSyAqjVdAwcJuGYTqg= github.com/aws/aws-sdk-go-v2/service/route53 v1.30.2/go.mod h1:TQZBt/WaQy+zTHoW++rnl8JBrmZ0VO6EUbVua1+foCA= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k= github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU= github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8= github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/bazelbuild/rules_go v0.23.2 h1:Wxu7JjqnF78cKZbsBsARLSXx/jlGaSLCnUV3mTlyHvM= github.com/bazelbuild/rules_go v0.23.2/go.mod h1:MC23Dc/wkXEyk3Wpq6lCqz0ZAYOZDw2DR5y3N1q2i7M= -github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= @@ -358,55 +160,28 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bits-and-blooms/bitset v1.11.0 h1:RMyy2mBBShArUAhfVRZJ2xyBO58KCBCtZFShw3umo6k= github.com/bits-and-blooms/bitset v1.11.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/bnb-chain/fastssz v0.1.2 h1:vTcXw5SwCtRYnl/BEclujiml7GXiVOZ74tub4GHpvlM= github.com/bnb-chain/fastssz v0.1.2/go.mod h1:KcabV+OEw2QwgyY8Fc88ZG79CKYkFdu0kKWyfA3dI6o= github.com/bnb-chain/greenfield-bundle-sdk v1.1.0 h1:0BWQsV+c32wHxEEpJY9igBSBg5N1Fm3KoSLC+Yef2n0= github.com/bnb-chain/greenfield-bundle-sdk v1.1.0/go.mod h1:NCjQp0sniAbBR5yR5pYiXpYwYd1okSIBLj+31sTpmXA= -github.com/bnb-chain/greenfield-tendermint v0.0.0-20230417032003-4cda1f296fb2 h1:jubavYCs/mCFj/g6Utl+l4SfpykdBdWJFPsvb9FcEXU= -github.com/bnb-chain/greenfield-tendermint v0.0.0-20230417032003-4cda1f296fb2/go.mod h1:9q11eHNRY9FDwFH+4pompzPNGv//Z3VcfvkELaHJPMs= +github.com/bnb-chain/greenfield-cometbft v1.3.1 h1:LhcBwhj/UhcfZXUnefwp+hiqpEYwloUO5KGJB3Xrqt4= +github.com/bnb-chain/greenfield-cometbft v1.3.1/go.mod h1:4YtK3qVOhmL/evCCZ2qohjhuQLSjGcz2yYW62ALk/N0= github.com/bnb-chain/ics23 v0.1.0 h1:DvjGOts2FBfbxB48384CYD1LbcrfjThFz8kowY/7KxU= github.com/bnb-chain/ics23 v0.1.0/go.mod h1:cU6lTGolbbLFsGCgceNB2AzplH1xecLp6+KXvxM32nI= github.com/bnb-chain/tendermint v0.31.16 h1:rOO6WG61JDAuRCCL8TKnGhorJftQDVygq0mqR7A0ck4= github.com/bnb-chain/tendermint v0.31.16/go.mod h1:cmt8HHmQUSVaWQ/hoTefRxsh5X3ERaM1zCUIR0DPbFU= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/bradfitz/gomemcache v0.0.0-20170208213004-1952afaa557d/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd v0.23.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= -github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= -github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= -github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -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/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/bufbuild/buf v0.37.0/go.mod h1:lQ1m2HkIaGOFba6w/aC3KYBHhKEOESP3gaAEpS3dAFM= -github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= -github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= @@ -414,12 +189,6 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= -github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs= -github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= @@ -433,20 +202,13 @@ github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMn github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY= -github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cloudflare/cloudflare-go v0.79.0 h1:ErwCYDjFCYppDJlDJ/5WhsSmzegAUe2+K9qgFyQDg3M= github.com/cloudflare/cloudflare-go v0.79.0/go.mod h1:gkHQf9xEubaQPEuerBuoinR9P8bf8a05Lq0X6WKy1Oc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -461,31 +223,22 @@ github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -495,7 +248,6 @@ github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fj github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/gogoproto v1.4.1 h1:WoyH+0/jbCTzpKNvyav5FL1ZTWsp1im1MxEpJEzKUB8= github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= @@ -508,43 +260,29 @@ github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6V github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U= github.com/d4l3k/messagediff v1.2.1/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= -github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= 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/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/deckarep/golang-set/v2 v2.5.0 h1:hn6cEZtQ0h3J8kFrHR/NrzyOoTnjgW1+FmNJzQ7y/sA= github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018 h1:cNcG4c2n5xanQzp2hMyxDxPYVQmZ91y4WN6fJFlndLo= github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018/go.mod h1:MIonLggsKgZLUSt414ExgwNtlOL5MuEoAJP514mwGe8= 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-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= @@ -553,16 +291,11 @@ github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 h1:qwcF+vdFrvPSEUDSX5RVoRccG8a5DhOdWdQ4zN62zzo= github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= @@ -575,16 +308,12 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -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/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/dot v0.11.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -592,44 +321,25 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.10.13/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/ferranbt/fastssz v0.0.0-20210120143747-11b9eff30ea9/go.mod h1:DyEu2iuLBnb/T51BlsiO3yLYdJC6UbGMrIkqK1KmQxM= github.com/ferranbt/fastssz v0.0.0-20210905181407-59cf6761a7d5 h1:6dVcS0LktRSyEEgldFY4N9J17WjUoiJStttH+RZj0Wo= github.com/ferranbt/fastssz v0.0.0-20210905181407-59cf6761a7d5/go.mod h1:S8yiDeAXy8f88W4Ul+0dBMPx49S05byYbmZD6Uv94K4= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e h1:bBLctRc7kr01YGvaDfgLbTwjFNW5jdp5y5rj8XXBHfY= github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= -github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= @@ -638,17 +348,13 @@ github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiD github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= -github.com/fsnotify/fsnotify v1.4.3-0.20170329110642-4da3e2cfbabc/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= -github.com/garyburd/redigo v1.1.1-0.20170914051019-70e1b1943d4f/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= @@ -657,23 +363,13 @@ github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -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-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= 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-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -682,7 +378,6 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -692,27 +387,18 @@ github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNV github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.2.1/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -726,28 +412,11 @@ github.com/go-playground/validator/v10 v10.13.0/go.mod h1:dwu7+CG8/CtBiJFZDz4e+5 github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.6.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= -github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-yaml/yaml v2.1.0+incompatible h1:RYi2hDdss1u4YE7GwixGzWwVo47T8UQwnTLB6vQiq+o= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= -github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -757,27 +426,19 @@ github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/gddo v0.0.0-20200528160355-8d077c1d8f4c/go.mod h1:sam69Hju0uq+5uvLJUMDlsKlQ21Vrs1Kd/1YFPNYdOU= -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/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -785,7 +446,6 @@ github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20170918230701-e5d664eb928e/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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= @@ -795,8 +455,6 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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= @@ -816,30 +474,17 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 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/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= -github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= 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/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.1.1-0.20171103154506-982329095285/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 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= @@ -860,10 +505,8 @@ github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -891,25 +534,18 @@ github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= 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/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -918,19 +554,11 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/gregjones/httpcache v0.0.0-20170920190843-316c5e0ff04e/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= @@ -938,21 +566,15 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -961,144 +583,68 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= 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.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/hcl v0.0.0-20170914154624-68e816d1c783/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/herumi/bls-eth-go-binary v0.0.0-20210130185500-57372fb27371/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= github.com/herumi/bls-eth-go-binary v0.0.0-20210917013441-d37c07cfda4e h1:wCMygKUQhmcQAjlk2Gquzq6dLmyMv2kF+llRspoRgrk= github.com/herumi/bls-eth-go-binary v0.0.0-20210917013441-d37c07cfda4e/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= 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/goevmlab v0.0.0-20231201084119-c73b3c97929c/go.mod h1:K6KFgcQq1U9ksldcRyLYcwtj4nUTPn4rEaZtX4Gjofc= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/hydrogen18/memlistener v1.0.0/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/ianlancetaylor/cgosymbolizer v0.0.0-20200424224625-be1b05b0b279/go.mod h1:a5aratAVTWyz+nJMmDsN8O4XTfaLfdAsB1ysCmZX5Bw= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/inconshreveable/log15 v0.0.0-20170622235902-74a0988b5f80/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -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 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSHzRbhzK8RdXOsAdfDgO49TtqC1oZ+acxPrkfTxcCs= github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -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 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= 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/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= -github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= -github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= -github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= -github.com/jedib0t/go-pretty/v6 v6.5.4/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 h1:TMtDYDHKYY15rFihtRfck/bfFqNfvcabqvXAFQfAUpY= github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= github.com/jhump/protoreflect v1.8.1/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -1107,74 +653,45 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/joonix/log v0.0.0-20200409080653-9c1d2ceb5f1d/go.mod h1:fS54ONkjDV71zS9CDx3V9K21gJg7byKSvI4ajuWFNJw= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -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/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= 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/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a h1:FaWFmfWdAUKbSCtOU2QjDaorUexogfaMgbipgYATUMU= github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -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/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 h1:qGQQKEcAR99REcMpsXCp3lJ03zYT1PkRd3kQGPn9GVg= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/karalabe/usb v0.0.0-20211005121534-4c5740d64559/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c h1:AqsttAyEyIEsNz5WLRwuRwjiT5CMDUfLk6cFJDVPebs= github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= -github.com/kataras/golog v0.1.8/go.mod h1:rGPAin4hYROfk1qT9wZP6VY2rsb4zzc37QpdPjdkqVw= -github.com/kataras/iris/v12 v12.2.0/go.mod h1:BLzBpEunc41GbE68OUaQlqX4jzi791mx5HU04uPb90Y= -github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= -github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= -github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinms/leakybucket-go v0.0.0-20200115003610-082473db97ca/go.mod h1:ph+C5vpnCcQvKBwJwKLTK3JLNGnBXYlG7m7JjoC/zYA= github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= -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/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -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/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.9.3/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs= github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= @@ -1191,211 +708,70 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/echo/v4 v4.10.0/go.mod h1:S/T/5fy/GigaXnHTkh0ZGe4LpkkQysvRjFMSUTkDRNQ= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= -github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= -github.com/libp2p/go-conn-security-multistream v0.2.1/go.mod h1:cR1d8gA0Hr59Fj6NhaTpFhJZrjSYuNmhpT2r25zYR70= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= -github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.33.1 h1:tvJl9b9M6nSLBtZSXSguq+/lRhRj2oLRkyhBmQNMFLA= github.com/libp2p/go-libp2p v0.33.1/go.mod h1:zOUTMjG4I7TXwMndNyOBn/CNtVBLlvBlnxfi+8xzx+E= -github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-autonat v0.7.0/go.mod h1:uPvPn6J7cN+LCfFwW5tpOYvAz5NvPTc4iBamTV/WDMg= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-blankhost v0.3.0/go.mod h1:urPC+7U01nCGgJ3ZsV8jdwTp6Ji9ID0dMTvq+aJ+nZU= -github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= -github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= -github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.7.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.2/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= -github.com/libp2p/go-libp2p-core v0.9.0/go.mod h1:ESsbz31oC3C1AvMJoGx26RTuCkNhmkSRCqZ0kQtJ2/8= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.13.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-discovery v0.6.0/go.mod h1:/u1voHt0tKIe5oIA1RHBKQLVCWPna2dXmPNHc2zR9S8= -github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= -github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= -github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= -github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= github.com/libp2p/go-libp2p-mplex v0.9.0 h1:R58pDRAmuBXkYugbSSXR9wrTX3+1pFM1xP2bLuodIq8= github.com/libp2p/go-libp2p-mplex v0.9.0/go.mod h1:ro1i4kuwiFT+uMPbIDIFkcLs1KRbNp0QwnUXM+P64Og= -github.com/libp2p/go-libp2p-nat v0.1.0/go.mod h1:DQzAG+QbDYjN1/C3B6vXucLtz3u9rEonLVPtZVzQqks= -github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= -github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= -github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= -github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= -github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-pubsub v0.6.1/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= github.com/libp2p/go-libp2p-pubsub v0.10.0 h1:wS0S5FlISavMaAbxyQn3dxMOe2eegMfswM471RuHJwA= github.com/libp2p/go-libp2p-pubsub v0.10.0/go.mod h1:1OxbaT/pFRO5h+Dpze8hdHQ63R0ke55XTs6b6NwLLkw= -github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= -github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= -github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= -github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= -github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= -github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= -github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.6.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= -github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= -github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZbSV1mQxTrefOg2Fi+k1ClDSA4ppw= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= -github.com/libp2p/go-libp2p-transport-upgrader v0.6.0/go.mod h1:1e07y1ZSZdHo9HPbuU8IztM1Cj+DR5twgycb4pnRzRo= -github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelNoy5nm3tZ3/Zw30= -github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= -github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= -github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= -github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= -github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= github.com/libp2p/go-mplex v0.7.0/go.mod h1:rW8ThnRcYWft/Jb2jeORBmPd6xuG3dGxWN/W168L9EU= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE= github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= -github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= github.com/libp2p/go-nat v0.2.0 h1:Tyz+bUFAYqGyJ/ppPPymMGbIgNRH+WqC5QrT5fKrrGk= github.com/libp2p/go-nat v0.2.0/go.mod h1:3MJr+GRpRkyT65EpVPBstXLvOlAPzUVlG6Pwg9ohLJk= -github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-netroute v0.1.6/go.mod h1:AqhkMh0VuWmfgtxKPp3Oc1LdU5QSWS7wl0QLhSZqXxQ= github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= -github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.1/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= -github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-ws-transport v0.5.0/go.mod h1:I2juo1dNTbl8BKSBYo98XY85kU2xds1iamArLvl8kNg= -github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= github.com/libp2p/go-yamux/v4 v4.0.1 h1:FfDR4S1wj6Bw2Pqbc8Uz7pCxeRBPbwsBbEdfwiCypkQ= github.com/libp2p/go-yamux/v4 v4.0.1/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= -github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= -github.com/libp2p/zeroconf/v2 v2.2.0/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/lunixbochs/vtclean v1.0.0 h1:xu2sLAri4lGiovBDQKxl5mrXyESr3gUr5m5SM5+LVb8= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.7.4-0.20170902060319-8d7837e64d3c/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 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/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.7.0 h1:3l11YT8tm9MnwGFQ4kETwkzpAwY2Jt9lCrumCUW4+z4= github.com/manifoldco/promptui v0.7.0/go.mod h1:n4zTdgP0vr0S3w7/O/g98U+e0gwLScEXGwov2nIKuGQ= -github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= 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.0.10-0.20170816031813-ad5389df28cd/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/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-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -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.2/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= 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.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -1405,20 +781,12 @@ github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -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/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/microcosm-cc/bluemonday v1.0.23/go.mod h1:mN70sk7UkkF8TUr2IGBpNN0jAgStuPzlK76QuruE/z4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4= github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= @@ -1431,15 +799,10 @@ github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjK github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -1451,7 +814,6 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v0.0.0-20170523030023-d0303fe80992/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -1462,8 +824,6 @@ github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8oh github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= -github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1473,95 +833,51 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= github.com/multiformats/go-multiaddr v0.12.2 h1:9G9sTY/wCYajKa9lyfWPmpZAwe6oV+Wb1zcmMS1HG24= github.com/multiformats/go-multiaddr v0.12.2/go.mod h1:GKyaTYjZRdcUhyOetrxTk9z0cW+jA/YrnqTOvKgi44M= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= -github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs= github.com/multiformats/go-multistream v0.5.0 h1:5htLSLl7lvJk3xx3qT/8Zm9J4K8vEOf/QGkvOGQAyiE= github.com/multiformats/go-multistream v0.5.0/go.mod h1:n6tMZiwiP2wUsR8DgfDWw1dydlEqV3l6N3/GBsX6ILA= github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= 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 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -1576,11 +892,8 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= @@ -1589,24 +902,18 @@ github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGV github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= 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/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -1615,56 +922,27 @@ github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTm github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/panjf2000/ants/v2 v2.4.5 h1:kcGvjXB7ea0MrzzszpnlVFthhYKoFxLi75nRbsq01HY= github.com/panjf2000/ants/v2 v2.4.5/go.mod h1:f6F0NZVFsGCp5A7QW/Zj/m92atWwOkY0OIhFxRNFr4A= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.0.1-0.20170904195809-1d6b12b7cb29/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -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/peterh/liner v1.2.0 h1:w/UPXyl5GfahFxcTOz2j9wCIHNI+pUPr2laqpojKNCg= github.com/peterh/liner v1.2.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0= -github.com/pion/dtls/v2 v2.2.8/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/ice/v2 v2.3.11/go.mod h1:hPcLC3kxMa+JGRzMHqQzjoSj3xtE9F+eoncmXLlCL4E= -github.com/pion/interceptor v0.1.25/go.mod h1:wkbPYAak5zKsfpVDYMtEfWEy8D4zL+rpxCxPImLOg3Y= -github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/mdns v0.0.9/go.mod h1:2JA5exfxwzXiCihmxpTKgFUpiQws2MnipoPK09vecIc= -github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.13/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= -github.com/pion/rtp v1.8.3/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= -github.com/pion/sctp v1.8.9/go.mod h1:cMLT45jqw3+jiJCrtHVwfQLnfR0MGZ4rgOJwUOIqLkI= -github.com/pion/sdp/v3 v3.0.6/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw= -github.com/pion/srtp/v2 v2.0.18/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= -github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= -github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= -github.com/pion/turn/v2 v2.1.4/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= -github.com/pion/webrtc/v3 v3.2.23/go.mod h1:1CaT2fcZzZ6VZA+O1i9yK2DU4EOcXVvSbWG9pr5jefs= -github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -1674,15 +952,9 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -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/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= -github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= -github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= @@ -1695,8 +967,6 @@ github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeD github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1712,14 +982,10 @@ github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7q github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 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/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.47.0 h1:p5Cz0FNHo7SnWOmWmoRozVcjEp0bIVU8cV7OShpjL1k= github.com/prometheus/common v0.47.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1731,8 +997,6 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.0.10/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/prometheus/prom2json v1.3.0 h1:BlqrtbT9lLH3ZsOVhXPsHzFrApCTKRifB7gjJuypu6Y= @@ -1742,11 +1006,8 @@ github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38i github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 h1:cZC+usqsYgHtlBaGulVnZ1hfKAi8iWtujBnRLQE698c= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7/go.mod h1:IToEjHuttnUzwZI5KBSM/LOOW3qLbbrHOEfp3SbECGY= -github.com/prysmaticlabs/eth2-types v0.0.0-20210303084904-c9735a06829d h1:1dN7YAqMN3oAJ0LceWcyv/U4jHLh+5urnSnr4br6zg4= -github.com/prysmaticlabs/eth2-types v0.0.0-20210303084904-c9735a06829d/go.mod h1:kOmQ/zdobQf7HUohDTifDNFEZfNaSCIY5fkONPL+dWU= github.com/prysmaticlabs/fastssz v0.0.0-20221107182844-78142813af44 h1:c3p3UzV4vFA7xaCDphnDWOjpxcadrQ26l5b+ypsvyxo= github.com/prysmaticlabs/fastssz v0.0.0-20221107182844-78142813af44/go.mod h1:MA5zShstUwCQaE9faGHgCGvEWUbG87p4SAXINhmCkvg= -github.com/prysmaticlabs/go-bitfield v0.0.0-20210108222456-8e92c3709aa0/go.mod h1:hCwmef+4qXWjv0jLDbQdWnL0Ol7cS7/lCSS26WR+u6s= github.com/prysmaticlabs/go-bitfield v0.0.0-20210809151128-385d8c5e3fb7 h1:0tVE4tdWQK9ZpYygoV7+vS6QkDvQVySboMVEIxBJmXw= github.com/prysmaticlabs/go-bitfield v0.0.0-20210809151128-385d8c5e3fb7/go.mod h1:wmuf/mdK4VMD+jA9ThwcUKjg3a2XWM9cVfFYjDyY4j4= github.com/prysmaticlabs/gohashtree v0.0.4-beta h1:H/EbCuXPeTV3lpKeXGPpEV9gsUpkqOOVnWapUyeWro4= @@ -1755,36 +1016,25 @@ github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20210702154020-550e1cd83ec1 h1 github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20210702154020-550e1cd83ec1/go.mod h1:IOyTYjcIO0rkmnGBfJTL0NJ11exy/Tc2QEuv7hCXp24= github.com/prysmaticlabs/prombbolt v0.0.0-20210126082820-9b7adba6db7c h1:9PHRCuO/VN0s9k+RmLykho7AjDxblNYI5bYKed16NPU= github.com/prysmaticlabs/prombbolt v0.0.0-20210126082820-9b7adba6db7c/go.mod h1:ZRws458tYHS/Zs936OQ6oCrL+Ict5O4Xpwve1UQ6C9M= -github.com/prysmaticlabs/protoc-gen-go-cast v0.0.0-20211014160335-757fae4f38c6/go.mod h1:ZVEbRdnMkGhp/pu35zq4SXxtvUwWK0J1MATtekZpH2Y= github.com/prysmaticlabs/protoc-gen-go-cast v0.0.0-20230228205207-28762a7b9294 h1:q9wE0ZZRdTUAAeyFP/w0SwBEnCqlVy2+on6X2/e+eAU= github.com/prysmaticlabs/protoc-gen-go-cast v0.0.0-20230228205207-28762a7b9294/go.mod h1:ZVEbRdnMkGhp/pu35zq4SXxtvUwWK0J1MATtekZpH2Y= -github.com/prysmaticlabs/prysm v0.0.0-20220124113610-e26cde5e091b h1:XULhE6PdzCYSe5OEVFhuixNqL3mYVOq/3M+SUGnKr1Y= -github.com/prysmaticlabs/prysm v0.0.0-20220124113610-e26cde5e091b/go.mod h1:bFzDfaj4xtisRey9RPkMJOhOJVwmtH3FChV7NPKV1Nk= github.com/prysmaticlabs/prysm/v5 v5.0.3 h1:hUi0gu6v7aXmMQkl2GbrLoWcMhDNIbkVxRwrZchKbxU= github.com/prysmaticlabs/prysm/v5 v5.0.3/go.mod h1:v5Oz4A4cWljfxUmW7SDk/VBzoYnei+lzwJogvSqUZVs= -github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= github.com/quic-go/quic-go v0.42.0 h1:uSfdap0eveIl8KXnipv9K7nlwZ5IqLlYOpJ58u5utpM= github.com/quic-go/quic-go v0.42.0/go.mod h1:132kz4kL3F9vxhW3CtQJLDVwcFe5wdWeJXXijhsO57M= github.com/quic-go/webtransport-go v0.6.0 h1:CvNsKqc4W2HljHJnoT+rMmbRJybShZ0YPFDD3NxaZLY= github.com/quic-go/webtransport-go v0.6.0/go.mod h1:9KjU4AEBqEQidGHNDkZrb8CAa1abRaosM2yGOyiikEc= -github.com/r3labs/sse v0.0.0-20210224172625-26fe804710bc/go.mod h1:S8xSOnV3CgpNrWd0GQ/OoQfMtlg2uPRSuTzcSGrzwK8= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1792,35 +1042,21 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/schollz/progressbar/v3 v3.3.4 h1:nMinx+JaEm/zJz4cEyClQeAw5rsYSB5th3xv+5lV6Vg= github.com/schollz/progressbar/v3 v3.3.4/go.mod h1:Rp5lZwpgtYmlvmGo1FyDwXMqagyRBQYSDwzlP9QDu84= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= -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/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= @@ -1850,71 +1086,42 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 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/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v0.0.0-20170901052352-ee1bd8ee15a1/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.1.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.1-0.20201006035406-b97b5ead31f7/go.mod h1:yk5b0mALVusDL5fMM6Rd1wgnoO5jUPhwsQ6LQAJTidQ= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/jwalterweatherman v0.0.0-20170901151539-12bd96e66386/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20170901120850-7aff26db30c1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.0.0/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= 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/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -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= @@ -1928,17 +1135,11 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.5/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= -github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= @@ -1947,7 +1148,6 @@ github.com/tendermint/go-amino v0.14.1 h1:o2WudxNfdLNBwMyl2dqOJxiro5rfrEaU0Ugs6o github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= github.com/tendermint/iavl v0.12.0 h1:xcaFAr+ycqCj7WN1RzL2EfcBioRDOHcU1oWcg83K028= github.com/tendermint/iavl v0.12.0/go.mod h1:EoKMMv++tDOL5qKKVnoIqtVPshRrEPeJ0WsgDOLAauM= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e h1:cR8/SYRgyQCt5cNCMniB/ZScMkhI9nk8U5C7SbISXjo= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e/go.mod h1:Tu4lItkATkonrYuvtVjG0/rhy15qrNGNTjPdaphtZ/8= github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo= @@ -1960,51 +1160,30 @@ github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8= github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4= github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tjfoc/gmsm v1.3.0/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08lq3r4= github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tklauser/numcpus v0.7.0 h1:yjuerZP127QG9m5Zh/mSO4wqurYil27tHrqwRoRjpr4= github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/trailofbits/go-mutexasserts v0.0.0-20200708152505-19999e7d3cef/go.mod h1:+SV/613m53DNAmlXPTWGZhIyt4E/qDvn9g/lOPRiy0A= github.com/trailofbits/go-mutexasserts v0.0.0-20230328101604-8cdbc5f3d279 h1:+LynomhWB+14Plp/bOONEAZCtvCZk4leRbTvNzNVkL0= github.com/trailofbits/go-mutexasserts v0.0.0-20230328101604-8cdbc5f3d279/go.mod h1:GA3+Mq3kt3tYAfM0WZCu7ofy+GW9PuGysHfhr+6JX7s= github.com/twitchtv/twirp v7.1.0+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI= github.com/urfave/cli/v2 v2.26.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= 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/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/wealdtech/go-bytesutil v1.1.1 h1:ocEg3Ke2GkZ4vQw5lp46rmO+pfqCCTgq35gqOy8JKVc= github.com/wealdtech/go-bytesutil v1.1.1/go.mod h1:jENeMqeTEU8FNZyDFRVc7KqBdRKSnJ9CCh26TcuNb9s= github.com/wealdtech/go-eth2-types/v2 v2.5.2 h1:tiA6T88M6XQIbrV5Zz53l1G5HtRERcxQfmET225V4Ls= @@ -2015,50 +1194,29 @@ github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4 v1.1.3 h1:SxrDVSr+oXuT1 github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4 v1.1.3/go.mod h1:qiIimacW5NhVRy8o+YxWo9YrecXqDAKKbL0+sOa0SJ4= github.com/wealdtech/go-eth2-wallet-types/v2 v2.8.2 h1:264/meVYWt1wFw6Mtn+xwkZkXjID42gNra4rycoiDXI= github.com/wealdtech/go-eth2-wallet-types/v2 v2.8.2/go.mod h1:k6kmiKWSWBTd4OxFifTEkPaBLhZspnO2KFD5XJY9nqg= -github.com/wercker/journalhook v0.0.0-20180428041537-5d0a5ae867b3/go.mod h1:XCsSkdKK4gwBMNrOCZWww0pX6AOt+2gYc5Z6jBRrNVg= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= github.com/willf/bitset v1.1.3 h1:ekJIKh6+YbUIVt9DfNbkR5d6aFcFTLDRyJNAACURBg8= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= +go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -2072,27 +1230,19 @@ go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= -go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= -go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA= go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME= go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/dig v1.17.1 h1:Tga8Lz8PcYNsWsyHMZ1Vm0OQOUaJNDyvPImgbAu9YSc= go.uber.org/dig v1.17.1/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= go.uber.org/fx v1.20.1 h1:zVwVQGS8zYvhh9Xxcu4w1M6ESyeMzebzj2NbSayZ4Mk= go.uber.org/fx v1.20.1/go.mod h1:iSYNbHf2y55acNCwCXKx7LbWb5WG1Bnue5RDXz1OREg= -go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -2102,17 +1252,12 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= @@ -2121,42 +1266,28 @@ golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/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-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20201002170205-7f63de1d35b0/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-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -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= @@ -2166,12 +1297,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE= golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= -golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -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-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -2197,15 +1324,12 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2215,7 +1339,6 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/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-20190227160552-c95aed5357e7/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-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -2228,8 +1351,6 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191116160921-f9c825593386/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-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -2237,7 +1358,6 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -2247,28 +1367,19 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 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-20200904194848-62affa334b73/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-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -2284,12 +1395,9 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5/go.mod h1:UBKtEnL8aqnd+0JHqZ+2qoMDwtuy6cYhhKNoHLBiTQc= -golang.org/x/sync v0.0.0-20170517211232-f52d1811a629/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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= @@ -2304,7 +1412,6 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2315,16 +1422,11 @@ golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5h 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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190219092855-153ac476189d/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-20190228124157-a34e9553db1e/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-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2332,7 +1434,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/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-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2340,15 +1441,12 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/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-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2360,7 +1458,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2380,33 +1477,21 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/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-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/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-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2419,13 +1504,11 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= 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/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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= @@ -2438,7 +1521,6 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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= @@ -2449,15 +1531,11 @@ golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/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-20181130052023-1c3d964395ce/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= @@ -2475,7 +1553,6 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/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= @@ -2485,7 +1562,6 @@ golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtn 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-20200103221440-774c71fcf114/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.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -2512,14 +1588,11 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= @@ -2527,15 +1600,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T 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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -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/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -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.0.0-20170921000349-586095a6e407/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= @@ -2556,7 +1620,6 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.34.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= @@ -2574,7 +1637,6 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170918111702-1e559d0a00ee/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -2584,9 +1646,7 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn 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-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -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= @@ -2594,7 +1654,6 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx 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/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= @@ -2608,7 +1667,6 @@ google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -2629,9 +1687,12 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.2.1-0.20170921194603-d4b75ebd4f9f/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= +google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a h1:myvhA4is3vrit1a6NZCWBIwN0kNEnX21DJOJX/NvIfI= +google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -2648,12 +1709,10 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= @@ -2661,9 +1720,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= -google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -2679,12 +1737,10 @@ google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX7 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8/go.mod h1:hFxJC2f0epmp1elRCiEGJTKAWbwxZ2nvqZdHl3FQXCY= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= -gopkg.in/cenkalti/backoff.v1 v1.1.0/go.mod h1:J6Vskwqd+OMVJl8C33mmtxTBs2gyzfv7UDAkHu8BrjI= 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/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2699,7 +1755,6 @@ gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= @@ -2707,20 +1762,14 @@ gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuv gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -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/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= 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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= 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.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -2732,8 +1781,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2743,47 +1790,27 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -honnef.co/go/tools v0.5.0-0.dev.0.20231205170804-aef76f4feee2/go.mod h1:J8YyqAvNy0yWpeKUOCONA1m2G4hH2CqUSo/5ZO2/5UA= -k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= k8s.io/api v0.20.0 h1:WwrYoZNM1W1aQEbyl8HNG+oWGzLpZQBlcerS9BQw9yI= k8s.io/api v0.20.0/go.mod h1:HyLC5l5eoS/ygQYl1BXBgFzWNlkHiAuyNAbevIn+FKg= -k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= k8s.io/apimachinery v0.20.0 h1:jjzbTJRXk0unNS71L7h3lxGDH/2HPxMPaQY+MjECKL8= k8s.io/apimachinery v0.20.0/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/client-go v0.18.3/go.mod h1:4a/dpQEvzAhT1BbuWW09qvIaGw6Gbu1gZYiQZIi1DMw= k8s.io/client-go v0.20.0 h1:Xlax8PKbZsjX4gFvNtt4F5MoJ1V5prDvCuoq9B7iax0= k8s.io/client-go v0.20.0/go.mod h1:4KWh/g+Ocd8KkCwKF8vUNnmqgv+EVnQDK4MBF4oB5tY= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.80.0 h1:lyJt0TWMPaGoODa8B8bUuxgHS3W/m/bNr2cca3brA/g= k8s.io/klog/v2 v2.80.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200520001619-278ece378a50/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/internal/debug/flags.go b/internal/debug/flags.go index dac878a7b1..29f7142587 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -30,7 +30,6 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/metrics/exp" - "github.com/fjl/memsize/memsizeui" "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" @@ -38,8 +37,6 @@ import ( "gopkg.in/natefinch/lumberjack.v2" ) -var Memsize memsizeui.Handler - var ( verbosityFlag = &cli.IntFlag{ Name: "verbosity", @@ -313,7 +310,6 @@ func StartPProf(address string, withMetrics bool) { if withMetrics { exp.Exp(metrics.DefaultRegistry) } - http.Handle("/memsize/", http.StripPrefix("/memsize", &Memsize)) log.Info("Starting pprof server", "addr", fmt.Sprintf("http://%s/debug/pprof", address)) go func() { if err := http.ListenAndServe(address, nil); err != nil { diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index e31cee15ec..6a2ac19319 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -862,48 +862,72 @@ func (s *BlockChainAPI) Health() bool { return true } -// GetFinalizedHeader returns the requested finalized block header. -// - probabilisticFinalized should be in range [2,21], -// then the block header with number `max(fastFinalized, latest-probabilisticFinalized)` is returned -func (s *BlockChainAPI) GetFinalizedHeader(ctx context.Context, probabilisticFinalized int64) (map[string]interface{}, error) { - if probabilisticFinalized < 2 || probabilisticFinalized > 21 { - return nil, fmt.Errorf("%d out of range [2,21]", probabilisticFinalized) +func (s *BlockChainAPI) getFinalizedNumber(ctx context.Context, verifiedValidatorNum int64) (int64, error) { + parliaConfig := s.b.ChainConfig().Parlia + if parliaConfig == nil { + return 0, fmt.Errorf("only parlia engine supported") + } + + curValidators, err := s.b.CurrentValidators() + if err != nil { // impossible + return 0, err + } + valLen := int64(len(curValidators)) + if verifiedValidatorNum < 1 || verifiedValidatorNum > valLen { + return 0, fmt.Errorf("%d out of range [1,%d]", verifiedValidatorNum, valLen) } - var err error fastFinalizedHeader, err := s.b.HeaderByNumber(ctx, rpc.FinalizedBlockNumber) if err != nil { // impossible - return nil, err + return 0, err } + latestHeader, err := s.b.HeaderByNumber(ctx, rpc.LatestBlockNumber) if err != nil { // impossible - return nil, err + return 0, err + } + lastHeader := latestHeader + confirmedValSet := make(map[common.Address]struct{}, valLen) + confirmedValSet[lastHeader.Coinbase] = struct{}{} + for count := 1; int64(len(confirmedValSet)) < verifiedValidatorNum && count <= int(parliaConfig.Epoch) && lastHeader.Number.Int64() > max(fastFinalizedHeader.Number.Int64(), 1); count++ { + lastHeader, err = s.b.HeaderByHash(ctx, lastHeader.ParentHash) + if err != nil { // impossible + return 0, err + } + confirmedValSet[lastHeader.Coinbase] = struct{}{} } - finalizedBlockNumber := max(fastFinalizedHeader.Number.Int64(), latestHeader.Number.Int64()-probabilisticFinalized) - return s.GetHeaderByNumber(ctx, rpc.BlockNumber(finalizedBlockNumber)) -} + finalizedBlockNumber := max(fastFinalizedHeader.Number.Int64(), lastHeader.Number.Int64()) + log.Debug("getFinalizedNumber", "LatestBlockNumber", latestHeader.Number.Int64(), "fastFinalizedHeight", fastFinalizedHeader.Number.Int64(), + "lastHeader", lastHeader.Number.Int64(), "finalizedBlockNumber", finalizedBlockNumber, "len(confirmedValSet)", len(confirmedValSet)) -// GetFinalizedBlock returns the requested finalized block. -// - probabilisticFinalized should be in range [2,21], -// then the block with number `max(fastFinalized, latest-probabilisticFinalized)` is returned -// - When fullTx is true all transactions in the block are returned, otherwise -// only the transaction hash is returned. -func (s *BlockChainAPI) GetFinalizedBlock(ctx context.Context, probabilisticFinalized int64, fullTx bool) (map[string]interface{}, error) { - if probabilisticFinalized < 2 || probabilisticFinalized > 21 { - return nil, fmt.Errorf("%d out of range [2,21]", probabilisticFinalized) - } + return finalizedBlockNumber, nil +} - var err error - fastFinalizedHeader, err := s.b.HeaderByNumber(ctx, rpc.FinalizedBlockNumber) +// GetFinalizedHeader returns the finalized block header based on the specified parameters. +// - `verifiedValidatorNum` must be within the range [1, len(currentValidators)]. +// - The function calculates `probabilisticFinalizedHeight` as the highest height of the block verified by `verifiedValidatorNum` validators, +// it then returns the block header with a height equal to `max(fastFinalizedHeight, probabilisticFinalizedHeight)`. +// - The height of the returned block header is guaranteed to be monotonically increasing. +func (s *BlockChainAPI) GetFinalizedHeader(ctx context.Context, verifiedValidatorNum int64) (map[string]interface{}, error) { + finalizedBlockNumber, err := s.getFinalizedNumber(ctx, verifiedValidatorNum) if err != nil { // impossible return nil, err } - latestHeader, err := s.b.HeaderByNumber(ctx, rpc.LatestBlockNumber) + return s.GetHeaderByNumber(ctx, rpc.BlockNumber(finalizedBlockNumber)) +} + +// GetFinalizedBlock returns the finalized block based on the specified parameters. +// - `verifiedValidatorNum` must be within the range [1, len(currentValidators)]. +// - The function calculates `probabilisticFinalizedHeight` as the highest height of the block verified by `verifiedValidatorNum` validators, +// it then returns the block with a height equal to `max(fastFinalizedHeight, probabilisticFinalizedHeight)`. +// - If `fullTx` is true, the block includes all transactions; otherwise, only transaction hashes are included. +// - The height of the returned block is guaranteed to be monotonically increasing. +func (s *BlockChainAPI) GetFinalizedBlock(ctx context.Context, verifiedValidatorNum int64, fullTx bool) (map[string]interface{}, error) { + finalizedBlockNumber, err := s.getFinalizedNumber(ctx, verifiedValidatorNum) if err != nil { // impossible return nil, err } - finalizedBlockNumber := max(fastFinalizedHeader.Number.Int64(), latestHeader.Number.Int64()-probabilisticFinalized) return s.GetBlockByNumber(ctx, rpc.BlockNumber(finalizedBlockNumber), fullTx) } diff --git a/internal/ethapi/backend.go b/internal/ethapi/backend.go index fd778a3f69..0cb3fb25cd 100644 --- a/internal/ethapi/backend.go +++ b/internal/ethapi/backend.go @@ -89,6 +89,8 @@ type Backend interface { ChainConfig() *params.ChainConfig Engine() consensus.Engine + // CurrentValidators return the list of validator at the latest block + CurrentValidators() ([]common.Address, error) // This is copied from filters.Backend // eth/filters needs to be initialized from this backend type, so methods needed by diff --git a/internal/ethapi/dbapi.go b/internal/ethapi/dbapi.go index 33fda936dc..b891091b94 100644 --- a/internal/ethapi/dbapi.go +++ b/internal/ethapi/dbapi.go @@ -33,11 +33,11 @@ func (api *DebugAPI) DbGet(key string) (hexutil.Bytes, error) { // DbAncient retrieves an ancient binary blob from the append-only immutable files. // It is a mapping to the `AncientReaderOp.Ancient` method func (api *DebugAPI) DbAncient(kind string, number uint64) (hexutil.Bytes, error) { - return api.b.ChainDb().Ancient(kind, number) + return api.b.ChainDb().BlockStore().Ancient(kind, number) } // DbAncients returns the ancient item numbers in the ancient store. // It is a mapping to the `AncientReaderOp.Ancients` method func (api *DebugAPI) DbAncients() (uint64, error) { - return api.b.ChainDb().Ancients() + return api.b.ChainDb().BlockStore().Ancients() } diff --git a/internal/ethapi/transaction_args_test.go b/internal/ethapi/transaction_args_test.go index 07a1c57a40..cc00e839d6 100644 --- a/internal/ethapi/transaction_args_test.go +++ b/internal/ethapi/transaction_args_test.go @@ -416,6 +416,8 @@ func (b *backendMock) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) func (b *backendMock) Engine() consensus.Engine { return nil } +func (b *backendMock) CurrentValidators() ([]common.Address, error) { return []common.Address{}, nil } + func (b *backendMock) MevRunning() bool { return false } func (b *backendMock) HasBuilder(builder common.Address) bool { return false } func (b *backendMock) MevParams() *types.MevParams { diff --git a/miner/bid_simulator.go b/miner/bid_simulator.go index 1d77308fed..f96d3c1a8a 100644 --- a/miner/bid_simulator.go +++ b/miner/bid_simulator.go @@ -7,6 +7,7 @@ import ( "math/big" "net" "net/http" + "strconv" "sync" "sync/atomic" "time" @@ -17,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/common/bidutil" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/txpool" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" @@ -68,6 +70,12 @@ type simBidReq struct { interruptCh chan int32 } +// newBidPackage is the warp of a new bid and a feedback channel +type newBidPackage struct { + bid *types.Bid + feedback chan error +} + // bidSimulator is in charge of receiving bid from builders, reporting issue to builders. // And take care of bid simulation, rewards computing, best bid maintaining. type bidSimulator struct { @@ -75,6 +83,7 @@ type bidSimulator struct { delayLeftOver time.Duration minGasPrice *big.Int chain *core.BlockChain + txpool *txpool.TxPool chainConfig *params.ChainConfig engine consensus.Engine bidWorker bidWorker @@ -95,7 +104,7 @@ type bidSimulator struct { // channels simBidCh chan *simBidReq - newBidCh chan *types.Bid + newBidCh chan newBidPackage pendingMu sync.RWMutex pending map[uint64]map[common.Address]map[common.Hash]struct{} // blockNumber -> builder -> bidHash -> struct{} @@ -111,7 +120,7 @@ func newBidSimulator( config *MevConfig, delayLeftOver time.Duration, minGasPrice *big.Int, - chain *core.BlockChain, + eth Backend, chainConfig *params.ChainConfig, engine consensus.Engine, bidWorker bidWorker, @@ -120,7 +129,8 @@ func newBidSimulator( config: config, delayLeftOver: delayLeftOver, minGasPrice: minGasPrice, - chain: chain, + chain: eth.BlockChain(), + txpool: eth.TxPool(), chainConfig: chainConfig, engine: engine, bidWorker: bidWorker, @@ -128,13 +138,13 @@ func newBidSimulator( chainHeadCh: make(chan core.ChainHeadEvent, chainHeadChanSize), builders: make(map[common.Address]*builderclient.Client), simBidCh: make(chan *simBidReq), - newBidCh: make(chan *types.Bid, 100), + newBidCh: make(chan newBidPackage, 100), pending: make(map[uint64]map[common.Address]map[common.Hash]struct{}), bestBid: make(map[common.Hash]*BidRuntime), simulatingBid: make(map[common.Hash]*BidRuntime), } - b.chainHeadSub = chain.SubscribeChainHeadEvent(b.chainHeadCh) + b.chainHeadSub = b.chain.SubscribeChainHeadEvent(b.chainHeadCh) if config.Enabled { b.bidReceiving.Store(true) @@ -327,6 +337,10 @@ func (b *bidSimulator) newBidLoop() { } } + genDiscardedReply := func(betterBid *BidRuntime) error { + return fmt.Errorf("bid is discarded, current bestBid is [blockReward: %s, validatorReward: %s]", betterBid.expectedBlockReward, betterBid.expectedValidatorReward) + } + for { select { case newBid := <-b.newBidCh: @@ -334,60 +348,47 @@ func (b *bidSimulator) newBidLoop() { continue } - // check the block reward and validator reward of the newBid - expectedBlockReward := newBid.GasFee - expectedValidatorReward := new(big.Int).Mul(expectedBlockReward, big.NewInt(int64(b.config.ValidatorCommission))) - expectedValidatorReward.Div(expectedValidatorReward, big.NewInt(10000)) - expectedValidatorReward.Sub(expectedValidatorReward, newBid.BuilderFee) - - if expectedValidatorReward.Cmp(big.NewInt(0)) < 0 { - // damage self profit, ignore - log.Debug("BidSimulator: invalid bid, validator reward is less than 0, ignore", - "builder", newBid.Builder, "bidHash", newBid.Hash().Hex()) + bidRuntime, err := newBidRuntime(newBid.bid, b.config.ValidatorCommission) + if err != nil { + if newBid.feedback != nil { + newBid.feedback <- err + } continue } - bidRuntime := &BidRuntime{ - bid: newBid, - expectedBlockReward: expectedBlockReward, - expectedValidatorReward: expectedValidatorReward, - packedBlockReward: big.NewInt(0), - packedValidatorReward: big.NewInt(0), - finished: make(chan struct{}), - } - - simulatingBid := b.GetSimulatingBid(newBid.ParentHash) - // simulatingBid is nil means there is no bid in simulation - if simulatingBid == nil { - // bestBid is nil means bid is the first bid - bestBid := b.GetBestBid(newBid.ParentHash) - if bestBid == nil { + var replyErr error + // simulatingBid will be nil if there is no bid in simulation, compare with the bestBid instead + if simulatingBid := b.GetSimulatingBid(newBid.bid.ParentHash); simulatingBid != nil { + // simulatingBid always better than bestBid, so only compare with simulatingBid if a simulatingBid exists + if bidRuntime.isExpectedBetterThan(simulatingBid) { commit(commitInterruptBetterBid, bidRuntime) - continue + } else { + replyErr = genDiscardedReply(simulatingBid) } - - // if bestBid is not nil, check if newBid is better than bestBid - if bidRuntime.expectedBlockReward.Cmp(bestBid.expectedBlockReward) >= 0 && - bidRuntime.expectedValidatorReward.Cmp(bestBid.expectedValidatorReward) >= 0 { - // if both reward are better than last simulating newBid, commit for simulation + } else { + // bestBid is nil means the bid is the first bid, otherwise the bid should compare with the bestBid + if bestBid := b.GetBestBid(newBid.bid.ParentHash); bestBid == nil || + bidRuntime.isExpectedBetterThan(bestBid) { commit(commitInterruptBetterBid, bidRuntime) - continue + } else { + replyErr = genDiscardedReply(bestBid) } - - log.Debug("BidSimulator: lower reward, ignore", - "builder", bidRuntime.bid.Builder, "bidHash", newBid.Hash().Hex()) - continue } - // simulatingBid must be better than bestBid, if newBid is better than simulatingBid, commit for simulation - if bidRuntime.expectedBlockReward.Cmp(simulatingBid.expectedBlockReward) >= 0 && - bidRuntime.expectedValidatorReward.Cmp(simulatingBid.expectedValidatorReward) >= 0 { - // if both reward are better than last simulating newBid, commit for simulation - commit(commitInterruptBetterBid, bidRuntime) - continue + if newBid.feedback != nil { + newBid.feedback <- replyErr + + log.Info("[BID ARRIVED]", + "block", newBid.bid.BlockNumber, + "builder", newBid.bid.Builder, + "accepted", replyErr == nil, + "blockReward", weiToEtherStringF6(bidRuntime.expectedBlockReward), + "validatorReward", weiToEtherStringF6(bidRuntime.expectedValidatorReward), + "tx", len(newBid.bid.Txs), + "hash", newBid.bid.Hash().TerminalString(), + ) } - log.Debug("BidSimulator: lower reward, ignore", "builder", newBid.Builder, "bidHash", newBid.Hash().Hex()) case <-b.exitCh: return } @@ -411,7 +412,7 @@ func (b *bidSimulator) clearLoop() { } delete(b.bestBid, parentHash) for k, v := range b.bestBid { - if v.bid.BlockNumber <= blockNumber-core.TriesInMemory { + if v.bid.BlockNumber <= blockNumber-b.chain.TriesInMemory() { v.env.discard() delete(b.bestBid, k) } @@ -420,7 +421,7 @@ func (b *bidSimulator) clearLoop() { b.simBidMu.Lock() for k, v := range b.simulatingBid { - if v.bid.BlockNumber <= blockNumber-core.TriesInMemory { + if v.bid.BlockNumber <= blockNumber-b.chain.TriesInMemory() { v.env.discard() delete(b.simulatingBid, k) } @@ -442,10 +443,19 @@ func (b *bidSimulator) clearLoop() { func (b *bidSimulator) sendBid(_ context.Context, bid *types.Bid) error { timer := time.NewTimer(1 * time.Second) defer timer.Stop() + + replyCh := make(chan error, 1) + select { - case b.newBidCh <- bid: + case b.newBidCh <- newBidPackage{bid: bid, feedback: replyCh}: b.AddPending(bid.BlockNumber, bid.Builder, bid.Hash()) - return nil + case <-timer.C: + return types.ErrMevBusy + } + + select { + case reply := <-replyCh: + return reply case <-timer.C: return types.ErrMevBusy } @@ -491,6 +501,8 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) { } var ( + startTS = time.Now() + blockNumber = bidRuntime.bid.BlockNumber parentHash = bidRuntime.bid.ParentHash builder = bidRuntime.bid.Builder @@ -542,12 +554,12 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) { } select { - case b.newBidCh <- bidRuntime.bid: + case b.newBidCh <- newBidPackage{bid: bidRuntime.bid}: log.Debug("BidSimulator: recommit", "builder", bidRuntime.bid.Builder, "bidHash", bidRuntime.bid.Hash().Hex()) default: } } - }(time.Now()) + }(startTS) // prepareWork will configure header with a suitable time according to consensus // prepareWork will start trie prefetching @@ -616,16 +628,39 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) { // check if bid gas price is lower than min gas price { bidGasUsed := uint64(0) - bidGasFee := bidRuntime.env.state.GetBalance(consensus.SystemAddress) + bidGasFee := big.NewInt(0) + + for i, receipt := range bidRuntime.env.receipts { + tx := bidRuntime.env.txs[i] + if !b.txpool.Has(tx.Hash()) { + bidGasUsed += receipt.GasUsed + effectiveTip, er := tx.EffectiveGasTip(bidRuntime.env.header.BaseFee) + if er != nil { + err = errors.New("failed to calculate effective tip") + return + } + + if bidRuntime.env.header.BaseFee != nil { + effectiveTip.Add(effectiveTip, bidRuntime.env.header.BaseFee) + } - for _, receipt := range bidRuntime.env.receipts { - bidGasUsed += receipt.GasUsed + gasFee := new(big.Int).Mul(effectiveTip, new(big.Int).SetUint64(receipt.GasUsed)) + bidGasFee.Add(bidGasFee, gasFee) + + if tx.Type() == types.BlobTxType { + blobFee := new(big.Int).Mul(receipt.BlobGasPrice, new(big.Int).SetUint64(receipt.BlobGasUsed)) + bidGasFee.Add(bidGasFee, blobFee) + } + } } - bidGasPrice := new(big.Int).Div(bidGasFee.ToBig(), new(big.Int).SetUint64(bidGasUsed)) - if bidGasPrice.Cmp(b.minGasPrice) < 0 { - err = errors.New("bid gas price is lower than min gas price") - return + // if bid txs are all from mempool, do not check gas price + if bidGasUsed != 0 { + bidGasPrice := new(big.Int).Div(bidGasFee, new(big.Int).SetUint64(bidGasUsed)) + if bidGasPrice.Cmp(b.minGasPrice) < 0 { + err = fmt.Errorf("bid gas price is lower than min gas price, bid:%v, min:%v", bidGasPrice, b.minGasPrice) + return + } } } @@ -633,7 +668,7 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) { if b.config.GreedyMergeTx { delay := b.engine.Delay(b.chain, bidRuntime.env.header, &b.delayLeftOver) if delay != nil && *delay > 0 { - bidTxsSet := mapset.NewSet[common.Hash]() + bidTxsSet := mapset.NewThreadUnsafeSetWithSize[common.Hash](len(bidRuntime.bid.Txs)) for _, tx := range bidRuntime.bid.Txs { bidTxsSet.Add(tx.Hash()) } @@ -658,13 +693,30 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) { } bestBid := b.GetBestBid(parentHash) - if bestBid == nil { + log.Info("[BID RESULT]", "win", "true[first]", "builder", bidRuntime.bid.Builder, "hash", bidRuntime.bid.Hash().TerminalString()) b.SetBestBid(bidRuntime.bid.ParentHash, bidRuntime) success = true return } + if bidRuntime.bid.Hash() != bestBid.bid.Hash() { + log.Info("[BID RESULT]", + "win", bidRuntime.packedBlockReward.Cmp(bestBid.packedBlockReward) >= 0, + + "bidHash", bidRuntime.bid.Hash().TerminalString(), + "bestHash", bestBid.bid.Hash().TerminalString(), + + "bidGasFee", weiToEtherStringF6(bidRuntime.packedBlockReward), + "bestGasFee", weiToEtherStringF6(bestBid.packedBlockReward), + + "bidBlockTx", bidRuntime.env.tcount, + "bestBlockTx", bestBid.env.tcount, + + "simElapsed", time.Since(startTS), + ) + } + // this is the simplest strategy: best for all the delegators. if bidRuntime.packedBlockReward.Cmp(bestBid.packedBlockReward) >= 0 { b.SetBestBid(bidRuntime.bid.ParentHash, bidRuntime) @@ -678,7 +730,7 @@ func (b *bidSimulator) simBid(interruptCh chan int32, bidRuntime *BidRuntime) { } select { - case b.newBidCh <- bestBid.bid: + case b.newBidCh <- newBidPackage{bid: bestBid.bid}: log.Debug("BidSimulator: recommit last bid", "builder", bidRuntime.bid.Builder, "bidHash", bidRuntime.bid.Hash().Hex()) default: } @@ -698,7 +750,7 @@ func (b *bidSimulator) reportIssue(bidRuntime *BidRuntime, err error) { }) if err != nil { - log.Error("BidSimulator: failed to report issue", "builder", bidRuntime.bid.Builder, "err", err) + log.Warn("BidSimulator: failed to report issue", "builder", bidRuntime.bid.Builder, "err", err) } } } @@ -718,11 +770,42 @@ type BidRuntime struct { duration time.Duration } +func newBidRuntime(newBid *types.Bid, validatorCommission uint64) (*BidRuntime, error) { + // check the block reward and validator reward of the newBid + expectedBlockReward := newBid.GasFee + expectedValidatorReward := new(big.Int).Mul(expectedBlockReward, big.NewInt(int64(validatorCommission))) + expectedValidatorReward.Div(expectedValidatorReward, big.NewInt(10000)) + expectedValidatorReward.Sub(expectedValidatorReward, newBid.BuilderFee) + + if expectedValidatorReward.Cmp(big.NewInt(0)) < 0 { + // damage self profit, ignore + log.Debug("BidSimulator: invalid bid, validator reward is less than 0, ignore", + "builder", newBid.Builder, "bidHash", newBid.Hash().Hex()) + return nil, fmt.Errorf("validator reward is less than 0, value: %s, commissionConfig: %d", expectedValidatorReward, validatorCommission) + } + + bidRuntime := &BidRuntime{ + bid: newBid, + expectedBlockReward: expectedBlockReward, + expectedValidatorReward: expectedValidatorReward, + packedBlockReward: big.NewInt(0), + packedValidatorReward: big.NewInt(0), + finished: make(chan struct{}), + } + + return bidRuntime, nil +} + func (r *BidRuntime) validReward() bool { return r.packedBlockReward.Cmp(r.expectedBlockReward) >= 0 && r.packedValidatorReward.Cmp(r.expectedValidatorReward) >= 0 } +func (r *BidRuntime) isExpectedBetterThan(other *BidRuntime) bool { + return r.expectedBlockReward.Cmp(other.expectedBlockReward) >= 0 && + r.expectedValidatorReward.Cmp(other.expectedValidatorReward) >= 0 +} + // packReward calculates packedBlockReward and packedValidatorReward func (r *BidRuntime) packReward(validatorCommission uint64) { r.packedBlockReward = r.env.state.GetBalance(consensus.SystemAddress).ToBig() @@ -778,3 +861,8 @@ func (r *BidRuntime) commitTransaction(chain *core.BlockChain, chainConfig *para return nil } + +func weiToEtherStringF6(wei *big.Int) string { + f, _ := new(big.Float).Quo(new(big.Float).SetInt(wei), big.NewFloat(params.Ether)).Float64() + return strconv.FormatFloat(f, 'f', 6, 64) +} diff --git a/miner/miner.go b/miner/miner.go index 41f93ea388..aaef07932d 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -102,7 +102,7 @@ func New(eth Backend, config *Config, chainConfig *params.ChainConfig, mux *even worker: newWorker(config, chainConfig, engine, eth, mux, isLocalBlock, false), } - miner.bidSimulator = newBidSimulator(&config.Mev, config.DelayLeftOver, config.GasPrice, eth.BlockChain(), chainConfig, engine, miner.worker) + miner.bidSimulator = newBidSimulator(&config.Mev, config.DelayLeftOver, config.GasPrice, eth, chainConfig, engine, miner.worker) miner.worker.setBestBidFetcher(miner.bidSimulator) miner.wg.Add(1) diff --git a/miner/worker.go b/miner/worker.go index 424a449355..8f09819d7d 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -1032,6 +1032,8 @@ func (w *worker) prepareWork(genParams *generateParams) (*environment, error) { } if w.chainConfig.Parlia == nil { header.ParentBeaconRoot = genParams.beaconRoot + } else if w.chainConfig.IsBohr(header.Number, header.Time) { + header.ParentBeaconRoot = new(common.Hash) } } // Could potentially happen if starting to mine in an odd state. @@ -1371,7 +1373,13 @@ LOOP: bestWork = bestBid.env from = bestBid.bid.Builder - log.Debug("BidSimulator: bid win", "block", bestWork.header.Number.Uint64(), "bid", bestBid.bid.Hash()) + log.Info("[BUILDER BLOCK]", + "block", bestWork.header.Number.Uint64(), + "builder", from, + "blockReward", weiToEtherStringF6(bestBid.packedBlockReward), + "validatorReward", weiToEtherStringF6(bestBid.packedValidatorReward), + "bid", bestBid.bid.Hash().TerminalString(), + ) } } } diff --git a/node/node.go b/node/node.go index 7d07e576df..069269de0c 100644 --- a/node/node.go +++ b/node/node.go @@ -74,11 +74,11 @@ const ( initializingState = iota runningState closedState - blockDbCacheSize = 256 - blockDbHandlesMinSize = 1000 - blockDbHandlesMaxSize = 2000 - chainDbMemoryPercentage = 50 - chainDbHandlesPercentage + blockDbCacheSize = 256 + blockDbHandlesMinSize = 1000 + blockDbHandlesMaxSize = 2000 + chainDbMemoryPercentage = 50 + chainDbHandlesPercentage = 50 diffStoreHandlesPercentage = 20 ) @@ -791,14 +791,15 @@ func (n *Node) OpenDatabase(name string, cache, handles int, namespace string, r func (n *Node) OpenAndMergeDatabase(name string, namespace string, readonly bool, config *ethconfig.Config) (ethdb.Database, error) { var ( - err error - stateDiskDb ethdb.Database - blockDb ethdb.Database - disableChainDbFreeze = false - blockDbHandlesSize int - diffStoreHandles int - chainDataHandles = config.DatabaseHandles - chainDbCache = config.DatabaseCache + err error + stateDiskDb ethdb.Database + blockDb ethdb.Database + disableChainDbFreeze = false + blockDbHandlesSize int + diffStoreHandles int + chainDataHandles = config.DatabaseHandles + chainDbCache = config.DatabaseCache + stateDbCache, stateDbHandles int ) if config.PersistDiff { @@ -818,10 +819,17 @@ func (n *Node) OpenAndMergeDatabase(name string, namespace string, readonly bool } else { blockDbHandlesSize = blockDbHandlesMinSize } - stateDbCache := config.DatabaseCache - chainDbCache - blockDbCacheSize - stateDbHandles := config.DatabaseHandles - chainDataHandles - blockDbHandlesSize + stateDbCache = config.DatabaseCache - chainDbCache - blockDbCacheSize + stateDbHandles = config.DatabaseHandles - chainDataHandles - blockDbHandlesSize disableChainDbFreeze = true + } + + chainDB, err := n.OpenDatabaseWithFreezer(name, chainDbCache, chainDataHandles, config.DatabaseFreezer, namespace, readonly, disableChainDbFreeze, false, config.PruneAncientData) + if err != nil { + return nil, err + } + if isMultiDatabase { // Allocate half of the handles and chainDbCache to this separate state data database stateDiskDb, err = n.OpenDatabaseWithFreezer(name+"/state", stateDbCache, stateDbHandles, "", "eth/db/statedata/", readonly, true, false, config.PruneAncientData) if err != nil { @@ -833,14 +841,6 @@ func (n *Node) OpenAndMergeDatabase(name string, namespace string, readonly bool return nil, err } log.Warn("Multi-database is an experimental feature") - } - - chainDB, err := n.OpenDatabaseWithFreezer(name, chainDbCache, chainDataHandles, config.DatabaseFreezer, namespace, readonly, disableChainDbFreeze, false, config.PruneAncientData) - if err != nil { - return nil, err - } - - if isMultiDatabase { chainDB.SetStateStore(stateDiskDb) chainDB.SetBlockStore(blockDb) } diff --git a/params/config.go b/params/config.go index 14cc6cff53..2c73e8dfe7 100644 --- a/params/config.go +++ b/params/config.go @@ -153,8 +153,8 @@ var ( FeynmanFixTime: newUint64(1713419340), // 2024-04-18 05:49:00 AM UTC CancunTime: newUint64(1718863500), // 2024-06-20 06:05:00 AM UTC HaberTime: newUint64(1718863500), // 2024-06-20 06:05:00 AM UTC - HaberFixTime: nil, // TBD - BohrTime: nil, + HaberFixTime: newUint64(1727316120), // 2024-09-26 02:02:00 AM UTC + BohrTime: newUint64(1727317200), // 2024-09-26 02:20:00 AM UTC Parlia: &ParliaConfig{ Period: 3, @@ -195,7 +195,7 @@ var ( CancunTime: newUint64(1713330442), // 2024-04-17 05:07:22 AM UTC HaberTime: newUint64(1716962820), // 2024-05-29 06:07:00 AM UTC HaberFixTime: newUint64(1719986788), // 2024-07-03 06:06:28 AM UTC - BohrTime: nil, + BohrTime: newUint64(1724116996), // 2024-08-20 01:23:16 AM UTC Parlia: &ParliaConfig{ Period: 3, diff --git a/params/protocol_params.go b/params/protocol_params.go index 2ecb92bc61..65b2d942c1 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -192,6 +192,11 @@ var ( MinBlocksForBlobRequests uint64 = 524288 // it keeps blob data available for ~18.2 days in local, ref: https://github.com/bnb-chain/BEPs/blob/master/BEPs/BEP-336.md#51-parameters. DefaultExtraReserveForBlobRequests uint64 = 1 * (24 * 3600) / 3 // it adds more time for expired blobs for some request cases, like expiry blob when remote peer is syncing, default 1 day. BreatheBlockInterval uint64 = 86400 // Controls the interval for updateValidatorSetV2 + // used for testing: + // [1,9] except 2 --> used as turn length directly + // 2 --> use random values to test switching turn length + // 0 and other values --> get turn length from contract + FixedTurnLength uint64 = 0 ) // Gas discount table for BLS12-381 G1 and G2 multi exponentiation operations diff --git a/params/version.go b/params/version.go index aa6c0c2c7d..4327f17d11 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 4 // Minor version component of the current release - VersionPatch = 11 // Patch version component of the current release + VersionPatch = 14 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) diff --git a/signer/fourbyte/abi.go b/signer/fourbyte/abi.go index 352abc59e1..bdfbd05a1e 100644 --- a/signer/fourbyte/abi.go +++ b/signer/fourbyte/abi.go @@ -98,7 +98,7 @@ func parseCallData(calldata []byte, unescapedAbidata string) (*decodedCallData, if len(argdata)%32 != 0 { return nil, fmt.Errorf("invalid call data; length should be a multiple of 32 bytes (was %d)", len(argdata)) } - // Validate the called method and upack the call data accordingly + // Validate the called method and unpack the call data accordingly abispec, err := abi.JSON(strings.NewReader(unescapedAbidata)) if err != nil { return nil, fmt.Errorf("invalid method signature (%q): %v", unescapedAbidata, err) diff --git a/tests/0001-diff-go-ethereum.patch b/tests/0001-diff-go-ethereum.patch index a6187ee4b6..dc66dd17f9 100644 --- a/tests/0001-diff-go-ethereum.patch +++ b/tests/0001-diff-go-ethereum.patch @@ -1,8 +1,19 @@ +From 32329440626abd6e9668c2d5bd2e7b719e951e01 Mon Sep 17 00:00:00 2001 +From: NathanBSC +Date: Wed, 31 Jul 2024 15:01:28 +0800 +Subject: [PATCH] diff go ethereum + +--- + core/vm/contracts.go | 10 ---------- + core/vm/jump_table.go | 2 +- + params/protocol_params.go | 2 +- + 3 files changed, 2 insertions(+), 12 deletions(-) + diff --git a/core/vm/contracts.go b/core/vm/contracts.go -index 5988bb15f..c92cbf542 100644 +index 38a6cac24..7eb29c3ed 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go -@@ -83,9 +83,6 @@ var PrecompiledContractsIstanbul = map[common.Address]PrecompiledContract{ +@@ -84,9 +84,6 @@ var PrecompiledContractsIstanbul = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, common.BytesToAddress([]byte{9}): &blake2F{}, @@ -12,7 +23,7 @@ index 5988bb15f..c92cbf542 100644 } var PrecompiledContractsNano = map[common.Address]PrecompiledContract{ -@@ -238,13 +235,6 @@ var PrecompiledContractsCancun = map[common.Address]PrecompiledContract{ +@@ -239,13 +236,6 @@ var PrecompiledContractsCancun = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, common.BytesToAddress([]byte{9}): &blake2F{}, common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{}, @@ -25,7 +36,7 @@ index 5988bb15f..c92cbf542 100644 - common.BytesToAddress([]byte{105}): &secp256k1SignatureRecover{}, } - // PrecompiledContractsBLS contains the set of pre-compiled Ethereum + // PrecompiledContractsHaber contains the default set of pre-compiled Ethereum diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index 70c543f14..65716f944 100644 --- a/core/vm/jump_table.go @@ -40,7 +51,7 @@ index 70c543f14..65716f944 100644 enable3860(&instructionSet) // Limit and meter initcode diff --git a/params/protocol_params.go b/params/protocol_params.go -index b84fa148f..97bf6c4d2 100644 +index 65b2d942c..bb085512f 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -23,7 +23,7 @@ import ( @@ -52,3 +63,6 @@ index b84fa148f..97bf6c4d2 100644 MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be. MaxGasLimit uint64 = 0x7fffffffffffffff // Maximum the gas limit (2^63-1). GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block. +-- +2.41.0 + diff --git a/tests/run-evm-tests.sh b/tests/run-evm-tests.sh index 48bfb7f7da..3534be3dd0 100755 --- a/tests/run-evm-tests.sh +++ b/tests/run-evm-tests.sh @@ -11,4 +11,5 @@ echo "PASS",$PASS,"FAIL",$FAIL if [ $FAIL -ne 0 ] then cat fail.log + exit 1 fi diff --git a/trie/sync.go b/trie/sync.go index 589d28364b..5c74dfcc03 100644 --- a/trie/sync.go +++ b/trie/sync.go @@ -229,7 +229,7 @@ func (batch *syncMemBatch) delNode(owner common.Hash, path []byte) { // and reconstructs the trie step by step until all is done. type Sync struct { scheme string // Node scheme descriptor used in database. - database ethdb.KeyValueReader // Persistent database to check for existing entries + database ethdb.Database // Persistent database to check for existing entries membatch *syncMemBatch // Memory buffer to avoid frequent database writes nodeReqs map[string]*nodeRequest // Pending requests pertaining to a trie node path codeReqs map[common.Hash]*codeRequest // Pending requests pertaining to a code hash @@ -238,7 +238,7 @@ type Sync struct { } // NewSync creates a new trie data download scheduler. -func NewSync(root common.Hash, database ethdb.KeyValueReader, callback LeafCallback, scheme string) *Sync { +func NewSync(root common.Hash, database ethdb.Database, callback LeafCallback, scheme string) *Sync { ts := &Sync{ scheme: scheme, database: database, @@ -420,7 +420,7 @@ func (s *Sync) ProcessNode(result NodeSyncResult) error { // Commit flushes the data stored in the internal membatch out to persistent // storage, returning any occurred error. The whole data set will be flushed // in an atomic database batch. -func (s *Sync) Commit(dbw ethdb.Batch) error { +func (s *Sync) Commit(dbw ethdb.Batch, stateBatch ethdb.Batch) error { // Flush the pending node writes into database batch. var ( account int @@ -430,9 +430,17 @@ func (s *Sync) Commit(dbw ethdb.Batch) error { if op.isDelete() { // node deletion is only supported in path mode. if op.owner == (common.Hash{}) { - rawdb.DeleteAccountTrieNode(dbw, op.path) + if stateBatch != nil { + rawdb.DeleteAccountTrieNode(stateBatch, op.path) + } else { + rawdb.DeleteAccountTrieNode(dbw, op.path) + } } else { - rawdb.DeleteStorageTrieNode(dbw, op.owner, op.path) + if stateBatch != nil { + rawdb.DeleteStorageTrieNode(stateBatch, op.owner, op.path) + } else { + rawdb.DeleteStorageTrieNode(dbw, op.owner, op.path) + } } deletionGauge.Inc(1) } else { @@ -441,7 +449,11 @@ func (s *Sync) Commit(dbw ethdb.Batch) error { } else { storage += 1 } - rawdb.WriteTrieNode(dbw, op.owner, op.path, op.hash, op.blob, s.scheme) + if stateBatch != nil { + rawdb.WriteTrieNode(stateBatch, op.owner, op.path, op.hash, op.blob, s.scheme) + } else { + rawdb.WriteTrieNode(dbw, op.owner, op.path, op.hash, op.blob, s.scheme) + } } } accountNodeSyncedGauge.Inc(int64(account)) @@ -546,9 +558,9 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { // the performance impact negligible. var exists bool if owner == (common.Hash{}) { - exists = rawdb.ExistsAccountTrieNode(s.database, append(inner, key[:i]...)) + exists = rawdb.ExistsAccountTrieNode(s.database.StateStoreReader(), append(inner, key[:i]...)) } else { - exists = rawdb.ExistsStorageTrieNode(s.database, owner, append(inner, key[:i]...)) + exists = rawdb.ExistsStorageTrieNode(s.database.StateStoreReader(), owner, append(inner, key[:i]...)) } if exists { s.membatch.delNode(owner, append(inner, key[:i]...)) @@ -687,15 +699,15 @@ func (s *Sync) commitCodeRequest(req *codeRequest) error { func (s *Sync) hasNode(owner common.Hash, path []byte, hash common.Hash) (exists bool, inconsistent bool) { // If node is running with hash scheme, check the presence with node hash. if s.scheme == rawdb.HashScheme { - return rawdb.HasLegacyTrieNode(s.database, hash), false + return rawdb.HasLegacyTrieNode(s.database.StateStoreReader(), hash), false } // If node is running with path scheme, check the presence with node path. var blob []byte var dbHash common.Hash if owner == (common.Hash{}) { - blob, dbHash = rawdb.ReadAccountTrieNode(s.database, path) + blob, dbHash = rawdb.ReadAccountTrieNode(s.database.StateStoreReader(), path) } else { - blob, dbHash = rawdb.ReadStorageTrieNode(s.database, owner, path) + blob, dbHash = rawdb.ReadStorageTrieNode(s.database.StateStoreReader(), owner, path) } exists = hash == dbHash inconsistent = !exists && len(blob) != 0 diff --git a/trie/sync_test.go b/trie/sync_test.go index 7bc68c041f..df2c1f59f1 100644 --- a/trie/sync_test.go +++ b/trie/sync_test.go @@ -27,7 +27,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/ethdb/memorydb" "github.com/ethereum/go-ethereum/trie/trienode" ) @@ -143,7 +142,7 @@ func TestEmptySync(t *testing.T) { emptyD, _ := New(TrieID(types.EmptyRootHash), dbD) for i, trie := range []*Trie{emptyA, emptyB, emptyC, emptyD} { - sync := NewSync(trie.Hash(), memorydb.New(), nil, []*testDb{dbA, dbB, dbC, dbD}[i].Scheme()) + sync := NewSync(trie.Hash(), rawdb.NewMemoryDatabase(), nil, []*testDb{dbA, dbB, dbC, dbD}[i].Scheme()) if paths, nodes, codes := sync.Missing(1); len(paths) != 0 || len(nodes) != 0 || len(codes) != 0 { t.Errorf("test %d: content requested for empty trie: %v, %v, %v", i, paths, nodes, codes) } @@ -212,7 +211,7 @@ func testIterativeSync(t *testing.T, count int, bypath bool, scheme string) { } } batch := diskdb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -278,7 +277,7 @@ func testIterativeDelayedSync(t *testing.T, scheme string) { } } batch := diskdb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -348,7 +347,7 @@ func testIterativeRandomSync(t *testing.T, count int, scheme string) { } } batch := diskdb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -419,7 +418,7 @@ func testIterativeRandomDelayedSync(t *testing.T, scheme string) { } } batch := diskdb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -491,7 +490,7 @@ func testDuplicateAvoidanceSync(t *testing.T, scheme string) { } } batch := diskdb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -563,7 +562,7 @@ func testIncompleteSync(t *testing.T, scheme string) { } } batch := diskdb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -653,7 +652,7 @@ func testSyncOrdering(t *testing.T, scheme string) { } } batch := diskdb.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } batch.Write() @@ -723,7 +722,7 @@ func syncWithHookWriter(t *testing.T, root common.Hash, db ethdb.Database, srcDb } } batch := db.NewBatch() - if err := sched.Commit(batch); err != nil { + if err := sched.Commit(batch, nil); err != nil { t.Fatalf("failed to commit data: %v", err) } if hookWriter != nil {