From 8cf0dd29826f28f6a362033a378aef3fccf7dd49 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Thu, 12 Mar 2026 17:09:12 +0800 Subject: [PATCH 1/5] add commit state for blob revert --- contracts/contracts/l1/rollup/IRollup.sol | 7 ++++ contracts/contracts/l1/rollup/Rollup.sol | 42 ++++++++++++++++++++--- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index 02150042e..d6691cb14 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -187,6 +187,13 @@ interface IRollup { BatchSignatureInput calldata batchSignatureInput ) external payable; + /// @notice Commit batch state when blob hash is already stored (recommit after revert without blob). + /// @dev Requires batchBlobVersionedHashes[nextBatchIndex] != 0. + function commitState( + BatchDataInput calldata batchDataInput, + BatchSignatureInput calldata batchSignatureInput + ) external; + /// @notice Commit a batch with ZKP proof for permissionless submission. /// @dev This function allows anyone to submit batches when the sequencer is offline or censoring. /// diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index d6fa04a25..5ae511a25 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -104,6 +104,10 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /// @dev After this period, anyone can submit batches if sequencers are offline or censoring. uint256 public rollupDelayPeriod; + /// @notice Store blob versioned hash per batch index. Preserved across revertBatch so recommit can reuse. + /// @dev Placed after rollupDelayPeriod for upgrade-safe storage layout (forward compatibility). + mapping(uint256 batchIndex => bytes32 blobVersionedHash) public batchBlobVersionedHashes; + /********************** * Function Modifiers * **********************/ @@ -217,6 +221,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { committedBatches[_batchIndex] = _batchHash; batchDataStore[_batchIndex] = BatchData(block.timestamp, block.timestamp, 0, 0); + batchBlobVersionedHashes[_batchIndex] = BatchHeaderCodecV0.getBlobVersionedHash(memPtr); committedStateRoots[_batchIndex] = _postStateRoot; finalizedStateRoots[_batchIndex] = _postStateRoot; @@ -232,20 +237,38 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput ) external payable override onlyActiveStaker nonReqRevert whenNotPaused { - // check l1msg delay - sequencer must process L1 messages when delayed if ( IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeriod < block.timestamp ) { require(batchDataInput.numL1Messages > 0, "l1msg delay"); } uint256 submitterBitmap = IL1Staking(l1StakingContract).getStakerBitmap(_msgSender()); - _commitBatchWithBatchData(batchDataInput, batchSignatureInput, submitterBitmap); + _commitBatchWithBatchData(batchDataInput, batchSignatureInput, submitterBitmap, true); + } + + /// @inheritdoc IRollup + /// @notice Commit batch state when blob hash is already stored (recommit after revert without blob). + function commitState( + BatchDataInput calldata batchDataInput, + BatchSignatureInput calldata batchSignatureInput + ) external override onlyActiveStaker nonReqRevert whenNotPaused { + (uint256 _batchPtr,) = _loadBatchHeader(batchDataInput.parentBatchHeader); + uint256 _nextBatchIndex = BatchHeaderCodecV0.getBatchIndex(_batchPtr) + 1; + require(batchBlobVersionedHashes[_nextBatchIndex] != bytes32(0), "no stored blob hash for this batch"); + if ( + IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeriod < block.timestamp + ) { + require(batchDataInput.numL1Messages > 0, "l1msg delay"); + } + uint256 submitterBitmap = IL1Staking(l1StakingContract).getStakerBitmap(_msgSender()); + _commitBatchWithBatchData(batchDataInput, batchSignatureInput, submitterBitmap, false); } function _commitBatchWithBatchData( BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput, - uint256 submitterBitmap + uint256 submitterBitmap, + bool requireBlobWhenNoStoredHash ) internal { require(batchDataInput.version == 0 || batchDataInput.version == 1, "invalid version"); require(batchDataInput.prevStateRoot != bytes32(0), "previous state root is zero"); @@ -284,7 +307,14 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { assembly { _batchIndex := add(_batchIndex, 1) // increase batch index } - bytes32 _blobVersionedHash = (blobhash(0) == bytes32(0)) ? ZERO_VERSIONED_HASH : blobhash(0); + // Prefer stored blob hash; when empty: commitBatch requires blob tx, commitBatchWithProof/commitState allow no blob + bytes32 _blobVersionedHash = batchBlobVersionedHashes[_batchIndex]; + if (_blobVersionedHash == bytes32(0) ) { + if (requireBlobWhenNoStoredHash) { + require(blobhash(0) != bytes32(0), "blob required when no stored hash"); + } + _blobVersionedHash = (blobhash(0) == bytes32(0)) ? ZERO_VERSIONED_HASH : blobhash(0); + } { uint256 _headerLength = BatchHeaderCodecV0.BATCH_HEADER_LENGTH; @@ -314,6 +344,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } committedBatches[_batchIndex] = BatchHeaderCodecV0.computeBatchHash(_batchPtr, _headerLength); committedStateRoots[_batchIndex] = batchDataInput.postStateRoot; + batchBlobVersionedHashes[_batchIndex] = _blobVersionedHash; uint256 proveRemainingTime = 0; if (inChallenge) { // Make the batch finalize time longer than the time required for the current challenge @@ -369,7 +400,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } require(rollupDelay || l1MsgQueueDelayed, "invalid timing"); - _commitBatchWithBatchData(batchDataInput, batchSignatureInput,0); + _commitBatchWithBatchData(batchDataInput, batchSignatureInput, 0, false); // get batch data from batch header (uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader); @@ -617,6 +648,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { delete batchDataStore[_batchIndex - 1]; delete committedStateRoots[_batchIndex - 1]; + delete batchBlobVersionedHashes[_batchIndex - 1]; delete challenges[_batchIndex - 1]; emit FinalizeBatch( From 8513bea359f12cb5ce65ff92e6f50f4e202715de Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Fri, 13 Mar 2026 14:07:17 +0800 Subject: [PATCH 2/5] fix(rollup): fix tests for blob-preservation design - Add _setStoredBlobHash helper and BATCH_BLOB_VERSIONED_HASHES_SLOT in L1MessageBaseTest - Preset batchBlobVersionedHashes in tests so commitBatch succeeds without blob tx - test_commitAndFinalizeWithL1Messages_succeeds: set stored blob hash for batch 1 and 2 - test_commitBatches_succeeds: set stored blob hash for batch 1 - test_revertBatch_succeeds: set stored blob hash for batch 1 and 2 - Remove duplicate ZERO_VERSIONED_HASH from RollupCommitBatchWithProofTest Made-with: Cursor --- contracts/contracts/test/Rollup.t.sol | 10 ++++++---- contracts/contracts/test/base/L1MessageBase.t.sol | 10 ++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index 407bbcb91..999a9da2d 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -19,10 +19,7 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { // Slot constants for storage manipulation (from forge inspect Rollup storageLayout) uint256 constant ROLLUP_DELAY_PERIOD_SLOT = 172; // slot for rollupDelayPeriod - - // ZERO_VERSIONED_HASH constant from Rollup contract - bytes32 constant ZERO_VERSIONED_HASH = 0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014; - + function setUp() public virtual override { super.setUp(); @@ -763,6 +760,7 @@ contract RollupCommitBatchTest is L1MessageBaseTest { abi.encodeCall(IL1Staking.getStakerBitmap, (address(0))), abi.encode(2) ); + _setStoredBlobHash(1); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); emit IRollup.CommitBatch(1, bytes32(0xc1862b08d265f073817a8ce0d7cbb426c16d58a86b93464244ab1d027318642e)); @@ -834,6 +832,7 @@ contract RollupCommitBatchTest is L1MessageBaseTest { abi.encodeCall(IL1Staking.getStakerBitmap, (address(0))), abi.encode(2) ); + _setStoredBlobHash(2); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); emit IRollup.CommitBatch(2, bytes32(0x772132c2e12f21bfc5f2792838e480830f2c1dd2be0f3207b159905a9f321038)); @@ -992,6 +991,7 @@ contract RollupTest is L1MessageBaseTest { hevm.stopPrank(); // commit batch with one chunk, no tx, correctly + _setStoredBlobHash(1); hevm.startPrank(alice); batchDataInput = IRollup.BatchDataInput(0, batchHeader0, 1, 0, stateRoot, stateRoot, getTreeRoot()); hevm.deal(address(0), 10 ether); @@ -1029,6 +1029,7 @@ contract RollupTest is L1MessageBaseTest { bytes32 batchHash0 = rollup.committedBatches(0); // commit one batch + _setStoredBlobHash(1); hevm.startPrank(alice); batchDataInput = IRollup.BatchDataInput(0, batchHeader0, 1, 0, stateRoot, stateRoot, bytes32(uint256(4))); rollup.commitBatch(batchDataInput, batchSignatureInput); // first chunk with too many txs @@ -1054,6 +1055,7 @@ contract RollupTest is L1MessageBaseTest { } // commit another batch + _setStoredBlobHash(2); hevm.startPrank(alice); batchDataInput = IRollup.BatchDataInput(0, batchHeader1, 1, 0, stateRoot, stateRoot, bytes32(uint256(4))); diff --git a/contracts/contracts/test/base/L1MessageBase.t.sol b/contracts/contracts/test/base/L1MessageBase.t.sol index c786d9b62..76b716f34 100644 --- a/contracts/contracts/test/base/L1MessageBase.t.sol +++ b/contracts/contracts/test/base/L1MessageBase.t.sol @@ -46,6 +46,16 @@ contract L1MessageBaseTest is CommonTest { address public l1FeeVault = address(3033); + // Rollup storage slot for batchBlobVersionedHashes (forge inspect Rollup storage-layout) + uint256 internal constant BATCH_BLOB_VERSIONED_HASHES_SLOT = 173; + bytes32 internal constant ZERO_VERSIONED_HASH = 0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014; + + /// @dev Sets batchBlobVersionedHashes[batchIndex] so commitBatch can succeed without a blob tx in tests. + function _setStoredBlobHash(uint256 batchIndex) internal { + bytes32 slot = keccak256(abi.encode(batchIndex, BATCH_BLOB_VERSIONED_HASHES_SLOT)); + hevm.store(address(rollup), slot, ZERO_VERSIONED_HASH); + } + function setUp() public virtual override { super.setUp(); hevm.startPrank(multisig); From 6bf30f9cefd655cd9721ddc9c251589e1340c2a1 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Fri, 13 Mar 2026 15:14:52 +0800 Subject: [PATCH 3/5] update bindings --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bin/zkevmverifierv1_deployed.hex | 2 +- bindings/bindings/rollup.go | 85 ++++++++++++++++++++++- bindings/bindings/rollup_more.go | 4 +- bindings/bindings/zkevmverifierv1.go | 35 +++++++++- bindings/bindings/zkevmverifierv1_more.go | 2 +- 6 files changed, 121 insertions(+), 9 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index 5c9b85600..1208b8120 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610ac4578063e3fff1dd14610ad9578063f2fde38b14610af8578063fb1e8b0414610b17575f80fd5b8063d8dc99d214610a71578063ddd8a3dc14610a86578063de8b303514610aa5575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a0b578063ce5db8d614610a1e578063cf9a674514610a33578063d279c19114610a52575f80fd5b8063b8d0a1b0146109ae578063bedb86fb146109cd578063c5553892146109ec575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461093c578063b348442514610951578063b35dac4e14610970578063b3e0a5091461098f575f80fd5b8063a479265d146108dd578063a4f209b0146108f2578063abc8d68d14610911575f80fd5b80638f1d3776116101985780638f1d3776146107af578063910129d41461085f57806397fc007c14610890578063a415d8dc146108af575f80fd5b8063728cdbca1461075a57806388b1ea09146107795780638da5cb5b14610792575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e57806361267290146106dd57806368589dfa146106fc5780636c578c1d14610727578063715018a614610746575f80fd5b80635c975abb1461061a5780635ef7a94a146106315780635f77cf1d14610691575f80fd5b80633e001b661161026e5780633e001b66146105b4578063428868b5146105c95780634e8f1d67146105dc57806357e0af6c146105fb575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a14610595575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c610378366004614b97565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de366004614bc9565b610b2c565b005b3480156103f0575f80fd5b506103e36103ff366004614c27565b610bfe565b34801561040f575f80fd5b5061038c61041e366004614b97565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004614c6f565b610f3a565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c610489366004614b97565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004614cd4565b611434565b3480156104c9575f80fd5b5061038c6104d8366004614b97565b6117bf565b3480156104e8575f80fd5b506103b66104f7366004614b97565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b6610522366004614b97565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d366004614b97565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461057d906001600160a01b031681565b6040516001600160a01b039091168152602001610398565b3480156105a0575f80fd5b50609b5461057d906001600160a01b031681565b3480156105bf575f80fd5b506103b660aa5481565b6103e36105d7366004614cd4565b6117ed565b3480156105e7575f80fd5b506103e36105f6366004614d34565b611ac1565b348015610606575f80fd5b506103e3610615366004614b97565b611d91565b348015610625575f80fd5b5060655460ff1661038c565b34801561063c575f80fd5b5061067161064b366004614b97565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b34801561069c575f80fd5b506106c47f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b3480156106e8575f80fd5b506103e36106f7366004614b97565b611e3c565b348015610707575f80fd5b506103b6610716366004614b97565b60ab6020525f908152604090205481565b348015610732575f80fd5b506103e3610741366004614bc9565b612017565b348015610751575f80fd5b506103e36120d4565b348015610765575f80fd5b506103e3610774366004614de5565b6120e7565b348015610784575f80fd5b5060a65461038c9060ff1681565b34801561079d575f80fd5b506033546001600160a01b031661057d565b3480156107ba575f80fd5b5061081b6107c9366004614b97565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b34801561086a575f80fd5b5061038c610879366004614b97565b5f90815260a4602052604090206003015460ff1690565b34801561089b575f80fd5b506103e36108aa366004614bc9565b6123f0565b3480156108ba575f80fd5b5061038c6108c9366004614bc9565b609f6020525f908152604090205460ff1681565b3480156108e8575f80fd5b506103b660995481565b3480156108fd575f80fd5b506103e361090c366004614b97565b6124d3565b34801561091c575f80fd5b506103b661092b366004614bc9565b60a56020525f908152604090205481565b348015610947575f80fd5b506103b660a85481565b34801561095c575f80fd5b506103e361096b366004614e40565b612583565b34801561097b575f80fd5b506103e361098a366004614bc9565b612887565b34801561099a575f80fd5b506103e36109a9366004614c6f565b6128e0565b3480156109b9575f80fd5b506103e36109c8366004614e40565b612c3d565b3480156109d8575f80fd5b506103e36109e7366004614eb4565b612cc6565b3480156109f7575f80fd5b506103e3610a06366004614b97565b612e04565b6103e3610a19366004614ee6565b612ea7565b348015610a29575f80fd5b506103b660985481565b348015610a3e575f80fd5b506103e3610a4d366004614b97565b613439565b348015610a5d575f80fd5b506103e3610a6c366004614bc9565b6135a8565b348015610a7c575f80fd5b506103b660ac5481565b348015610a91575f80fd5b5060975461057d906001600160a01b031681565b348015610ab0575f80fd5b5061038c610abf366004614b97565b613667565b348015610acf575f80fd5b506103b6609a5481565b348015610ae4575f80fd5b506103e3610af3366004614b97565b6136b1565b348015610b03575f80fd5b506103e3610b12366004614bc9565b613754565b348015610b22575f80fd5b506103b660a95481565b610b346137e1565b6001600160a01b0381165f908152609f602052604090205460ff1615610ba15760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c066137e1565b5f8111610c555760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b98565b5f80610c61858561383b565b915091505f610c74836001015160c01c90565b5f81815260a160205260409020549091508214610cd35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f60a181610ce18785614f3b565b81526020019081526020015f205414610d615760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b98565b609d548111610dd85760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b610de3600182614f4e565b609e555b8315610f3257604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e2f81613667565b15610e8a575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610e7a908490614f3b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610eea575060a85481145b15610ef4575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610de7575b505050505050565b60a85415610f8a5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b610f926138d4565b5f80610f9e848461383b565b915091505f610fb1836001015160c01c90565b5f81815260a1602052604090205490915082146110105760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b611019816117bf565b6110655760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b61106e81613667565b156110bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a4602052604090206003015460ff161561111c5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b98565b5f81815260a2602052604090206001015442101561117c5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b98565b605983015160a05f61118f600185614f4e565b81526020019081526020015f2054146111ea5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f81815260a06020526040902054156112455760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b98565b80609d54600101146112995760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b609d819055600160a35f6112ae866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556112fd6112f0846011015160c01c90565b600985015160c01c613927565b60a25f61130b600184614f4e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906113449084614f4e565b81526020019081526020015f205f905560ad5f6001836113649190614f4e565b81526020019081526020015f205f905560a45f6001836113849190614f4e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611410866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c49190614f61565b6115105760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156115605760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6115686138d4565b5f61157e6115796020850185614f7c565b61383b565b5090505f611590826001015160c01c90565b61159b906001614f3b565b5f81815260ad602052604090205490915061161e5760405162461bcd60e51b815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611682573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a69190614fdd565b6116b09190614f3b565b1015611718575f6116c76080860160608701614ff4565b61ffff16116117185760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611786573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117aa9190614fdd565b90506117b88585835f6139e4565b5050505050565b5f81815260a26020526040812054158015906117e757505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611859573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187d9190614f61565b6118c95760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156119195760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6119216138d4565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611985573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a99190614fdd565b6119b39190614f3b565b1015611a1b575f6119ca6080840160608501614ff4565b61ffff1611611a1b5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aad9190614fdd565b9050611abc83838360016139e4565b505050565b60a85415611b115760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b611b196138d4565b60ac54609e545f90815260a2602052604081205490914291611b3b9190614f3b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb79190614fdd565b611bc19190614f3b565b10905081158015611bcf5750805b15611c36575f611be560808a0160608b01614ff4565b61ffff1611611c365760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b8180611c3f5750805b611c8b5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b98565b611c9788885f806139e4565b5f80611ca3888861383b565b915091505f611cb6836001015160c01c90565b905080609e5414611d095760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214611d655760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f81815260a26020526040902042600190910155611d8483888861411f565b5050505050505050505050565b611d996137e1565b5f81118015611daa57506099548114155b611df65760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b98565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611e5c57505f5460ff8083169116105b611ece5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff831617610100179055611eec5f5460ff1690565b60ff16600214611f3e5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b98565b81611fb15760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b98565b609e545f90815260ab6020526040902054611fda57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b61201f6137e1565b6001600160a01b0381165f908152609f602052604090205460ff166120865760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b98565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bf3565b6120dc6137e1565b6120e55f6142d2565b565b5f54610100900460ff161580801561210557505f54600160ff909116105b8061211e5750303b15801561211e57505f5460ff166001145b6121905760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805460ff1916600117905580156121b1575f805461ff0019166101001790555b6001600160a01b03861615806121ce57506001600160a01b038516155b15612205576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03871661225b5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b98565b61226361433b565b61226b6143bf565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123e7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123f86137e1565b6001600160a01b0381161580159061241e5750609c546001600160a01b03828116911614155b61246a5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b98565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124db6137e1565b5f811180156124eb575060648111155b80156124f9575060a9548114155b6125455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b98565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611e30565b60a854156125d35760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6125db6138d4565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266b9190614f61565b6126b75760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b5f806126c3868661383b565b915091505f6126d6836001015160c01c90565b5f81815260a1602052604090205490915082146127355760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b61273e81613667565b61278a5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916127c691614f3b565b1161283c575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261283791839190614443565b6123e7565b61284783868661411f565b6123e781336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061459f565b61288f6137e1565b60aa80545f9091556128a1828261466b565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611e30565b6128e86137e1565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561295f5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b98565b5f8061296b848461383b565b915091505f61297e836001015160c01c90565b905080156129ce5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b98565b5f6129da846079015190565b905080612a295760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b98565b600984015160c01c15612a7e5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b98565b5f612a8a856019015190565b03612ad75760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b98565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612b03856039015190565b14612b505760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b98565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80612c49868661383b565b915091505f612c5c836001015160c01c90565b5f81815260a160205260409020549091508214612cbb5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6123e783868661411f565b612cce6137e1565b8015612dd257612cdc614714565b60a65460ff1615612d915760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612d30908490614f3b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612dda61476e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612db4565b50565b612e0c6137e1565b5f81118015612e1d575060ac548114155b612e695760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b98565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611e30565b335f908152609f602052604090205460ff16612f055760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b98565b60a85415612f555760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b612f5d6138d4565b60a65460ff1615612fb05760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b98565b8167ffffffffffffffff16609d541061300b5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a1602052604090205481146130725760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6130858267ffffffffffffffff166117bf565b6130d15760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b03161561314c5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a2602052604090206001015442106131dc5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b98565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561322c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132509190614fdd565b34101561329f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516133b791815260200190565b60405180910390a35f609d5460016133cf9190614f3b565b90505b609e548111613427578267ffffffffffffffff168114613415576099545f82815260a260205260408120600101805490919061340f908490614f3b565b90915550505b8061341f81615015565b9150506133d2565b505060a6805460ff1916600117905550565b5f54600390610100900460ff1615801561345957505f5460ff8083169116105b6134cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff83161761010017815582900361352d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b98565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b335f90815260a56020526040812054908190036136075760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b98565b335f90815260a56020526040812055613620828261466b565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161365b91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906117e75750505f90815260a46020526040902060030154610100900460ff161590565b6136b96137e1565b5f811180156136ca57506098548114155b6137165760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b98565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611e30565b61375c6137e1565b6001600160a01b0381166137d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b98565b612e01816142d2565b6033546001600160a01b031633146120e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b98565b5f805f61384885856147a7565b90505f8160ff165f036138695761385f8686614817565b90945090506138c6565b8160ff1660010361387e5761385f8686614880565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b98565b808420925050509250929050565b60655460ff16156120e55760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b98565b805f03613932575050565b8082035f5b828110156139de5761010081840381111561395157508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156139b4575f80fd5b505af11580156139c6573d5f803e3d5ffd5b50505050610100830192505061010081019050613937565b50505050565b6139f1602085018561504c565b60ff161580613a0f5750613a08602085018561504c565b60ff166001145b613a5b5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b98565b6080840135613aac5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b98565b60a0840135613afd5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b98565b5f80613b0f6115796020880188614f7c565b915091505f613b22836001015160c01c90565b90505f60a181613b33846001614f3b565b81526020019081526020015f205414613b8e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b98565b609e548114613bdf5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214613c3b5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b98565b5f81815260ab6020526040902054608088013514613c9b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f613caa846011015160c01c90565b90505f613cd6613cc060608b0160408c0161506c565b613cd060808c0160608d01614ff4565b846148d3565b9050613ce860808a0160608b01614ff4565b6001939093015f81815260ad6020526040902054909361ffff16929092019180613db9578615613d86575f49613d865760405162461bcd60e51b815260206004820152602160248201527f626c6f62207265717569726564207768656e206e6f2073746f7265642068617360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f4915613d94575f49613db6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b60f9613dc860208c018c61504c565b60ff16600103613dd757506101015b604080518281019091529650613dfc87613df460208e018e61504c565b60ff16614917565b60c085901b6001880152613e2a87613e1a60808e0160608f01614ff4565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b01356099880152613e8e87613e6f60208d018d614f7c565b604051613e7d929190615085565b604051809103902060b99190910152565b60d987018690526001613ea460208d018d61504c565b60ff1610613ed657613ed687613ec060608e0160408f0161506c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff1615613f3f5760a7545f90815260a460205260409020600201546099544291613f3291614f3b565b613f3c9190614f4e565b90505b60405180608001604052804281526020018260985442613f5f9190614f3b565b613f699190614f3b565b81526020018d6040016020810190613f81919061506c565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e8790556097546001600160a01b031692506374fe27b791508b3590613ffb90613ff5908e018e614f7c565b5f61491e565b5f61400960408f018f614f7c565b6040518663ffffffff1660e01b81526004016140299594939291906150db565b602060405180830381865afa158015614044573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140689190614f61565b6140da5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b8061416c5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b98565b5f61417b846001015160c01c90565b90505f614189856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006141b8876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a84861427a885160f81c90565b858888866040518663ffffffff1660e01b815260040161429e95949392919061514e565b5f6040518083038186803b1580156142b4575f80fd5b505afa1580156142c6573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166143b75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5614972565b5f54610100900460ff1661443b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e56149fa565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156144c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144eb9190614fdd565b5f86815260a4602052604090206001015490915061450a908290614f3b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614549908490614f3b565b909155505060405161455c90849061517f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906145c390846151ab565b6145cd91906151c2565b90506145d98183614f4e565b60aa5f8282546145e99190614f3b565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614615908490614f3b565b909155505060405161462890849061517f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614710575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146146ba576040519150601f19603f3d011682016040523d82523d5f602084013e6146bf565b606091505b5050905080611abc5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b98565b5050565b61471c6138d4565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586147513390565b6040516001600160a01b03909116815260200160405180910390a1565b614776614a7f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614751565b5f816147f55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b98565b82825f818110614807576148076151fa565b919091013560f81c949350505050565b5f8160f981101561486a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b98565b6040519150808483378082016040529250929050565b5f81610101811461486a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b98565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016149088161ffff871686614ad1565b82900390912095945050505050565b8082535050565b60605f80808080614931888a018a615314565b955095509550955095505081871061494f57945061496b9350505050565b83871061496357829550505050505061496b565b509293505050505b9392505050565b5f54610100900460ff166149ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6065805460ff19169055565b5f54610100900460ff16614a765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5336142d2565b60655460ff166120e55760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b98565b5f825f03614ae057508261496b565b609b546001600160a01b03165f5b84811015614b8d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b789190614fdd565b87525060209095019460019384019301614aee565b5093949350505050565b5f60208284031215614ba7575f80fd5b5035919050565b80356001600160a01b0381168114614bc4575f80fd5b919050565b5f60208284031215614bd9575f80fd5b61496b82614bae565b5f8083601f840112614bf2575f80fd5b50813567ffffffffffffffff811115614c09575f80fd5b602083019150836020828501011115614c20575f80fd5b9250929050565b5f805f60408486031215614c39575f80fd5b833567ffffffffffffffff811115614c4f575f80fd5b614c5b86828701614be2565b909790965060209590950135949350505050565b5f8060208385031215614c80575f80fd5b823567ffffffffffffffff811115614c96575f80fd5b614ca285828601614be2565b90969095509350505050565b5f60e08284031215614cbe575f80fd5b50919050565b5f60608284031215614cbe575f80fd5b5f8060408385031215614ce5575f80fd5b823567ffffffffffffffff80821115614cfc575f80fd5b614d0886838701614cae565b93506020850135915080821115614d1d575f80fd5b50614d2a85828601614cc4565b9150509250929050565b5f805f805f8060808789031215614d49575f80fd5b863567ffffffffffffffff80821115614d60575f80fd5b614d6c8a838b01614cae565b97506020890135915080821115614d81575f80fd5b614d8d8a838b01614cc4565b96506040890135915080821115614da2575f80fd5b614dae8a838b01614be2565b90965094506060890135915080821115614dc6575f80fd5b50614dd389828a01614be2565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614dfa575f80fd5b614e0387614bae565b9550614e1160208801614bae565b9450614e1f60408801614bae565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614e53575f80fd5b843567ffffffffffffffff80821115614e6a575f80fd5b614e7688838901614be2565b90965094506020870135915080821115614e8e575f80fd5b50614e9b87828801614be2565b95989497509550505050565b8015158114612e01575f80fd5b5f60208284031215614ec4575f80fd5b813561496b81614ea7565b803567ffffffffffffffff81168114614bc4575f80fd5b5f8060408385031215614ef7575f80fd5b614f0083614ecf565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117e7576117e7614f0e565b818103818111156117e7576117e7614f0e565b5f60208284031215614f71575f80fd5b815161496b81614ea7565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614faf575f80fd5b83018035915067ffffffffffffffff821115614fc9575f80fd5b602001915036819003821315614c20575f80fd5b5f60208284031215614fed575f80fd5b5051919050565b5f60208284031215615004575f80fd5b813561ffff8116811461496b575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504557615045614f0e565b5060010190565b5f6020828403121561505c575f80fd5b813560ff8116811461496b575f80fd5b5f6020828403121561507c575f80fd5b61496b82614ecf565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156151255784516001600160a01b031683529383019391830191600101615100565b50508760408601528481036060860152615140818789615094565b9a9950505050505050505050565b858152846020820152608060408201525f61516d608083018587615094565b90508260608301529695505050505050565b5f82515f5b8181101561519e5760208186018101518583015201615184565b505f920191825250919050565b80820281158282048414176117e7576117e7614f0e565b5f826151f5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615263575f80fd5b8135602067ffffffffffffffff8083111561528057615280615227565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156152c3576152c3615227565b60405293845260208187018101949081019250878511156152e2575f80fd5b6020870191505b84821015615309576152fa82614bae565b835291830191908301906152e9565b979650505050505050565b5f805f805f8060c08789031215615329575f80fd5b86359550602087013567ffffffffffffffff80821115615347575f80fd5b6153538a838b01615254565b965060408901359550606089013591508082111561536f575f80fd5b61537b8a838b01615254565b94506080890135935060a0890135915080821115615397575f80fd5b506153a489828a01615254565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bin/zkevmverifierv1_deployed.hex b/bindings/bin/zkevmverifierv1_deployed.hex index 98a2f4515..7c168f402 100644 --- a/bindings/bin/zkevmverifierv1_deployed.hex +++ b/bindings/bin/zkevmverifierv1_deployed.hex @@ -1 +1 @@ -0x608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636b61d8e7116100585780636b61d8e7146100d45780637e4f7a8a146100e7578063a48fd34b1461010a578063c8bd01761461011d575f80fd5b806309665ee71461007e5780632a5104361461009957806341493c60146100bf575b5f80fd5b6100865f5481565b6040519081526020015b60405180910390f35b7fffea2d2e12ed24da258af874d77eee7ee91a1e050ee197052908089e57681e67610086565b6100d26100cd366004612cb5565b610130565b005b6100866100e2366004612d29565b61033e565b6100fa6100f5366004612d68565b6103ba565b6040519015158152602001610090565b6100d2610118366004612dfa565b612b74565b6100d261012b366004612e61565b612be1565b5f61013e6004828486612ea9565b61014791612ed0565b90507fffea2d2e12ed24da258af874d77eee7ee91a1e050ee197052908089e57681e677fffea2d2e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610215576040517f988066a10000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000080841660048301528216602482015260440160405180910390fd5b5f610220878761033e565b6040805160028082526060820183529293505f929091602083019080368337019050509050885f1c815f8151811061025a5761025a612f18565b602002602001018181525050815f1c8160018151811061027c5761027c612f18565b60209081029190910101525f30637e4f7a8a61029b886004818c612ea9565b856040518463ffffffff1660e01b81526004016102ba93929190612f8c565b602060405180830381865afa1580156102d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f99190612fe3565b905080610332576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b5f7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f1b60028484604051610374929190613009565b602060405180830381855afa15801561038f573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103b29190613018565b169392505050565b5f60405161024081016103cc846107fd565b6103d68585610810565b6103df8661085f565b6103e887610875565b5f6103f486868a610a0f565b90506103ff81610d46565b905061040b8189610dac565b90506104178189610e3a565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061046e84630100000085612b16565b086101c084015250610481818587610ea5565b61048c82868a61121a565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101a0840152506104c390506115bf565b6104cc8661270a565b6104d58661265b565b6104de86612282565b6104e786611dad565b6104f086611b0e565b6104f986611710565b61020001519050612b6c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6572726f722070616972696e67000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b6002811461080d5761080d610505565b50565b5f5b8181101561085a577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008335111561084b5761084b6105c3565b60209290920191600101610812565b505050565b61036081811461087157610871610622565b5050565b61018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156108ab576108ab610681565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156108e2576108e2610681565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561091957610919610681565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561095057610950610681565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561098757610987610681565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109be576109be610681565b5061030081015f5b600181101561085a577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000082351115610a0057610a00610681565b602091909101906001016109c6565b5f60405161024081016467616d6d6181527f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f7460208201527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e60408201527f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c2760608201527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f60808201527f2d22aa21883e2c02aeefdbb41a89e31305b7f785cff8d2543de3d2de0e67eb3760a08201527f27f57efe361342b4447b60b663324f47b268d2168a44b2c5a1ae943ad783eac260c08201527f07461bbeeaa489f270aea1e2f15a0b17a6828ee15568ca45d23b104609c983ac60e08201527f2a5d601b3c029f586ccf3d13f9610ec159fd271dff812606f3ac634637decbed6101008201527f2d8762fae30474b2d6707bfab8b02b7e87114c06452e946f685c3fe31af51d296101208201527f0481025548775a91bbce4d119d9f3d49f792d894182ded35400d7877bc7b1d086101408201527f072bde4706c1f31ca6f9d00281492fb765e066e2a91394829338eb8a728571566101608201527f035d79829b0c4f17f1ead06dc0dad3190dc3e0916d488882dbce96e970d9fa356101808201527f280dc265bff4759e2bfe552f6792226bc2667a39e5560316abd8825bc8ebc10a6101a08201527f1aacdb7d7cc8e54875efbcbd34b7149ed44fcdb0728e026f4369e7d48cfac8b06101c08201527f1d0dcabaa449cc5f2655bea87941c30e5a3be902444b9162918506600eacd3076101e08201527f1b00b88b20052a37c14a3beadb4c419bef8c04cc395f0566b50f0bf1090ce5746102008201527f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a6102208201527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa905080610d1057610d1061073f565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b5f60405161024060405101636265746181528360208201526020816024601c840160025afa80610d7857610d7861073f565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b5f60405161024060405101606564616c7068618252602082018681526020810190506103208601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610e0b57610e0b61073f565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161024060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610e7557610e7561073f565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b5f60405160608101516101c0820151915085610ec381878585610f3e565b5f92505f91505b85821015610f34577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610eca565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1183096001855f5b8681101561102c577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b8409925060209190910190600101610f87565b506110388187896110f0565b5060019050855f5b868110156110e6577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b84099250600101611040565b5050505050505050565b600183525f805b838110156111455781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099050602084019350808488015250506001810190506110f7565b5060208103820191508084019350506111866020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001038551612b16565b5f5b838110156112135760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101611188565b5050505050565b5f60405160608101516101c0820151915061032084015f8061124289602085013585356113c6565b91506112558962a350ce8a01878761128b565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b5f6112b785857f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b612b16565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1182099050611370867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff87612b16565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b5f83525f602084015280604084015250806060830152505f6080820153603060818201535f60828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201535f602082608f8460025afa8061145c5761145c61073f565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa9150816114d2576114d261073f565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806115535761155361073f565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610240604051016101c08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103606085015108611645837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff83612b16565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b60405161024081016101608201518152610180820151602082015261028083013560408201526102a08301356060820152610220830135608082015261024083013560a08201526102c083013560c08201526102e083013560e082015260608201516101008201526101e08201516101208201526020816101408360025afa8061179c5761179c61079e565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182510690508160408101925061028085013581526102a085013560208201526117ec83836102c0880184612a7d565b61016084016118018484610220890184612a7d565b610140850161181584610260890183612ac4565b7f1fa4be93b5e7f7e674d5059b63554fab99638b304ed8310e9fa44c281ac9b03b85527f1a01ae7fac6228e39d3cb5a5e71fd31160f3241e79a5f48ffb3737e6c389b7216020860152805160408087019182529095908160608160075afa9150816118825761188261073f565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470382526118ba86828586612974565b5050836040850194506118d78560608801516102808a0184612a0b565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868509935061195785856102c08a0184612a7d565b61196385828485612974565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f22f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a486101008401527f2a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb6101208401527f159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f86101408401527f0efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b3610160840152925061085a90508160405160205f6101808460085afa80611b0057611b006106e0565b505f51610200919091015250565b6040516101e081015160e08201516101608301908152610100830151610180840152610120830151610140840152610240830191610260840191610280850191908190611b5d86838a84612a7d565b611b70826101808a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611ba5868360408b0184612a7d565b611bb8826101a08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611bed868360808b0184612a7d565b611c00826101c08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f7486527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e8552611c7884838884612a36565b611c8b826101e08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c2786527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f8552611d0384838884612a36565b611d16826102008a016101408a01612ac4565b61030088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a87527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c8652611d9385848985612a36565b611da283826101408b01612ac4565b505050505050505050565b6040516467616d6d616102408201908152606082015161026083015260e08201516102808301526101008201516102a083015260c0836102c08401377f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f746101408201527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e6101608201527f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c27610180808301919091527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f6101a0808401919091527f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a6101c0808501919091527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c6101e0808601919091526101208601516102008087019190915293870135610220860152918601356102408501528501356102608401528401356102808301528301356102a08201526102c081016103008401602081833750610260840135602091820152601b906102e5906101e085018285850160025afa9250505080611f6357611f6361073f565b506101e00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610240604051017f07461bbeeaa489f270aea1e2f15a0b17a6828ee15568ca45d23b104609c983ac81527f2a5d601b3c029f586ccf3d13f9610ec159fd271dff812606f3ac634637decbed6020820152611ffc604082016101808501358360e086016129e0565b7f2d8762fae30474b2d6707bfab8b02b7e87114c06452e946f685c3fe31af51d2981527f0481025548775a91bbce4d119d9f3d49f792d894182ded35400d7877bc7b1d08602082015261205c604082016101a08501358360e08601612a36565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f072bde4706c1f31ca6f9d00281492fb765e066e2a91394829338eb8a7285715682527f035d79829b0c4f17f1ead06dc0dad3190dc3e0916d488882dbce96e970d9fa3560208301526120e560408301828460e08701612a36565b507f280dc265bff4759e2bfe552f6792226bc2667a39e5560316abd8825bc8ebc10a81527f1aacdb7d7cc8e54875efbcbd34b7149ed44fcdb0728e026f4369e7d48cfac8b06020820152612146604082016101c08501358360e08601612a36565b7f1d0dcabaa449cc5f2655bea87941c30e5a3be902444b9162918506600eacd30781527f1b00b88b20052a37c14a3beadb4c419bef8c04cc395f0566b50f0bf1090ce57460208201526121a1604082018260e0850180612974565b610300830161032084015f5b60018110156121ed5781358452602082013560208501526121d76040850184358660e08901612a36565b60209290920191604091909101906001016121ad565b5050507f2d22aa21883e2c02aeefdbb41a89e31305b7f785cff8d2543de3d2de0e67eb3781527f27f57efe361342b4447b60b663324f47b268d2168a44b2c5a1ae943ad783eac2602082015261224b60408201858360e08601612a36565b6102208301358152610240830135602082015261227060408201868360e08601612a36565b6112138160a0840160e0850180612974565b6040516020810151604082015160608301515f8401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061033288828c611f92565b60405160026301000000016102406040510161267c81836060860151612b16565b91506126918183610140870160a08701612a0b565b6126a481610100860160a08601806129aa565b6126b3818360a08601806129e0565b6126c58160c0860160a08601806129aa565b6126dc816101c085015160a0860160a087016129e0565b505060c00180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703905250565b6040515f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040830151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180840135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040840151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0850135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f840151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850135830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840151830860808401519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190810391508183087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036101209390930192909252505050565b8151845260208201516020850152825160408501526020830151606085015260408160808660065afa8061121357611213610564565b8151845260208201516020850152823560408501526020830135606085015260408160808660065afa8061121357611213610564565b815184526020820151602085015282604085015260408160608660075afa8061121357611213610564565b813584526020820135602085015282604085015260408160608660075afa8061121357611213610564565b815184526020820151602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa168061121357611213610564565b813584526020808301359085015260408481018490528460608160075afa815160408601526020820151606086015260408260808760065afa168061121357611213610564565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08201525f60208260c08460055afa50505190565b949350505050565b5f546040517f41493c6000000000000000000000000000000000000000000000000000000000815230916341493c6091612bb99190869086908a908a9060040161302f565b5f6040518083038186803b158015612bcf575f80fd5b505afa1580156110e6573d5f803e3d5ffd5b3073ffffffffffffffffffffffffffffffffffffffff1663a48fd34b848484604051602001612c1291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612c3f93929190613067565b5f6040518083038186803b158015612c55575f80fd5b505afa158015612c67573d5f803e3d5ffd5b50505050505050565b5f8083601f840112612c80575f80fd5b50813567ffffffffffffffff811115612c97575f80fd5b602083019150836020828501011115612cae575f80fd5b9250929050565b5f805f805f60608688031215612cc9575f80fd5b85359450602086013567ffffffffffffffff80821115612ce7575f80fd5b612cf389838a01612c70565b90965094506040880135915080821115612d0b575f80fd5b50612d1888828901612c70565b969995985093965092949392505050565b5f8060208385031215612d3a575f80fd5b823567ffffffffffffffff811115612d50575f80fd5b612d5c85828601612c70565b90969095509350505050565b5f805f8060408587031215612d7b575f80fd5b843567ffffffffffffffff80821115612d92575f80fd5b612d9e88838901612c70565b90965094506020870135915080821115612db6575f80fd5b818701915087601f830112612dc9575f80fd5b813581811115612dd7575f80fd5b8860208260051b8501011115612deb575f80fd5b95989497505060200194505050565b5f805f8060408587031215612e0d575f80fd5b843567ffffffffffffffff80821115612e24575f80fd5b612e3088838901612c70565b90965094506020870135915080821115612e48575f80fd5b50612e5587828801612c70565b95989497509550505050565b5f805f60408486031215612e73575f80fd5b833567ffffffffffffffff811115612e89575f80fd5b612e9586828701612c70565b909790965060209590950135949350505050565b5f8085851115612eb7575f80fd5b83861115612ec3575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015612f105780818660040360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612f9f604083018587612f45565b8281036020848101919091528451808352858201928201905f5b81811015612fd557845183529383019391830191600101612fb9565b509098975050505050505050565b5f60208284031215612ff3575f80fd5b81518015158114613002575f80fd5b9392505050565b818382375f9101908152919050565b5f60208284031215613028575f80fd5b5051919050565b858152606060208201525f613048606083018688612f45565b828103604084015261305b818587612f45565b98975050505050505050565b604081525f61307a604083018587612f45565b60208382038185015284518083525f5b818110156130a557868101830151848201840152820161308a565b505f838201830152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019594505050505056fea164736f6c6343000818000a +0x608060405234801561000f575f80fd5b5060043610610085575f3560e01c80637e4f7a8a116100585780637e4f7a8a146100f2578063a48fd34b14610115578063c8bd017614610128578063ffa1ad741461013b575f80fd5b806309665ee7146100895780632a510436146100a457806341493c60146100ca5780636b61d8e7146100df575b5f80fd5b6100915f5481565b6040519081526020015b60405180910390f35b7fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e7610091565b6100dd6100d8366004612d64565b61017a565b005b6100916100ed366004612dd8565b610388565b610105610100366004612e17565b610404565b604051901515815260200161009b565b6100dd610123366004612ea9565b612c23565b6100dd610136366004612f10565b612c90565b604080518082018252600681527f76352e302e3000000000000000000000000000000000000000000000000000006020820152905161009b9190612fb9565b5f6101886004828486612fd2565b61019191612ff9565b90507fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e77fd4e8ecd2000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461025f576040517f988066a10000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000080841660048301528216602482015260440160405180910390fd5b5f61026a8787610388565b6040805160028082526060820183529293505f929091602083019080368337019050509050885f1c815f815181106102a4576102a4613041565b602002602001018181525050815f1c816001815181106102c6576102c6613041565b60209081029190910101525f30637e4f7a8a6102e5886004818c612fd2565b856040518463ffffffff1660e01b8152600401610304939291906130b5565b602060405180830381865afa15801561031f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610343919061310c565b90508061037c576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b5f7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f1b600284846040516103be92919061312b565b602060405180830381855afa1580156103d9573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103fc919061313a565b169392505050565b5f6040516102408101610416846108a6565b61042085856108b9565b61042986610908565b6104328761091e565b5f61043e86868a610ab8565b905061044981610dee565b90506104558189610e54565b90506104618189610ee2565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006104b884630100000085612bb8565b086101c0840152506104cb818587610f4d565b6104d682868a6112c2565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101a08401525061050d9050611667565b610516866127ac565b61051f866126fd565b61052886612324565b61053186611e50565b61053a86611bb6565b610543866117b8565b61020001519050612c1b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f72206d6f6420657870000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6572726f722070616972696e67000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b600281146108b6576108b661054f565b50565b5f5b81811015610903577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000833511156108f4576108f461066c565b602092909201916001016108bb565b505050565b61036081811461091a5761091a6106cb565b5050565b61018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109545761095461072a565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561098b5761098b61072a565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109c2576109c261072a565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109f9576109f961072a565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610a3057610a3061072a565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610a6757610a6761072a565b5061030081015f5b6001811015610903577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000082351115610aa957610aa961072a565b60209190910190600101610a6f565b5f60405161024081016467616d6d6181527f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a60208201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb960408201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a60608201527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd060808201527f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f60a08201527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c2960c08201527f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd60e08201527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be6101008201527f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a6101208201527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d6101408201527f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f6101608201527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e6101808201527f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b776101a08201527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf6101c08201527f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf1366101e08201527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f36102008201527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6102208201527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d79610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa905080610db857610db86107e8565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b5f60405161024060405101636265746181528360208201526020816024601c840160025afa80610e2057610e206107e8565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b5f60405161024060405101606564616c7068618252602082018681526020810190506103208601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610eb357610eb36107e8565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161024060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610f1d57610f1d6107e8565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b5f60405160608101516101c0820151915085610f6b81878585610fe6565b5f92505f91505b85821015610fdc577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610f72565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1183096001855f5b868110156110d4577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b840992506020919091019060010161102f565b506110e0818789611198565b5060019050855f5b8681101561118e577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b840992506001016110e8565b5050505050505050565b600183525f805b838110156111ed5781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990506020840193508084880152505060018101905061119f565b50602081038201915080840193505061122e6020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001038551612bb8565b5f5b838110156112bb5760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101611230565b5050505050565b5f60405160608101516101c0820151915061032084015f806112ea896020850135853561146e565b91506112fd8962a653508a018787611333565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b5f61135f85857f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b612bb8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1182099050611418867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff87612bb8565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b5f83525f602084015280604084015250806060830152505f6080820153603060818201535f60828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201535f602082608f8460025afa80611504576115046107e8565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa91508161157a5761157a6107e8565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806115fb576115fb6107e8565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610240604051016101c08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036060850151086116ed837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff83612bb8565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b60405161024081016101608201518152610180820151602082015261028083013560408201526102a08301356060820152610220830135608082015261024083013560a08201526102c083013560c08201526102e083013560e082015260608201516101008201526101e08201516101208201526020816101408360025afa8061184457611844610847565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182510690508160408101925061028085013581526102a0850135602082015261189483836102c0880184612b1f565b61016084016118a98484610220890184612b1f565b61014085016118bd84610260890183612b66565b7f1fa4be93b5e7f7e674d5059b63554fab99638b304ed8310e9fa44c281ac9b03b85527f1a01ae7fac6228e39d3cb5a5e71fd31160f3241e79a5f48ffb3737e6c389b7216020860152805160408087019182529095908160608160075afa91508161192a5761192a6107e8565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703825261196286828586612a16565b50508360408501945061197f8560608801516102808a0184612aad565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186850993506119ff85856102c08a0184612b1f565b611a0b85828485612a16565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f22f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a486101008401527f2a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb6101208401527f159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f86101408401527f0efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b3610160840152925061090390508160405160205f6101808460085afa80611ba857611ba8610789565b505f51610200919091015250565b6040516102406040510160208101604082016101e084015180610160860160e08701518152610100870151610180880152610120870151610140880152611c0186835f8b0184612b1f565b611c14826101808a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611c49868360408b0184612b1f565b611c5c826101a08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611c91868360808b0184612b1f565b611ca4826101c08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a86527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb98552611d1c84838884612ad8565b611d2f826101e08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a86527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd08552611da684838884612ad8565b611db9826102008a016101408a01612b66565b61030088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe87527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d798652611e3685848985612ad8565b611e4583826101408b01612b66565b505050505050505050565b6040516467616d6d616102408201908152606082015161026083015260e08201516102808301526101008201516102a083015260c0836102c08401377f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a6101408201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb96101608201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a610180808301919091527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd06101a0808401919091527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6101c0808501919091527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d796101e0808601919091526101208601516102008087019190915293870135610220860152918601356102408501528501356102608401528401356102808301528301356102a08201526102c081016103008401602081833750610260840135602091820152601b906102e5906101e085018285850160025afa9250505080612005576120056107e8565b506101e00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610240604051017f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd81527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be602082015261209e604082016101808501358360e08601612a82565b7f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a81527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d60208201526120fe604082016101a08501358360e08601612ad8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f82527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e602083015261218760408301828460e08701612ad8565b507f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b7781527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf60208201526121e8604082016101c08501358360e08601612ad8565b7f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf13681527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f36020820152612243604082018260e0850180612a16565b610300830161032084015f5b600181101561228f5781358452602082013560208501526122796040850184358660e08901612ad8565b602092909201916040919091019060010161224f565b5050507f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f81527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c2960208201526122ed60408201858360e08601612ad8565b6102208301358152610240830135602082015261231260408201868360e08601612ad8565b6112bb8160a0840160e0850180612a16565b6040516020810151604082015160608301515f8401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061037c88828c612034565b60405160026301000000016102406040510161271e81836060860151612bb8565b91506127338183610140870160a08701612aad565b61274681610100860160a0860180612a4c565b612755818360a0860180612a82565b6127678160c0860160a0860180612a4c565b61277e816101c085015160a0860160a08701612a82565b505060c00180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703905250565b6040515f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040830151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180840135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040840151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0850135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f840151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850135830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840151830860808401519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190810391508183087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036101209390930192909252505050565b8151845260208201516020850152825160408501526020830151606085015260408160808660065afa806112bb576112bb61060d565b8151845260208201516020850152823560408501526020830135606085015260408160808660065afa806112bb576112bb61060d565b815184526020820151602085015282604085015260408160608660075afa806112bb576112bb61060d565b813584526020820135602085015282604085015260408160608660075afa806112bb576112bb61060d565b815184526020820151602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa16806112bb576112bb61060d565b813584526020820135602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa16806112bb576112bb61060d565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08201525f60208260c08460055afa80612c1557612c156105ae565b50505190565b949350505050565b5f546040517f41493c6000000000000000000000000000000000000000000000000000000000815230916341493c6091612c689190869086908a908a90600401613151565b5f6040518083038186803b158015612c7e575f80fd5b505afa15801561118e573d5f803e3d5ffd5b3073ffffffffffffffffffffffffffffffffffffffff1663a48fd34b848484604051602001612cc191815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612cee93929190613189565b5f6040518083038186803b158015612d04575f80fd5b505afa158015612d16573d5f803e3d5ffd5b50505050505050565b5f8083601f840112612d2f575f80fd5b50813567ffffffffffffffff811115612d46575f80fd5b602083019150836020828501011115612d5d575f80fd5b9250929050565b5f805f805f60608688031215612d78575f80fd5b85359450602086013567ffffffffffffffff80821115612d96575f80fd5b612da289838a01612d1f565b90965094506040880135915080821115612dba575f80fd5b50612dc788828901612d1f565b969995985093965092949392505050565b5f8060208385031215612de9575f80fd5b823567ffffffffffffffff811115612dff575f80fd5b612e0b85828601612d1f565b90969095509350505050565b5f805f8060408587031215612e2a575f80fd5b843567ffffffffffffffff80821115612e41575f80fd5b612e4d88838901612d1f565b90965094506020870135915080821115612e65575f80fd5b818701915087601f830112612e78575f80fd5b813581811115612e86575f80fd5b8860208260051b8501011115612e9a575f80fd5b95989497505060200194505050565b5f805f8060408587031215612ebc575f80fd5b843567ffffffffffffffff80821115612ed3575f80fd5b612edf88838901612d1f565b90965094506020870135915080821115612ef7575f80fd5b50612f0487828801612d1f565b95989497509550505050565b5f805f60408486031215612f22575f80fd5b833567ffffffffffffffff811115612f38575f80fd5b612f4486828701612d1f565b909790965060209590950135949350505050565b5f81518084525f5b81811015612f7c57602081850181015186830182015201612f60565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612fcb6020830184612f58565b9392505050565b5f8085851115612fe0575f80fd5b83861115612fec575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156130395780818660040360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6130c860408301858761306e565b8281036020848101919091528451808352858201928201905f5b818110156130fe578451835293830193918301916001016130e2565b509098975050505050505050565b5f6020828403121561311c575f80fd5b81518015158114612fcb575f80fd5b818382375f9101908152919050565b5f6020828403121561314a575f80fd5b5051919050565b858152606060208201525f61316a60608301868861306e565b828103604084015261317d81858761306e565b98975050505050505050565b604081525f61319c60408301858761306e565b82810360208401526131ae8185612f58565b969550505050505056fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 81d257d11..46d87d00a 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,8 +49,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateRollupDelayPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b5060405162004fb038038062004fb083398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e526200015e5f395f81816106370152613c210152614e525ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateRollupDelayPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchBlobVersionedHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobVersionedHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveCommittedBatchState\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b506040516200551c3803806200551c83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516153be6200015e5f395f81816106a2015261418e01526153be5ff3fe608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610ac4578063e3fff1dd14610ad9578063f2fde38b14610af8578063fb1e8b0414610b17575f80fd5b8063d8dc99d214610a71578063ddd8a3dc14610a86578063de8b303514610aa5575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a0b578063ce5db8d614610a1e578063cf9a674514610a33578063d279c19114610a52575f80fd5b8063b8d0a1b0146109ae578063bedb86fb146109cd578063c5553892146109ec575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461093c578063b348442514610951578063b35dac4e14610970578063b3e0a5091461098f575f80fd5b8063a479265d146108dd578063a4f209b0146108f2578063abc8d68d14610911575f80fd5b80638f1d3776116101985780638f1d3776146107af578063910129d41461085f57806397fc007c14610890578063a415d8dc146108af575f80fd5b8063728cdbca1461075a57806388b1ea09146107795780638da5cb5b14610792575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e57806361267290146106dd57806368589dfa146106fc5780636c578c1d14610727578063715018a614610746575f80fd5b80635c975abb1461061a5780635ef7a94a146106315780635f77cf1d14610691575f80fd5b80633e001b661161026e5780633e001b66146105b4578063428868b5146105c95780634e8f1d67146105dc57806357e0af6c146105fb575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a14610595575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c610378366004614b97565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de366004614bc9565b610b2c565b005b3480156103f0575f80fd5b506103e36103ff366004614c27565b610bfe565b34801561040f575f80fd5b5061038c61041e366004614b97565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004614c6f565b610f3a565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c610489366004614b97565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004614cd4565b611434565b3480156104c9575f80fd5b5061038c6104d8366004614b97565b6117bf565b3480156104e8575f80fd5b506103b66104f7366004614b97565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b6610522366004614b97565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d366004614b97565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461057d906001600160a01b031681565b6040516001600160a01b039091168152602001610398565b3480156105a0575f80fd5b50609b5461057d906001600160a01b031681565b3480156105bf575f80fd5b506103b660aa5481565b6103e36105d7366004614cd4565b6117ed565b3480156105e7575f80fd5b506103e36105f6366004614d34565b611ac1565b348015610606575f80fd5b506103e3610615366004614b97565b611d91565b348015610625575f80fd5b5060655460ff1661038c565b34801561063c575f80fd5b5061067161064b366004614b97565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b34801561069c575f80fd5b506106c47f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b3480156106e8575f80fd5b506103e36106f7366004614b97565b611e3c565b348015610707575f80fd5b506103b6610716366004614b97565b60ab6020525f908152604090205481565b348015610732575f80fd5b506103e3610741366004614bc9565b612017565b348015610751575f80fd5b506103e36120d4565b348015610765575f80fd5b506103e3610774366004614de5565b6120e7565b348015610784575f80fd5b5060a65461038c9060ff1681565b34801561079d575f80fd5b506033546001600160a01b031661057d565b3480156107ba575f80fd5b5061081b6107c9366004614b97565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b34801561086a575f80fd5b5061038c610879366004614b97565b5f90815260a4602052604090206003015460ff1690565b34801561089b575f80fd5b506103e36108aa366004614bc9565b6123f0565b3480156108ba575f80fd5b5061038c6108c9366004614bc9565b609f6020525f908152604090205460ff1681565b3480156108e8575f80fd5b506103b660995481565b3480156108fd575f80fd5b506103e361090c366004614b97565b6124d3565b34801561091c575f80fd5b506103b661092b366004614bc9565b60a56020525f908152604090205481565b348015610947575f80fd5b506103b660a85481565b34801561095c575f80fd5b506103e361096b366004614e40565b612583565b34801561097b575f80fd5b506103e361098a366004614bc9565b612887565b34801561099a575f80fd5b506103e36109a9366004614c6f565b6128e0565b3480156109b9575f80fd5b506103e36109c8366004614e40565b612c3d565b3480156109d8575f80fd5b506103e36109e7366004614eb4565b612cc6565b3480156109f7575f80fd5b506103e3610a06366004614b97565b612e04565b6103e3610a19366004614ee6565b612ea7565b348015610a29575f80fd5b506103b660985481565b348015610a3e575f80fd5b506103e3610a4d366004614b97565b613439565b348015610a5d575f80fd5b506103e3610a6c366004614bc9565b6135a8565b348015610a7c575f80fd5b506103b660ac5481565b348015610a91575f80fd5b5060975461057d906001600160a01b031681565b348015610ab0575f80fd5b5061038c610abf366004614b97565b613667565b348015610acf575f80fd5b506103b6609a5481565b348015610ae4575f80fd5b506103e3610af3366004614b97565b6136b1565b348015610b03575f80fd5b506103e3610b12366004614bc9565b613754565b348015610b22575f80fd5b506103b660a95481565b610b346137e1565b6001600160a01b0381165f908152609f602052604090205460ff1615610ba15760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c066137e1565b5f8111610c555760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b98565b5f80610c61858561383b565b915091505f610c74836001015160c01c90565b5f81815260a160205260409020549091508214610cd35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f60a181610ce18785614f3b565b81526020019081526020015f205414610d615760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b98565b609d548111610dd85760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b610de3600182614f4e565b609e555b8315610f3257604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e2f81613667565b15610e8a575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610e7a908490614f3b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610eea575060a85481145b15610ef4575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610de7575b505050505050565b60a85415610f8a5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b610f926138d4565b5f80610f9e848461383b565b915091505f610fb1836001015160c01c90565b5f81815260a1602052604090205490915082146110105760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b611019816117bf565b6110655760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b61106e81613667565b156110bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a4602052604090206003015460ff161561111c5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b98565b5f81815260a2602052604090206001015442101561117c5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b98565b605983015160a05f61118f600185614f4e565b81526020019081526020015f2054146111ea5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f81815260a06020526040902054156112455760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b98565b80609d54600101146112995760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b609d819055600160a35f6112ae866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556112fd6112f0846011015160c01c90565b600985015160c01c613927565b60a25f61130b600184614f4e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906113449084614f4e565b81526020019081526020015f205f905560ad5f6001836113649190614f4e565b81526020019081526020015f205f905560a45f6001836113849190614f4e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611410866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c49190614f61565b6115105760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156115605760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6115686138d4565b5f61157e6115796020850185614f7c565b61383b565b5090505f611590826001015160c01c90565b61159b906001614f3b565b5f81815260ad602052604090205490915061161e5760405162461bcd60e51b815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611682573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a69190614fdd565b6116b09190614f3b565b1015611718575f6116c76080860160608701614ff4565b61ffff16116117185760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611786573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117aa9190614fdd565b90506117b88585835f6139e4565b5050505050565b5f81815260a26020526040812054158015906117e757505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611859573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187d9190614f61565b6118c95760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156119195760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6119216138d4565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611985573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a99190614fdd565b6119b39190614f3b565b1015611a1b575f6119ca6080840160608501614ff4565b61ffff1611611a1b5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aad9190614fdd565b9050611abc83838360016139e4565b505050565b60a85415611b115760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b611b196138d4565b60ac54609e545f90815260a2602052604081205490914291611b3b9190614f3b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb79190614fdd565b611bc19190614f3b565b10905081158015611bcf5750805b15611c36575f611be560808a0160608b01614ff4565b61ffff1611611c365760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b8180611c3f5750805b611c8b5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b98565b611c9788885f806139e4565b5f80611ca3888861383b565b915091505f611cb6836001015160c01c90565b905080609e5414611d095760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214611d655760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f81815260a26020526040902042600190910155611d8483888861411f565b5050505050505050505050565b611d996137e1565b5f81118015611daa57506099548114155b611df65760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b98565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611e5c57505f5460ff8083169116105b611ece5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff831617610100179055611eec5f5460ff1690565b60ff16600214611f3e5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b98565b81611fb15760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b98565b609e545f90815260ab6020526040902054611fda57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b61201f6137e1565b6001600160a01b0381165f908152609f602052604090205460ff166120865760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b98565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bf3565b6120dc6137e1565b6120e55f6142d2565b565b5f54610100900460ff161580801561210557505f54600160ff909116105b8061211e5750303b15801561211e57505f5460ff166001145b6121905760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805460ff1916600117905580156121b1575f805461ff0019166101001790555b6001600160a01b03861615806121ce57506001600160a01b038516155b15612205576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03871661225b5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b98565b61226361433b565b61226b6143bf565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123e7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123f86137e1565b6001600160a01b0381161580159061241e5750609c546001600160a01b03828116911614155b61246a5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b98565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124db6137e1565b5f811180156124eb575060648111155b80156124f9575060a9548114155b6125455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b98565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611e30565b60a854156125d35760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6125db6138d4565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266b9190614f61565b6126b75760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b5f806126c3868661383b565b915091505f6126d6836001015160c01c90565b5f81815260a1602052604090205490915082146127355760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b61273e81613667565b61278a5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916127c691614f3b565b1161283c575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261283791839190614443565b6123e7565b61284783868661411f565b6123e781336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061459f565b61288f6137e1565b60aa80545f9091556128a1828261466b565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611e30565b6128e86137e1565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561295f5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b98565b5f8061296b848461383b565b915091505f61297e836001015160c01c90565b905080156129ce5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b98565b5f6129da846079015190565b905080612a295760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b98565b600984015160c01c15612a7e5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b98565b5f612a8a856019015190565b03612ad75760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b98565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612b03856039015190565b14612b505760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b98565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80612c49868661383b565b915091505f612c5c836001015160c01c90565b5f81815260a160205260409020549091508214612cbb5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6123e783868661411f565b612cce6137e1565b8015612dd257612cdc614714565b60a65460ff1615612d915760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612d30908490614f3b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612dda61476e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612db4565b50565b612e0c6137e1565b5f81118015612e1d575060ac548114155b612e695760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b98565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611e30565b335f908152609f602052604090205460ff16612f055760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b98565b60a85415612f555760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b612f5d6138d4565b60a65460ff1615612fb05760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b98565b8167ffffffffffffffff16609d541061300b5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a1602052604090205481146130725760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6130858267ffffffffffffffff166117bf565b6130d15760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b03161561314c5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a2602052604090206001015442106131dc5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b98565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561322c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132509190614fdd565b34101561329f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516133b791815260200190565b60405180910390a35f609d5460016133cf9190614f3b565b90505b609e548111613427578267ffffffffffffffff168114613415576099545f82815260a260205260408120600101805490919061340f908490614f3b565b90915550505b8061341f81615015565b9150506133d2565b505060a6805460ff1916600117905550565b5f54600390610100900460ff1615801561345957505f5460ff8083169116105b6134cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff83161761010017815582900361352d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b98565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b335f90815260a56020526040812054908190036136075760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b98565b335f90815260a56020526040812055613620828261466b565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161365b91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906117e75750505f90815260a46020526040902060030154610100900460ff161590565b6136b96137e1565b5f811180156136ca57506098548114155b6137165760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b98565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611e30565b61375c6137e1565b6001600160a01b0381166137d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b98565b612e01816142d2565b6033546001600160a01b031633146120e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b98565b5f805f61384885856147a7565b90505f8160ff165f036138695761385f8686614817565b90945090506138c6565b8160ff1660010361387e5761385f8686614880565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b98565b808420925050509250929050565b60655460ff16156120e55760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b98565b805f03613932575050565b8082035f5b828110156139de5761010081840381111561395157508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156139b4575f80fd5b505af11580156139c6573d5f803e3d5ffd5b50505050610100830192505061010081019050613937565b50505050565b6139f1602085018561504c565b60ff161580613a0f5750613a08602085018561504c565b60ff166001145b613a5b5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b98565b6080840135613aac5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b98565b60a0840135613afd5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b98565b5f80613b0f6115796020880188614f7c565b915091505f613b22836001015160c01c90565b90505f60a181613b33846001614f3b565b81526020019081526020015f205414613b8e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b98565b609e548114613bdf5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214613c3b5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b98565b5f81815260ab6020526040902054608088013514613c9b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f613caa846011015160c01c90565b90505f613cd6613cc060608b0160408c0161506c565b613cd060808c0160608d01614ff4565b846148d3565b9050613ce860808a0160608b01614ff4565b6001939093015f81815260ad6020526040902054909361ffff16929092019180613db9578615613d86575f49613d865760405162461bcd60e51b815260206004820152602160248201527f626c6f62207265717569726564207768656e206e6f2073746f7265642068617360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f4915613d94575f49613db6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b60f9613dc860208c018c61504c565b60ff16600103613dd757506101015b604080518281019091529650613dfc87613df460208e018e61504c565b60ff16614917565b60c085901b6001880152613e2a87613e1a60808e0160608f01614ff4565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b01356099880152613e8e87613e6f60208d018d614f7c565b604051613e7d929190615085565b604051809103902060b99190910152565b60d987018690526001613ea460208d018d61504c565b60ff1610613ed657613ed687613ec060608e0160408f0161506c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff1615613f3f5760a7545f90815260a460205260409020600201546099544291613f3291614f3b565b613f3c9190614f4e565b90505b60405180608001604052804281526020018260985442613f5f9190614f3b565b613f699190614f3b565b81526020018d6040016020810190613f81919061506c565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e8790556097546001600160a01b031692506374fe27b791508b3590613ffb90613ff5908e018e614f7c565b5f61491e565b5f61400960408f018f614f7c565b6040518663ffffffff1660e01b81526004016140299594939291906150db565b602060405180830381865afa158015614044573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140689190614f61565b6140da5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b8061416c5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b98565b5f61417b846001015160c01c90565b90505f614189856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006141b8876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a84861427a885160f81c90565b858888866040518663ffffffff1660e01b815260040161429e95949392919061514e565b5f6040518083038186803b1580156142b4575f80fd5b505afa1580156142c6573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166143b75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5614972565b5f54610100900460ff1661443b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e56149fa565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156144c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144eb9190614fdd565b5f86815260a4602052604090206001015490915061450a908290614f3b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614549908490614f3b565b909155505060405161455c90849061517f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906145c390846151ab565b6145cd91906151c2565b90506145d98183614f4e565b60aa5f8282546145e99190614f3b565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614615908490614f3b565b909155505060405161462890849061517f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614710575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146146ba576040519150601f19603f3d011682016040523d82523d5f602084013e6146bf565b606091505b5050905080611abc5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b98565b5050565b61471c6138d4565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586147513390565b6040516001600160a01b03909116815260200160405180910390a1565b614776614a7f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614751565b5f816147f55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b98565b82825f818110614807576148076151fa565b919091013560f81c949350505050565b5f8160f981101561486a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b98565b6040519150808483378082016040529250929050565b5f81610101811461486a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b98565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016149088161ffff871686614ad1565b82900390912095945050505050565b8082535050565b60605f80808080614931888a018a615314565b955095509550955095505081871061494f57945061496b9350505050565b83871061496357829550505050505061496b565b509293505050505b9392505050565b5f54610100900460ff166149ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6065805460ff19169055565b5f54610100900460ff16614a765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5336142d2565b60655460ff166120e55760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b98565b5f825f03614ae057508261496b565b609b546001600160a01b03165f5b84811015614b8d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b789190614fdd565b87525060209095019460019384019301614aee565b5093949350505050565b5f60208284031215614ba7575f80fd5b5035919050565b80356001600160a01b0381168114614bc4575f80fd5b919050565b5f60208284031215614bd9575f80fd5b61496b82614bae565b5f8083601f840112614bf2575f80fd5b50813567ffffffffffffffff811115614c09575f80fd5b602083019150836020828501011115614c20575f80fd5b9250929050565b5f805f60408486031215614c39575f80fd5b833567ffffffffffffffff811115614c4f575f80fd5b614c5b86828701614be2565b909790965060209590950135949350505050565b5f8060208385031215614c80575f80fd5b823567ffffffffffffffff811115614c96575f80fd5b614ca285828601614be2565b90969095509350505050565b5f60e08284031215614cbe575f80fd5b50919050565b5f60608284031215614cbe575f80fd5b5f8060408385031215614ce5575f80fd5b823567ffffffffffffffff80821115614cfc575f80fd5b614d0886838701614cae565b93506020850135915080821115614d1d575f80fd5b50614d2a85828601614cc4565b9150509250929050565b5f805f805f8060808789031215614d49575f80fd5b863567ffffffffffffffff80821115614d60575f80fd5b614d6c8a838b01614cae565b97506020890135915080821115614d81575f80fd5b614d8d8a838b01614cc4565b96506040890135915080821115614da2575f80fd5b614dae8a838b01614be2565b90965094506060890135915080821115614dc6575f80fd5b50614dd389828a01614be2565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614dfa575f80fd5b614e0387614bae565b9550614e1160208801614bae565b9450614e1f60408801614bae565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614e53575f80fd5b843567ffffffffffffffff80821115614e6a575f80fd5b614e7688838901614be2565b90965094506020870135915080821115614e8e575f80fd5b50614e9b87828801614be2565b95989497509550505050565b8015158114612e01575f80fd5b5f60208284031215614ec4575f80fd5b813561496b81614ea7565b803567ffffffffffffffff81168114614bc4575f80fd5b5f8060408385031215614ef7575f80fd5b614f0083614ecf565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117e7576117e7614f0e565b818103818111156117e7576117e7614f0e565b5f60208284031215614f71575f80fd5b815161496b81614ea7565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614faf575f80fd5b83018035915067ffffffffffffffff821115614fc9575f80fd5b602001915036819003821315614c20575f80fd5b5f60208284031215614fed575f80fd5b5051919050565b5f60208284031215615004575f80fd5b813561ffff8116811461496b575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504557615045614f0e565b5060010190565b5f6020828403121561505c575f80fd5b813560ff8116811461496b575f80fd5b5f6020828403121561507c575f80fd5b61496b82614ecf565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156151255784516001600160a01b031683529383019391830191600101615100565b50508760408601528481036060860152615140818789615094565b9a9950505050505050505050565b858152846020820152608060408201525f61516d608083018587615094565b90508260608301529695505050505050565b5f82515f5b8181101561519e5760208186018101518583015201615184565b505f920191825250919050565b80820281158282048414176117e7576117e7614f0e565b5f826151f5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615263575f80fd5b8135602067ffffffffffffffff8083111561528057615280615227565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156152c3576152c3615227565b60405293845260208187018101949081019250878511156152e2575f80fd5b6020870191505b84821015615309576152fa82614bae565b835291830191908301906152e9565b979650505050505050565b5f805f805f8060c08789031215615329575f80fd5b86359550602087013567ffffffffffffffff80821115615347575f80fd5b6153538a838b01615254565b965060408901359550606089013591508082111561536f575f80fd5b61537b8a838b01615254565b94506080890135935060a0890135915080821115615397575f80fd5b506153a489828a01615254565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -282,6 +282,37 @@ func (_Rollup *RollupCallerSession) MaxNumTxInChunk() (*big.Int, error) { return _Rollup.Contract.MaxNumTxInChunk(&_Rollup.CallOpts) } +// BatchBlobVersionedHashes is a free data retrieval call binding the contract method 0x2a213ba1. +// +// Solidity: function batchBlobVersionedHashes(uint256 batchIndex) view returns(bytes32 blobVersionedHash) +func (_Rollup *RollupCaller) BatchBlobVersionedHashes(opts *bind.CallOpts, batchIndex *big.Int) ([32]byte, error) { + var out []interface{} + err := _Rollup.contract.Call(opts, &out, "batchBlobVersionedHashes", batchIndex) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BatchBlobVersionedHashes is a free data retrieval call binding the contract method 0x2a213ba1. +// +// Solidity: function batchBlobVersionedHashes(uint256 batchIndex) view returns(bytes32 blobVersionedHash) +func (_Rollup *RollupSession) BatchBlobVersionedHashes(batchIndex *big.Int) ([32]byte, error) { + return _Rollup.Contract.BatchBlobVersionedHashes(&_Rollup.CallOpts, batchIndex) +} + +// BatchBlobVersionedHashes is a free data retrieval call binding the contract method 0x2a213ba1. +// +// Solidity: function batchBlobVersionedHashes(uint256 batchIndex) view returns(bytes32 blobVersionedHash) +func (_Rollup *RollupCallerSession) BatchBlobVersionedHashes(batchIndex *big.Int) ([32]byte, error) { + return _Rollup.Contract.BatchBlobVersionedHashes(&_Rollup.CallOpts, batchIndex) +} + // BatchChallengeReward is a free data retrieval call binding the contract method 0xabc8d68d. // // Solidity: function batchChallengeReward(address owner) view returns(uint256 amount) @@ -1053,6 +1084,35 @@ func (_Rollup *RollupCallerSession) ProofWindow() (*big.Int, error) { return _Rollup.Contract.ProofWindow(&_Rollup.CallOpts) } +// ProveCommittedBatchState is a free data retrieval call binding the contract method 0xb8d0a1b0. +// +// Solidity: function proveCommittedBatchState(bytes _batchHeader, bytes _batchProof) view returns() +func (_Rollup *RollupCaller) ProveCommittedBatchState(opts *bind.CallOpts, _batchHeader []byte, _batchProof []byte) error { + var out []interface{} + err := _Rollup.contract.Call(opts, &out, "proveCommittedBatchState", _batchHeader, _batchProof) + + if err != nil { + return err + } + + return err + +} + +// ProveCommittedBatchState is a free data retrieval call binding the contract method 0xb8d0a1b0. +// +// Solidity: function proveCommittedBatchState(bytes _batchHeader, bytes _batchProof) view returns() +func (_Rollup *RollupSession) ProveCommittedBatchState(_batchHeader []byte, _batchProof []byte) error { + return _Rollup.Contract.ProveCommittedBatchState(&_Rollup.CallOpts, _batchHeader, _batchProof) +} + +// ProveCommittedBatchState is a free data retrieval call binding the contract method 0xb8d0a1b0. +// +// Solidity: function proveCommittedBatchState(bytes _batchHeader, bytes _batchProof) view returns() +func (_Rollup *RollupCallerSession) ProveCommittedBatchState(_batchHeader []byte, _batchProof []byte) error { + return _Rollup.Contract.ProveCommittedBatchState(&_Rollup.CallOpts, _batchHeader, _batchProof) +} + // ProveRemaining is a free data retrieval call binding the contract method 0x3e001b66. // // Solidity: function proveRemaining() view returns(uint256) @@ -1334,6 +1394,27 @@ func (_Rollup *RollupTransactorSession) CommitBatchWithProof(batchDataInput IRol return _Rollup.Contract.CommitBatchWithProof(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput, _batchHeader, _batchProof) } +// CommitState is a paid mutator transaction binding the contract method 0x1e8825be. +// +// Solidity: function commitState((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) returns() +func (_Rollup *RollupTransactor) CommitState(opts *bind.TransactOpts, batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput) (*types.Transaction, error) { + return _Rollup.contract.Transact(opts, "commitState", batchDataInput, batchSignatureInput) +} + +// CommitState is a paid mutator transaction binding the contract method 0x1e8825be. +// +// Solidity: function commitState((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) returns() +func (_Rollup *RollupSession) CommitState(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput) (*types.Transaction, error) { + return _Rollup.Contract.CommitState(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput) +} + +// CommitState is a paid mutator transaction binding the contract method 0x1e8825be. +// +// Solidity: function commitState((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) returns() +func (_Rollup *RollupTransactorSession) CommitState(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput) (*types.Transaction, error) { + return _Rollup.Contract.CommitState(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput) +} + // FinalizeBatch is a paid mutator transaction binding the contract method 0x13361101. // // Solidity: function finalizeBatch(bytes _batchHeader) returns() diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index fc6e626f1..60cc8823d 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -9,11 +9,11 @@ import ( "morph-l2/bindings/solc" ) -const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1030_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"l1StakingContract\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_address\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizationPeriodSeconds\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofWindow\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_uint256\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__maxNumTxInChunk\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_uint256\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_address\"},{\"astId\":1012,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"verifier\",\"offset\":0,\"slot\":\"156\",\"type\":\"t_address\"},{\"astId\":1013,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastFinalizedBatchIndex\",\"offset\":0,\"slot\":\"157\",\"type\":\"t_uint256\"},{\"astId\":1014,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastCommittedBatchIndex\",\"offset\":0,\"slot\":\"158\",\"type\":\"t_uint256\"},{\"astId\":1015,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"isChallenger\",\"offset\":0,\"slot\":\"159\",\"type\":\"t_mapping(t_address,t_bool)\"},{\"astId\":1016,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizedStateRoots\",\"offset\":0,\"slot\":\"160\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1017,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedBatches\",\"offset\":0,\"slot\":\"161\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1018,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchDataStore\",\"offset\":0,\"slot\":\"162\",\"type\":\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\"},{\"astId\":1019,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"withdrawalRoots\",\"offset\":0,\"slot\":\"163\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1020,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"164\",\"type\":\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\"},{\"astId\":1021,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallengeReward\",\"offset\":0,\"slot\":\"165\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1022,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"inChallenge\",\"offset\":0,\"slot\":\"166\",\"type\":\"t_bool\"},{\"astId\":1023,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallenged\",\"offset\":0,\"slot\":\"167\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"revertReqIndex\",\"offset\":0,\"slot\":\"168\",\"type\":\"t_uint256\"},{\"astId\":1025,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofRewardPercent\",\"offset\":0,\"slot\":\"169\",\"type\":\"t_uint256\"},{\"astId\":1026,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proveRemaining\",\"offset\":0,\"slot\":\"170\",\"type\":\"t_uint256\"},{\"astId\":1027,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedStateRoots\",\"offset\":0,\"slot\":\"171\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1028,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"rollupDelayPeriod\",\"offset\":0,\"slot\":\"172\",\"type\":\"t_uint256\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1029_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1030_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchChallenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchChallenge)1031_storage\"},\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchData)1032_storage\"},\"t_struct(BatchChallenge)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchChallenge\",\"numberOfBytes\":\"128\"},\"t_struct(BatchData)1032_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchData\",\"numberOfBytes\":\"128\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1031_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1030_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)1030_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"l1StakingContract\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_address\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizationPeriodSeconds\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofWindow\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_uint256\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__maxNumTxInChunk\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_uint256\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_address\"},{\"astId\":1012,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"verifier\",\"offset\":0,\"slot\":\"156\",\"type\":\"t_address\"},{\"astId\":1013,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastFinalizedBatchIndex\",\"offset\":0,\"slot\":\"157\",\"type\":\"t_uint256\"},{\"astId\":1014,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastCommittedBatchIndex\",\"offset\":0,\"slot\":\"158\",\"type\":\"t_uint256\"},{\"astId\":1015,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"isChallenger\",\"offset\":0,\"slot\":\"159\",\"type\":\"t_mapping(t_address,t_bool)\"},{\"astId\":1016,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizedStateRoots\",\"offset\":0,\"slot\":\"160\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1017,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedBatches\",\"offset\":0,\"slot\":\"161\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1018,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchDataStore\",\"offset\":0,\"slot\":\"162\",\"type\":\"t_mapping(t_uint256,t_struct(BatchData)1033_storage)\"},{\"astId\":1019,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"withdrawalRoots\",\"offset\":0,\"slot\":\"163\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1020,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"164\",\"type\":\"t_mapping(t_uint256,t_struct(BatchChallenge)1032_storage)\"},{\"astId\":1021,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallengeReward\",\"offset\":0,\"slot\":\"165\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1022,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"inChallenge\",\"offset\":0,\"slot\":\"166\",\"type\":\"t_bool\"},{\"astId\":1023,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallenged\",\"offset\":0,\"slot\":\"167\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"revertReqIndex\",\"offset\":0,\"slot\":\"168\",\"type\":\"t_uint256\"},{\"astId\":1025,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofRewardPercent\",\"offset\":0,\"slot\":\"169\",\"type\":\"t_uint256\"},{\"astId\":1026,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proveRemaining\",\"offset\":0,\"slot\":\"170\",\"type\":\"t_uint256\"},{\"astId\":1027,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedStateRoots\",\"offset\":0,\"slot\":\"171\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1028,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"rollupDelayPeriod\",\"offset\":0,\"slot\":\"172\",\"type\":\"t_uint256\"},{\"astId\":1029,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchBlobVersionedHashes\",\"offset\":0,\"slot\":\"173\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1030_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(BatchChallenge)1032_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchChallenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchChallenge)1032_storage\"},\"t_mapping(t_uint256,t_struct(BatchData)1033_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchData)1033_storage\"},\"t_struct(BatchChallenge)1032_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchChallenge\",\"numberOfBytes\":\"128\"},\"t_struct(BatchData)1033_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchData\",\"numberOfBytes\":\"128\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a95578063e3fff1dd14610aaa578063f2fde38b14610ac9578063fb1e8b0414610ae8575f80fd5b8063d8dc99d214610a35578063ddd8a3dc14610a4a578063de8b303514610a76575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109e2578063cf9a6745146109f7578063d279c19114610a16575f80fd5b8063bedb86fb14610991578063c5553892146109b0578063cd4edc69146109cf575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d31461091f578063b348442514610934578063b35dac4e14610953578063b3e0a50914610972575f80fd5b8063a479265d146108c0578063a4f209b0146108d5578063abc8d68d146108f4575f80fd5b8063910129d411610182578063910129d41461084257806397fc007c14610873578063a415d8dc14610892575f80fd5b806388b1ea09146107355780638da5cb5b1461074e5780638f1d377614610778575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106b85780636c578c1d146106e3578063715018a614610702578063728cdbca14610716575f80fd5b80635ef7a94a146105ed5780635f77cf1d1461064d5780636126729014610699575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105b75780635c975abb146105d6575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615372565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153b1565b610afd565b005b3480156103cf575f80fd5b506103c26103de36600461540f565b610c21565b3480156103ee575f80fd5b5061036b6103fd366004615372565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004615457565b61100d565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615372565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615372565b61160c565b3480156104a8575f80fd5b506103956104b7366004615372565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615372565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154bc565b61163a565b3480156105a3575f80fd5b506103c26105b236600461551c565b6118eb565b3480156105c2575f80fd5b506103c26105d1366004615372565b611c55565b3480156105e1575f80fd5b5060655460ff1661036b565b3480156105f8575f80fd5b5061062d610607366004615372565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610658575f80fd5b506106807f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b3480156106a4575f80fd5b506103c26106b3366004615372565b611d1a565b3480156106c3575f80fd5b506103956106d2366004615372565b60ab6020525f908152604090205481565b3480156106ee575f80fd5b506103c26106fd3660046153b1565b611f7d565b34801561070d575f80fd5b506103c261208c565b348015610721575f80fd5b506103c26107303660046155cd565b61209f565b348015610740575f80fd5b5060a65461036b9060ff1681565b348015610759575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610783575f80fd5b506107f1610792366004615372565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b34801561084d575f80fd5b5061036b61085c366004615372565b5f90815260a4602052604090206003015460ff1690565b34801561087e575f80fd5b506103c261088d3660046153b1565b612468565b34801561089d575f80fd5b5061036b6108ac3660046153b1565b609f6020525f908152604090205460ff1681565b3480156108cb575f80fd5b5061039560995481565b3480156108e0575f80fd5b506103c26108ef366004615372565b61258c565b3480156108ff575f80fd5b5061039561090e3660046153b1565b60a56020525f908152604090205481565b34801561092a575f80fd5b5061039560a85481565b34801561093f575f80fd5b506103c261094e366004615628565b612656565b34801561095e575f80fd5b506103c261096d3660046153b1565b612a35565b34801561097d575f80fd5b506103c261098c366004615457565b612a9b565b34801561099c575f80fd5b506103c26109ab36600461569c565b612e87565b3480156109bb575f80fd5b506103c26109ca366004615372565b61301a565b6103c26109dd3660046156ce565b6130d7565b3480156109ed575f80fd5b5061039560985481565b348015610a02575f80fd5b506103c2610a11366004615372565b6137ec565b348015610a21575f80fd5b506103c2610a303660046153b1565b6139c9565b348015610a40575f80fd5b5061039560ac5481565b348015610a55575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a81575f80fd5b5061036b610a90366004615372565b613aaf565b348015610aa0575f80fd5b50610395609a5481565b348015610ab5575f80fd5b506103c2610ac4366004615372565b613b06565b348015610ad4575f80fd5b506103c2610ae33660046153b1565b613bc3565b348015610af3575f80fd5b5061039560a95481565b610b05613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c29613c77565b5f8111610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b90565b5f80610c9e8585613cf8565b915091505f610cb1836001015160c01c90565b5f81815260a160205260409020549091508214610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f60a181610d388785615723565b81526020019081526020015f205414610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b90565b609d548111610e63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b610e6e600182615736565b609e555b831561100557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eba81613aaf565b15610f40575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f12908490615723565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fbd575060a85481145b15610fc7575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e72575b505050505050565b60a85415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61107f613dab565b5f8061108b8484613cf8565b915091505f61109e836001015160c01c90565b5f81815260a160205260409020549091508214611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6111208161160c565b611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b61118f81613aaf565b156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003015460ff1615611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b90565b5f81815260a260205260409020600101544210156112eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b90565b605983015160a05f6112fe600185615736565b81526020019081526020015f205414611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f81815260a06020526040902054156113e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b90565b80609d5460010114611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b609d819055600160a35f61146b866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114d86114cb846011015160c01c90565b600985015160c01c613e18565b60a25f6114e6600184615736565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061151f9084615736565b81526020019081526020015f205f905560a45f60018361153f9190615736565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115e8866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061163457505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e49190615749565b61174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b60a854156117b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6117bc613dab565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa15801561182d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118519190615764565b61185b9190615723565b10156118dd575f611872608084016060850161577b565b61ffff16116118dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b6118e78282613ee2565b5050565b60a85415611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61195d613dab565b60ac54609e545f90815260a260205260408120549091429161197f9190615723565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a159190615764565b611a1f9190615723565b10905081158015611a2d5750805b15611aae575f611a4360808a0160608b0161577b565b61ffff1611611aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b8180611ab75750805b611b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b90565b611b278888613ee2565b5f80611b338888613cf8565b915091505f611b46836001015160c01c90565b905080609e5414611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b90565b5f81815260a160205260409020548214611c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f81815260a26020526040902042600190910155611c4883888861470c565b5050505050505050505050565b611c5d613c77565b5f81118015611c6e57506099548114155b611cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b90565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d3a57505f5460ff8083169116105b611dc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e015f5460ff1690565b60ff16600214611e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b90565b81611efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b90565b609e545f90815260ab6020526040902054611f2357609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b611f85613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b90565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c16565b612094613c77565b61209d5f6148e6565b565b5f54610100900460ff16158080156120bd57505f54600160ff909116105b806120d65750303b1580156120d657505f5460ff166001145b612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121be575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806121f5575073ffffffffffffffffffffffffffffffffffffffff8516155b1561222c576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166122a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b90565b6122b161495c565b6122b96149fa565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561245f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612470613c77565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124b05750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b90565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612594613c77565b5f811180156125a4575060648111155b80156125b2575060a9548114155b612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b90565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d0e565b60a854156126c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6126c8613dab565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561274e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127729190615749565b6127d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b5f806127e48686613cf8565b915091505f6127f7836001015160c01c90565b5f81815260a160205260409020549091508214612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b61287981613aaf565b6128df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161295691615723565b116129ea575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526129e591839190614a98565b61245f565b6129f583868661470c565b61245f81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c1b565b612a3d613c77565b60aa80545f909155612a4f8282614d01565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d0e565b612aa3613c77565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b90565b5f80612b408484613cf8565b915091505f612b53836001015160c01c90565b90508015612bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b90565b5f612bc9846079015190565b905080612c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b90565b600984015160c01c15612ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b90565b5f612cad856019015190565b03612d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b90565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d40856039015190565b14612da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b90565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e8f613c77565b8015612fe857612e9d614dd2565b60a65460ff1615612f9a5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612efe908490615723565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612ff0614e57565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612fbd565b50565b613022613c77565b5f81118015613033575060ac548114155b613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b90565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611d0e565b335f908152609f602052604090205460ff1661314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b90565b60a854156131b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6131c1613dab565b60a65460ff161561322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b90565b8167ffffffffffffffff16609d54106132a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a160205260409020548114613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6133378267ffffffffffffffff1661160c565b61339d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561343f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a2602052604090206001015442106134e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b90565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135779190615764565b3410156135e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161374c91815260200190565b60405180910390a35f609d5460016137649190615723565b90505b609e5481116137bc578267ffffffffffffffff1681146137aa576099545f82815260a26020526040812060010180549091906137a4908490615723565b90915550505b806137b48161579c565b915050613767565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561380c57505f5460ff8083169116105b613898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b90565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b335f90815260a5602052604081205490819003613a42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b90565b335f90815260a56020526040812055613a5b8282614d01565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613aa391815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116345750505f90815260a46020526040902060030154610100900460ff161590565b613b0e613c77565b5f81118015613b1f57506098548114155b613b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b90565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d0e565b613bcb613c77565b73ffffffffffffffffffffffffffffffffffffffff8116613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b90565b613017816148e6565b60335473ffffffffffffffffffffffffffffffffffffffff16331461209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b90565b5f805f613d058585614eae565b90505f8160ff165f03613d2657613d1c8686614f38565b9094509050613d9d565b8160ff16600103613d3b57613d1c8686614fbb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b90565b808420925050509250929050565b60655460ff161561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b90565b805f03613e23575050565b8082035f5b82811015613edc57610100818403811115613e4257508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613eb2575f80fd5b505af1158015613ec4573d5f803e3d5ffd5b50505050610100830192505061010081019050613e28565b50505050565b613eef60208301836157d3565b60ff161580613f0d5750613f0660208301836157d3565b60ff166001145b613f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b90565b6080820135613fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b90565b60a0820135614049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b90565b5f8061406061405b60208601866157f3565b613cf8565b915091505f614073836001015160c01c90565b90505f60a181614084846001615723565b81526020019081526020015f2054146140f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b90565b609e548114614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b5f81815260a1602052604090205482146141da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b90565b5f81815260ab6020526040902054608086013514614254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f614263846011015160c01c90565b90505f61428f6142796060890160408a01615854565b61428960808a0160608b0161577b565b84615028565b90506142a1608088016060890161577b565b6001939093019261ffff1691909101905f8049156142c0575f496142e2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96142f360208a018a6157d3565b60ff1660010361430257506101015b6040805182810190915296506143278761431f60208c018c6157d3565b60ff1661506c565b60c085901b60018801526143558761434560808c0160608d0161577b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143b98761439a60208b018b6157f3565b6040516143a892919061586d565b604051809103902060b99190910152565b60d9870186905260016143cf60208b018b6157d3565b60ff161061440157614401876143eb60608c0160408d01615854565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156144605760a7545f90815260a46020526040902060020154609954429161445391615723565b61445d9190615736565b90505b604051806080016040528042815260200182609854426144809190615723565b61448a9190615723565b815260200161449f60608d0160408e01615854565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061455b9190615764565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508935906145d0906145ca908c018c6157f3565b5f615073565b5f6145de60408d018d6157f3565b6040518663ffffffff1660e01b81526004016145fe9594939291906158c3565b602060405180830381865afa158015614619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061463d9190615749565b6146c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80614773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b90565b5f614782846001015160c01c90565b90505f614790856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147bf876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a84861488e885160f81c90565b858888866040518663ffffffff1660e01b81526004016148b2959493929190615943565b5f6040518083038186803b1580156148c8575f80fd5b505afa1580156148da573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166149f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d6150c7565b5f54610100900460ff16614a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d615187565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b4d9190615764565b5f86815260a46020526040902060010154909150614b6c908290615723565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bb8908490615723565b9091555050604051614bcb908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c3f90846159a0565b614c4991906159b7565b9050614c558183615736565b60aa5f828254614c659190615723565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c9e908490615723565b9091555050604051614cb1908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118e7575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d5d576040519150601f19603f3d011682016040523d82523d5f602084013e614d62565b606091505b5050905080614dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b90565b505050565b614dda613dab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e2d3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e5f615226565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e2d565b5f81614f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b90565b82825f818110614f2857614f286159ef565b919091013560f81c949350505050565b5f8160f9811015614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b90565b6040519150808483378082016040529250929050565b5f816101018114614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b90565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161505d8161ffff871686615292565b82900390912095945050505050565b8082535050565b60605f80808080615086888a018a615b09565b95509550955095509550508187106150a45794506150c09350505050565b8387106150b85782955050505050506150c0565b509293505050505b9392505050565b5f54610100900460ff1661515d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff1661521d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d336148e6565b60655460ff1661209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b90565b5f825f036152a15750826150c0565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b84811015615368576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa15801561532f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906153539190615764565b875250602090950194600193840193016152bc565b5093949350505050565b5f60208284031215615382575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153ac575f80fd5b919050565b5f602082840312156153c1575f80fd5b6150c082615389565b5f8083601f8401126153da575f80fd5b50813567ffffffffffffffff8111156153f1575f80fd5b602083019150836020828501011115615408575f80fd5b9250929050565b5f805f60408486031215615421575f80fd5b833567ffffffffffffffff811115615437575f80fd5b615443868287016153ca565b909790965060209590950135949350505050565b5f8060208385031215615468575f80fd5b823567ffffffffffffffff81111561547e575f80fd5b61548a858286016153ca565b90969095509350505050565b5f60e082840312156154a6575f80fd5b50919050565b5f606082840312156154a6575f80fd5b5f80604083850312156154cd575f80fd5b823567ffffffffffffffff808211156154e4575f80fd5b6154f086838701615496565b93506020850135915080821115615505575f80fd5b50615512858286016154ac565b9150509250929050565b5f805f805f8060808789031215615531575f80fd5b863567ffffffffffffffff80821115615548575f80fd5b6155548a838b01615496565b97506020890135915080821115615569575f80fd5b6155758a838b016154ac565b9650604089013591508082111561558a575f80fd5b6155968a838b016153ca565b909650945060608901359150808211156155ae575f80fd5b506155bb89828a016153ca565b979a9699509497509295939492505050565b5f805f805f8060c087890312156155e2575f80fd5b6155eb87615389565b95506155f960208801615389565b945061560760408801615389565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561563b575f80fd5b843567ffffffffffffffff80821115615652575f80fd5b61565e888389016153ca565b90965094506020870135915080821115615676575f80fd5b50615683878288016153ca565b95989497509550505050565b8015158114613017575f80fd5b5f602082840312156156ac575f80fd5b81356150c08161568f565b803567ffffffffffffffff811681146153ac575f80fd5b5f80604083850312156156df575f80fd5b6156e8836156b7565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611634576116346156f6565b81810381811115611634576116346156f6565b5f60208284031215615759575f80fd5b81516150c08161568f565b5f60208284031215615774575f80fd5b5051919050565b5f6020828403121561578b575f80fd5b813561ffff811681146150c0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157cc576157cc6156f6565b5060010190565b5f602082840312156157e3575f80fd5b813560ff811681146150c0575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615826575f80fd5b83018035915067ffffffffffffffff821115615840575f80fd5b602001915036819003821315615408575f80fd5b5f60208284031215615864575f80fd5b6150c0826156b7565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561591a57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016158e8565b5050876040860152848103606086015261593581878961587c565b9a9950505050505050505050565b858152846020820152608060408201525f61596260808301858761587c565b90508260608301529695505050505050565b5f82515f5b818110156159935760208186018101518583015201615979565b505f920191825250919050565b8082028115828204841417611634576116346156f6565b5f826159ea577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a58575f80fd5b8135602067ffffffffffffffff80831115615a7557615a75615a1c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615ab857615ab8615a1c565b6040529384526020818701810194908101925087851115615ad7575f80fd5b6020870191505b84821015615afe57615aef82615389565b83529183019190830190615ade565b979650505050505050565b5f805f805f8060c08789031215615b1e575f80fd5b86359550602087013567ffffffffffffffff80821115615b3c575f80fd5b615b488a838b01615a49565b9650604089013595506060890135915080821115615b64575f80fd5b615b708a838b01615a49565b94506080890135935060a0890135915080821115615b8c575f80fd5b50615b9989828a01615a49565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610b1f578063e3fff1dd14610b34578063f2fde38b14610b53578063fb1e8b0414610b72575f80fd5b8063d8dc99d214610abf578063ddd8a3dc14610ad4578063de8b303514610b00575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a59578063ce5db8d614610a6c578063cf9a674514610a81578063d279c19114610aa0575f80fd5b8063b8d0a1b0146109fc578063bedb86fb14610a1b578063c555389214610a3a575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461098a578063b34844251461099f578063b35dac4e146109be578063b3e0a509146109dd575f80fd5b8063a479265d1461092b578063a4f209b014610940578063abc8d68d1461095f575f80fd5b80638f1d3776116101985780638f1d3776146107e3578063910129d4146108ad57806397fc007c146108de578063a415d8dc146108fd575f80fd5b8063728cdbca1461078157806388b1ea09146107a05780638da5cb5b146107b9575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e578063612672901461070457806368589dfa146107235780636c578c1d1461074e578063715018a61461076d575f80fd5b80635c975abb146106415780635ef7a94a146106585780635f77cf1d146106b8575f80fd5b80633e001b661161026e5780633e001b66146105db578063428868b5146105f05780634e8f1d671461060357806357e0af6c14610622575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a146105af575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c6103783660046159bb565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de3660046159fa565b610b87565b005b3480156103f0575f80fd5b506103e36103ff366004615a58565b610cab565b34801561040f575f80fd5b5061038c61041e3660046159bb565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004615aa0565b611097565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c6104893660046159bb565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004615b05565b6116b6565b3480156104c9575f80fd5b5061038c6104d83660046159bb565b611aea565b3480156104e8575f80fd5b506103b66104f73660046159bb565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b66105223660046159bb565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d3660046159bb565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610398565b3480156105ba575f80fd5b50609b5461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105e6575f80fd5b506103b660aa5481565b6103e36105fe366004615b05565b611b18565b34801561060e575f80fd5b506103e361061d366004615b65565b611e7b565b34801561062d575f80fd5b506103e361063c3660046159bb565b6121e7565b34801561064c575f80fd5b5060655460ff1661038c565b348015610663575f80fd5b506106986106723660046159bb565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b3480156106c3575f80fd5b506106eb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b34801561070f575f80fd5b506103e361071e3660046159bb565b6122ac565b34801561072e575f80fd5b506103b661073d3660046159bb565b60ab6020525f908152604090205481565b348015610759575f80fd5b506103e36107683660046159fa565b61250f565b348015610778575f80fd5b506103e361261e565b34801561078c575f80fd5b506103e361079b366004615c16565b612631565b3480156107ab575f80fd5b5060a65461038c9060ff1681565b3480156107c4575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661058a565b3480156107ee575f80fd5b5061085c6107fd3660046159bb565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b3480156108b8575f80fd5b5061038c6108c73660046159bb565b5f90815260a4602052604090206003015460ff1690565b3480156108e9575f80fd5b506103e36108f83660046159fa565b6129fa565b348015610908575f80fd5b5061038c6109173660046159fa565b609f6020525f908152604090205460ff1681565b348015610936575f80fd5b506103b660995481565b34801561094b575f80fd5b506103e361095a3660046159bb565b612b1e565b34801561096a575f80fd5b506103b66109793660046159fa565b60a56020525f908152604090205481565b348015610995575f80fd5b506103b660a85481565b3480156109aa575f80fd5b506103e36109b9366004615c71565b612be8565b3480156109c9575f80fd5b506103e36109d83660046159fa565b612fc7565b3480156109e8575f80fd5b506103e36109f7366004615aa0565b61302d565b348015610a07575f80fd5b506103e3610a16366004615c71565b613426565b348015610a26575f80fd5b506103e3610a35366004615ce5565b6134c9565b348015610a45575f80fd5b506103e3610a543660046159bb565b61365c565b6103e3610a67366004615d17565b613719565b348015610a77575f80fd5b506103b660985481565b348015610a8c575f80fd5b506103e3610a9b3660046159bb565b613e2e565b348015610aab575f80fd5b506103e3610aba3660046159fa565b61400b565b348015610aca575f80fd5b506103b660ac5481565b348015610adf575f80fd5b5060975461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610b0b575f80fd5b5061038c610b1a3660046159bb565b6140f1565b348015610b2a575f80fd5b506103b6609a5481565b348015610b3f575f80fd5b506103e3610b4e3660046159bb565b614148565b348015610b5e575f80fd5b506103e3610b6d3660046159fa565b614205565b348015610b7d575f80fd5b506103b660a95481565b610b8f6142b9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610cb36142b9565b5f8111610d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610c1a565b5f80610d28858561433a565b915091505f610d3b836001015160c01c90565b5f81815260a160205260409020549091508214610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b5f60a181610dc28785615d6c565b81526020019081526020015f205414610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b609d548111610eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b610ef8600182615d7f565b609e555b831561108f57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610f44816140f1565b15610fca575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f9c908490615d6c565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590611047575060a85481145b15611051575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610efc575b505050505050565b60a85415611101576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b6111096143ed565b5f80611115848461433a565b915091505f611128836001015160c01c90565b5f81815260a1602052604090205490915082146111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b6111aa81611aea565b611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610c1a565b611219816140f1565b15611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610c1a565b5f81815260a4602052604090206003015460ff16156112fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610c1a565b5f81815260a26020526040902060010154421015611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610c1a565b605983015160a05f611388600185615d7f565b81526020019081526020015f2054146113fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610c1a565b5f81815260a0602052604090205415611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610c1a565b80609d54600101146114e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610c1a565b609d819055600160a35f6114f5866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a06020526040902055611562611555846011015160c01c90565b600985015160c01c61445a565b60a25f611570600184615d7f565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906115a99084615d7f565b81526020019081526020015f205f905560ad5f6001836115c99190615d7f565b81526020019081526020015f205f905560a45f6001836115e99190615d7f565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611692866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561173c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117609190615d92565b6117c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b60a85415611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b6118386143ed565b5f61184e6118496020850185615dad565b61433a565b5090505f611860826001015160c01c90565b61186b906001615d6c565b5f81815260ad6020526040902054909150611908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611979573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199d9190615e0e565b6119a79190615d6c565b1015611a29575f6119be6080860160608701615e25565b61ffff1611611a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b6097545f9073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad59190615e0e565b9050611ae38585835f614524565b5050505050565b5f81815260a2602052604081205415801590611b1257505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611b9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc29190615d92565b611c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b60a85415611c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b611c9a6143ed565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611d0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2f9190615e0e565b611d399190615d6c565b1015611dbb575f611d506080840160608501615e25565b61ffff1611611dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b6097545f9073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611e43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e679190615e0e565b9050611e768383836001614524565b505050565b60a85415611ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b611eed6143ed565b60ac54609e545f90815260a2602052604081205490914291611f0f9190615d6c565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fa59190615e0e565b611faf9190615d6c565b10905081158015611fbd5750805b1561203e575f611fd360808a0160608b01615e25565b61ffff161161203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b81806120475750805b6120ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610c1a565b6120b988885f80614524565b5f806120c5888861433a565b915091505f6120d8836001015160c01c90565b905080609e5414612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610c1a565b5f81815260a1602052604090205482146121bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b5f81815260a260205260409020426001909101556121da838888614d56565b5050505050505050505050565b6121ef6142b9565b5f8111801561220057506099548114155b612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610c1a565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff161580156122cc57505f5460ff8083169116105b612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556123935f5460ff1690565b60ff166002146123ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610c1a565b8161248c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610c1a565b609e545f90815260ab60205260409020546124b557609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122a0565b6125176142b9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff166125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610c1a565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610ca0565b6126266142b9565b61262f5f614f30565b565b5f54610100900460ff161580801561264f57505f54600160ff909116105b806126685750303b15801561266857505f5460ff166001145b6126f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612750575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612787575073ffffffffffffffffffffffffffffffffffffffff8516155b156127be576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871661283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610c1a565b612843614fa6565b61284b615044565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156129f1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612a026142b9565b73ffffffffffffffffffffffffffffffffffffffff811615801590612a425750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610c1a565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612b266142b9565b5f81118015612b36575060648111155b8015612b44575060a9548114155b612baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610c1a565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016122a0565b60a85415612c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b612c5a6143ed565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612ce0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d049190615d92565b612d6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b5f80612d76868661433a565b915091505f612d89836001015160c01c90565b5f81815260a160205260409020549091508214612e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b612e0b816140f1565b612e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610c1a565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556099546002909101544291612ee891615d6c565b11612f7c575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612f77918391906150e2565b6129f1565b612f87838686614d56565b6129f181336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250615265565b612fcf6142b9565b60aa80545f909155612fe1828261534b565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016122a0565b6130356142b9565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156130c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610c1a565b5f806130d2848461433a565b915091505f6130e5836001015160c01c90565b9050801561314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610c1a565b5f61315b846079015190565b9050806131c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610c1a565b600984015160c01c15613233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610c1a565b5f61323f856019015190565b036132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610c1a565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146132d2856039015190565b14613339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610c1a565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80613432868661433a565b915091505f613445836001015160c01c90565b5f81815260a1602052604090205490915082146134be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b6129f1838686614d56565b6134d16142b9565b801561362a576134df61541b565b60a65460ff16156135dc5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091613540908490615d6c565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b6136326154a0565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336135ff565b50565b6136646142b9565b5f81118015613675575060ac548114155b6136db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610c1a565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad191016122a0565b335f908152609f602052604090205460ff16613791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610c1a565b60a854156137fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b6138036143ed565b60a65460ff1615613870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610c1a565b8167ffffffffffffffff16609d54106138e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a160205260409020548114613966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b6139798267ffffffffffffffff16611aea565b6139df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a260205260409020600101544210613b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610c1a565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bb99190615e0e565b341015613c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610c1a565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051613d8e91815260200190565b60405180910390a35f609d546001613da69190615d6c565b90505b609e548111613dfe578267ffffffffffffffff168114613dec576099545f82815260a2602052604081206001018054909190613de6908490615d6c565b90915550505b80613df681615e46565b915050613da9565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff16158015613e4e57505f5460ff8083169116105b613eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610c1a565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122a0565b335f90815260a5602052604081205490819003614084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610c1a565b335f90815260a5602052604081205561409d828261534b565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516140e591815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615801590611b125750505f90815260a46020526040902060030154610100900460ff161590565b6141506142b9565b5f8111801561416157506098548114155b6141c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610c1a565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016122a0565b61420d6142b9565b73ffffffffffffffffffffffffffffffffffffffff81166142b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c1a565b61365981614f30565b60335473ffffffffffffffffffffffffffffffffffffffff16331461262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c1a565b5f805f61434785856154f7565b90505f8160ff165f036143685761435e8686615581565b90945090506143df565b8160ff1660010361437d5761435e8686615604565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610c1a565b808420925050509250929050565b60655460ff161561262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610c1a565b805f03614465575050565b8082035f5b8281101561451e5761010081840381111561448457508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b1580156144f4575f80fd5b505af1158015614506573d5f803e3d5ffd5b5050505061010083019250506101008101905061446a565b50505050565b6145316020850185615e7d565b60ff16158061454f57506145486020850185615e7d565b60ff166001145b6145b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610c1a565b6080840135614620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610c1a565b60a084013561468b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610c1a565b5f8061469d6118496020880188615dad565b915091505f6146b0836001015160c01c90565b90505f60a1816146c1846001615d6c565b81526020019081526020015f205414614736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610c1a565b609e5481146147a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610c1a565b5f81815260a160205260409020548214614817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610c1a565b5f81815260ab6020526040902054608088013514614891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610c1a565b5f6148a0846011015160c01c90565b90505f6148cc6148b660608b0160408c01615e9d565b6148c660808c0160608d01615e25565b84615671565b90506148de60808a0160608b01615e25565b6001939093015f81815260ad6020526040902054909361ffff169290920191806149c9578615614996575f49614996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f626c6f62207265717569726564207768656e206e6f2073746f7265642068617360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b5f49156149a4575f496149c6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b60f96149d860208c018c615e7d565b60ff166001036149e757506101015b604080518281019091529650614a0c87614a0460208e018e615e7d565b60ff166156b5565b60c085901b6001880152614a3a87614a2a60808e0160608f01615e25565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b01356099880152614a9e87614a7f60208d018d615dad565b604051614a8d929190615eb6565b604051809103902060b99190910152565b60d987018690526001614ab460208d018d615e7d565b60ff1610614ae657614ae687614ad060608e0160408f01615e9d565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff1615614b4f5760a7545f90815260a460205260409020600201546099544291614b4291615d6c565b614b4c9190615d7f565b90505b60405180608001604052804281526020018260985442614b6f9190615d6c565b614b799190615d6c565b81526020018d6040016020810190614b919190615e9d565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508b3590614c1890614c12908e018e615dad565b5f6156bc565b5f614c2660408f018f615dad565b6040518663ffffffff1660e01b8152600401614c46959493929190615f0c565b602060405180830381865afa158015614c61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c859190615d92565b614d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b80614dbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610c1a565b5f614dcc846001015160c01c90565b90505f614dda856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000614e09876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614ed8885160f81c90565b858888866040518663ffffffff1660e01b8152600401614efc959493929190615f8c565b5f6040518083038186803b158015614f12575f80fd5b505afa158015614f24573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661503c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b61262f615710565b5f54610100900460ff166150da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b61262f6157d0565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015615173573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151979190615e0e565b5f86815260a460205260409020600101549091506151b6908290615d6c565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190615202908490615d6c565b9091555050604051615215908490615fbd565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906152899084615fe9565b6152939190616000565b905061529f8183615d7f565b60aa5f8282546152af9190615d6c565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a56020526040812080548392906152e8908490615d6c565b90915550506040516152fb908490615fbd565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015615417575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146153a7576040519150601f19603f3d011682016040523d82523d5f602084013e6153ac565b606091505b5050905080611e76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610c1a565b5050565b6154236143ed565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586154763390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6154a861586f565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615476565b5f8161555f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610c1a565b82825f81811061557157615571616038565b919091013560f81c949350505050565b5f8160f98110156155ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610c1a565b6040519150808483378082016040529250929050565b5f8161010181146155ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610c1a565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016156a68161ffff8716866158db565b82900390912095945050505050565b8082535050565b60605f808080806156cf888a018a616152565b95509550955095509550508187106156ed5794506157099350505050565b838710615701578295505050505050615709565b509293505050505b9392505050565b5f54610100900460ff166157a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b61262f33614f30565b60655460ff1661262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610c1a565b5f825f036158ea575082615709565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b848110156159b1576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061599c9190615e0e565b87525060209095019460019384019301615905565b5093949350505050565b5f602082840312156159cb575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146159f5575f80fd5b919050565b5f60208284031215615a0a575f80fd5b615709826159d2565b5f8083601f840112615a23575f80fd5b50813567ffffffffffffffff811115615a3a575f80fd5b602083019150836020828501011115615a51575f80fd5b9250929050565b5f805f60408486031215615a6a575f80fd5b833567ffffffffffffffff811115615a80575f80fd5b615a8c86828701615a13565b909790965060209590950135949350505050565b5f8060208385031215615ab1575f80fd5b823567ffffffffffffffff811115615ac7575f80fd5b615ad385828601615a13565b90969095509350505050565b5f60e08284031215615aef575f80fd5b50919050565b5f60608284031215615aef575f80fd5b5f8060408385031215615b16575f80fd5b823567ffffffffffffffff80821115615b2d575f80fd5b615b3986838701615adf565b93506020850135915080821115615b4e575f80fd5b50615b5b85828601615af5565b9150509250929050565b5f805f805f8060808789031215615b7a575f80fd5b863567ffffffffffffffff80821115615b91575f80fd5b615b9d8a838b01615adf565b97506020890135915080821115615bb2575f80fd5b615bbe8a838b01615af5565b96506040890135915080821115615bd3575f80fd5b615bdf8a838b01615a13565b90965094506060890135915080821115615bf7575f80fd5b50615c0489828a01615a13565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615c2b575f80fd5b615c34876159d2565b9550615c42602088016159d2565b9450615c50604088016159d2565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615c84575f80fd5b843567ffffffffffffffff80821115615c9b575f80fd5b615ca788838901615a13565b90965094506020870135915080821115615cbf575f80fd5b50615ccc87828801615a13565b95989497509550505050565b8015158114613659575f80fd5b5f60208284031215615cf5575f80fd5b813561570981615cd8565b803567ffffffffffffffff811681146159f5575f80fd5b5f8060408385031215615d28575f80fd5b615d3183615d00565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611b1257611b12615d3f565b81810381811115611b1257611b12615d3f565b5f60208284031215615da2575f80fd5b815161570981615cd8565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615de0575f80fd5b83018035915067ffffffffffffffff821115615dfa575f80fd5b602001915036819003821315615a51575f80fd5b5f60208284031215615e1e575f80fd5b5051919050565b5f60208284031215615e35575f80fd5b813561ffff81168114615709575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e7657615e76615d3f565b5060010190565b5f60208284031215615e8d575f80fd5b813560ff81168114615709575f80fd5b5f60208284031215615ead575f80fd5b61570982615d00565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615f6357845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615f31565b50508760408601528481036060860152615f7e818789615ec5565b9a9950505050505050505050565b858152846020820152608060408201525f615fab608083018587615ec5565b90508260608301529695505050505050565b5f82515f5b81811015615fdc5760208186018101518583015201615fc2565b505f920191825250919050565b8082028115828204841417611b1257611b12615d3f565b5f82616033577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126160a1575f80fd5b8135602067ffffffffffffffff808311156160be576160be616065565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561610157616101616065565b6040529384526020818701810194908101925087851115616120575f80fd5b6020870191505b8482101561614757616138826159d2565b83529183019190830190616127565b979650505050505050565b5f805f805f8060c08789031215616167575f80fd5b86359550602087013567ffffffffffffffff80821115616185575f80fd5b6161918a838b01616092565b96506040890135955060608901359150808211156161ad575f80fd5b6161b98a838b01616092565b94506080890135935060a08901359150808211156161d5575f80fd5b506161e289828a01616092565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/bindings/bindings/zkevmverifierv1.go b/bindings/bindings/zkevmverifierv1.go index 49fcf07b1..b8a903a4e 100644 --- a/bindings/bindings/zkevmverifierv1.go +++ b/bindings/bindings/zkevmverifierv1.go @@ -31,8 +31,8 @@ var ( // ZkEvmVerifierV1MetaData contains all meta data concerning the ZkEvmVerifierV1 contract. var ZkEvmVerifierV1MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_programVkey\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"received\",\"type\":\"bytes4\"},{\"internalType\":\"bytes4\",\"name\":\"expected\",\"type\":\"bytes4\"}],\"name\":\"WrongVerifierSelector\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VERIFIER_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"public_inputs\",\"type\":\"uint256[]\"}],\"name\":\"Verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicValues\",\"type\":\"bytes\"}],\"name\":\"hashPublicValues\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programVkey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"publicInputHash\",\"type\":\"bytes32\"}],\"name\":\"verifyBatch\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"publicInputHash\",\"type\":\"bytes\"}],\"name\":\"verifyPlonk\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"programVKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"publicValues\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofBytes\",\"type\":\"bytes\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b506040516200314d3803806200314d83398101604081905262000033916200003b565b5f5562000053565b5f602082840312156200004c575f80fd5b5051919050565b6130ec80620000615f395ff3fe608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636b61d8e7116100585780636b61d8e7146100d45780637e4f7a8a146100e7578063a48fd34b1461010a578063c8bd01761461011d575f80fd5b806309665ee71461007e5780632a5104361461009957806341493c60146100bf575b5f80fd5b6100865f5481565b6040519081526020015b60405180910390f35b7fffea2d2e12ed24da258af874d77eee7ee91a1e050ee197052908089e57681e67610086565b6100d26100cd366004612cb5565b610130565b005b6100866100e2366004612d29565b61033e565b6100fa6100f5366004612d68565b6103ba565b6040519015158152602001610090565b6100d2610118366004612dfa565b612b74565b6100d261012b366004612e61565b612be1565b5f61013e6004828486612ea9565b61014791612ed0565b90507fffea2d2e12ed24da258af874d77eee7ee91a1e050ee197052908089e57681e677fffea2d2e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610215576040517f988066a10000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000080841660048301528216602482015260440160405180910390fd5b5f610220878761033e565b6040805160028082526060820183529293505f929091602083019080368337019050509050885f1c815f8151811061025a5761025a612f18565b602002602001018181525050815f1c8160018151811061027c5761027c612f18565b60209081029190910101525f30637e4f7a8a61029b886004818c612ea9565b856040518463ffffffff1660e01b81526004016102ba93929190612f8c565b602060405180830381865afa1580156102d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f99190612fe3565b905080610332576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b5f7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f1b60028484604051610374929190613009565b602060405180830381855afa15801561038f573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103b29190613018565b169392505050565b5f60405161024081016103cc846107fd565b6103d68585610810565b6103df8661085f565b6103e887610875565b5f6103f486868a610a0f565b90506103ff81610d46565b905061040b8189610dac565b90506104178189610e3a565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061046e84630100000085612b16565b086101c084015250610481818587610ea5565b61048c82868a61121a565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101a0840152506104c390506115bf565b6104cc8661270a565b6104d58661265b565b6104de86612282565b6104e786611dad565b6104f086611b0e565b6104f986611710565b61020001519050612b6c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6572726f722070616972696e67000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b6002811461080d5761080d610505565b50565b5f5b8181101561085a577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008335111561084b5761084b6105c3565b60209290920191600101610812565b505050565b61036081811461087157610871610622565b5050565b61018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156108ab576108ab610681565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156108e2576108e2610681565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561091957610919610681565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561095057610950610681565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561098757610987610681565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109be576109be610681565b5061030081015f5b600181101561085a577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000082351115610a0057610a00610681565b602091909101906001016109c6565b5f60405161024081016467616d6d6181527f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f7460208201527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e60408201527f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c2760608201527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f60808201527f2d22aa21883e2c02aeefdbb41a89e31305b7f785cff8d2543de3d2de0e67eb3760a08201527f27f57efe361342b4447b60b663324f47b268d2168a44b2c5a1ae943ad783eac260c08201527f07461bbeeaa489f270aea1e2f15a0b17a6828ee15568ca45d23b104609c983ac60e08201527f2a5d601b3c029f586ccf3d13f9610ec159fd271dff812606f3ac634637decbed6101008201527f2d8762fae30474b2d6707bfab8b02b7e87114c06452e946f685c3fe31af51d296101208201527f0481025548775a91bbce4d119d9f3d49f792d894182ded35400d7877bc7b1d086101408201527f072bde4706c1f31ca6f9d00281492fb765e066e2a91394829338eb8a728571566101608201527f035d79829b0c4f17f1ead06dc0dad3190dc3e0916d488882dbce96e970d9fa356101808201527f280dc265bff4759e2bfe552f6792226bc2667a39e5560316abd8825bc8ebc10a6101a08201527f1aacdb7d7cc8e54875efbcbd34b7149ed44fcdb0728e026f4369e7d48cfac8b06101c08201527f1d0dcabaa449cc5f2655bea87941c30e5a3be902444b9162918506600eacd3076101e08201527f1b00b88b20052a37c14a3beadb4c419bef8c04cc395f0566b50f0bf1090ce5746102008201527f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a6102208201527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa905080610d1057610d1061073f565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b5f60405161024060405101636265746181528360208201526020816024601c840160025afa80610d7857610d7861073f565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b5f60405161024060405101606564616c7068618252602082018681526020810190506103208601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610e0b57610e0b61073f565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161024060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610e7557610e7561073f565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b5f60405160608101516101c0820151915085610ec381878585610f3e565b5f92505f91505b85821015610f34577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610eca565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1183096001855f5b8681101561102c577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b8409925060209190910190600101610f87565b506110388187896110f0565b5060019050855f5b868110156110e6577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b84099250600101611040565b5050505050505050565b600183525f805b838110156111455781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099050602084019350808488015250506001810190506110f7565b5060208103820191508084019350506111866020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001038551612b16565b5f5b838110156112135760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101611188565b5050505050565b5f60405160608101516101c0820151915061032084015f8061124289602085013585356113c6565b91506112558962a350ce8a01878761128b565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b5f6112b785857f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b612b16565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1182099050611370867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff87612b16565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b5f83525f602084015280604084015250806060830152505f6080820153603060818201535f60828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201535f602082608f8460025afa8061145c5761145c61073f565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa9150816114d2576114d261073f565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806115535761155361073f565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610240604051016101c08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103606085015108611645837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff83612b16565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b60405161024081016101608201518152610180820151602082015261028083013560408201526102a08301356060820152610220830135608082015261024083013560a08201526102c083013560c08201526102e083013560e082015260608201516101008201526101e08201516101208201526020816101408360025afa8061179c5761179c61079e565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182510690508160408101925061028085013581526102a085013560208201526117ec83836102c0880184612a7d565b61016084016118018484610220890184612a7d565b610140850161181584610260890183612ac4565b7f1fa4be93b5e7f7e674d5059b63554fab99638b304ed8310e9fa44c281ac9b03b85527f1a01ae7fac6228e39d3cb5a5e71fd31160f3241e79a5f48ffb3737e6c389b7216020860152805160408087019182529095908160608160075afa9150816118825761188261073f565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470382526118ba86828586612974565b5050836040850194506118d78560608801516102808a0184612a0b565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868509935061195785856102c08a0184612a7d565b61196385828485612974565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f22f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a486101008401527f2a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb6101208401527f159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f86101408401527f0efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b3610160840152925061085a90508160405160205f6101808460085afa80611b0057611b006106e0565b505f51610200919091015250565b6040516101e081015160e08201516101608301908152610100830151610180840152610120830151610140840152610240830191610260840191610280850191908190611b5d86838a84612a7d565b611b70826101808a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611ba5868360408b0184612a7d565b611bb8826101a08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611bed868360808b0184612a7d565b611c00826101c08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f7486527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e8552611c7884838884612a36565b611c8b826101e08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c2786527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f8552611d0384838884612a36565b611d16826102008a016101408a01612ac4565b61030088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a87527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c8652611d9385848985612a36565b611da283826101408b01612ac4565b505050505050505050565b6040516467616d6d616102408201908152606082015161026083015260e08201516102808301526101008201516102a083015260c0836102c08401377f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f746101408201527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e6101608201527f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c27610180808301919091527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f6101a0808401919091527f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a6101c0808501919091527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c6101e0808601919091526101208601516102008087019190915293870135610220860152918601356102408501528501356102608401528401356102808301528301356102a08201526102c081016103008401602081833750610260840135602091820152601b906102e5906101e085018285850160025afa9250505080611f6357611f6361073f565b506101e00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610240604051017f07461bbeeaa489f270aea1e2f15a0b17a6828ee15568ca45d23b104609c983ac81527f2a5d601b3c029f586ccf3d13f9610ec159fd271dff812606f3ac634637decbed6020820152611ffc604082016101808501358360e086016129e0565b7f2d8762fae30474b2d6707bfab8b02b7e87114c06452e946f685c3fe31af51d2981527f0481025548775a91bbce4d119d9f3d49f792d894182ded35400d7877bc7b1d08602082015261205c604082016101a08501358360e08601612a36565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f072bde4706c1f31ca6f9d00281492fb765e066e2a91394829338eb8a7285715682527f035d79829b0c4f17f1ead06dc0dad3190dc3e0916d488882dbce96e970d9fa3560208301526120e560408301828460e08701612a36565b507f280dc265bff4759e2bfe552f6792226bc2667a39e5560316abd8825bc8ebc10a81527f1aacdb7d7cc8e54875efbcbd34b7149ed44fcdb0728e026f4369e7d48cfac8b06020820152612146604082016101c08501358360e08601612a36565b7f1d0dcabaa449cc5f2655bea87941c30e5a3be902444b9162918506600eacd30781527f1b00b88b20052a37c14a3beadb4c419bef8c04cc395f0566b50f0bf1090ce57460208201526121a1604082018260e0850180612974565b610300830161032084015f5b60018110156121ed5781358452602082013560208501526121d76040850184358660e08901612a36565b60209290920191604091909101906001016121ad565b5050507f2d22aa21883e2c02aeefdbb41a89e31305b7f785cff8d2543de3d2de0e67eb3781527f27f57efe361342b4447b60b663324f47b268d2168a44b2c5a1ae943ad783eac2602082015261224b60408201858360e08601612a36565b6102208301358152610240830135602082015261227060408201868360e08601612a36565b6112138160a0840160e0850180612974565b6040516020810151604082015160608301515f8401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061033288828c611f92565b60405160026301000000016102406040510161267c81836060860151612b16565b91506126918183610140870160a08701612a0b565b6126a481610100860160a08601806129aa565b6126b3818360a08601806129e0565b6126c58160c0860160a08601806129aa565b6126dc816101c085015160a0860160a087016129e0565b505060c00180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703905250565b6040515f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040830151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180840135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040840151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0850135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f840151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850135830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840151830860808401519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190810391508183087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036101209390930192909252505050565b8151845260208201516020850152825160408501526020830151606085015260408160808660065afa8061121357611213610564565b8151845260208201516020850152823560408501526020830135606085015260408160808660065afa8061121357611213610564565b815184526020820151602085015282604085015260408160608660075afa8061121357611213610564565b813584526020820135602085015282604085015260408160608660075afa8061121357611213610564565b815184526020820151602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa168061121357611213610564565b813584526020808301359085015260408481018490528460608160075afa815160408601526020820151606086015260408260808760065afa168061121357611213610564565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08201525f60208260c08460055afa50505190565b949350505050565b5f546040517f41493c6000000000000000000000000000000000000000000000000000000000815230916341493c6091612bb99190869086908a908a9060040161302f565b5f6040518083038186803b158015612bcf575f80fd5b505afa1580156110e6573d5f803e3d5ffd5b3073ffffffffffffffffffffffffffffffffffffffff1663a48fd34b848484604051602001612c1291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612c3f93929190613067565b5f6040518083038186803b158015612c55575f80fd5b505afa158015612c67573d5f803e3d5ffd5b50505050505050565b5f8083601f840112612c80575f80fd5b50813567ffffffffffffffff811115612c97575f80fd5b602083019150836020828501011115612cae575f80fd5b9250929050565b5f805f805f60608688031215612cc9575f80fd5b85359450602086013567ffffffffffffffff80821115612ce7575f80fd5b612cf389838a01612c70565b90965094506040880135915080821115612d0b575f80fd5b50612d1888828901612c70565b969995985093965092949392505050565b5f8060208385031215612d3a575f80fd5b823567ffffffffffffffff811115612d50575f80fd5b612d5c85828601612c70565b90969095509350505050565b5f805f8060408587031215612d7b575f80fd5b843567ffffffffffffffff80821115612d92575f80fd5b612d9e88838901612c70565b90965094506020870135915080821115612db6575f80fd5b818701915087601f830112612dc9575f80fd5b813581811115612dd7575f80fd5b8860208260051b8501011115612deb575f80fd5b95989497505060200194505050565b5f805f8060408587031215612e0d575f80fd5b843567ffffffffffffffff80821115612e24575f80fd5b612e3088838901612c70565b90965094506020870135915080821115612e48575f80fd5b50612e5587828801612c70565b95989497509550505050565b5f805f60408486031215612e73575f80fd5b833567ffffffffffffffff811115612e89575f80fd5b612e9586828701612c70565b909790965060209590950135949350505050565b5f8085851115612eb7575f80fd5b83861115612ec3575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015612f105780818660040360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612f9f604083018587612f45565b8281036020848101919091528451808352858201928201905f5b81811015612fd557845183529383019391830191600101612fb9565b509098975050505050505050565b5f60208284031215612ff3575f80fd5b81518015158114613002575f80fd5b9392505050565b818382375f9101908152919050565b5f60208284031215613028575f80fd5b5051919050565b858152606060208201525f613048606083018688612f45565b828103604084015261305b818587612f45565b98975050505050505050565b604081525f61307a604083018587612f45565b60208382038185015284518083525f5b818110156130a557868101830151848201840152820161308a565b505f838201830152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019594505050505056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_programVkey\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"received\",\"type\":\"bytes4\"},{\"internalType\":\"bytes4\",\"name\":\"expected\",\"type\":\"bytes4\"}],\"name\":\"WrongVerifierSelector\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VERIFIER_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"public_inputs\",\"type\":\"uint256[]\"}],\"name\":\"Verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicValues\",\"type\":\"bytes\"}],\"name\":\"hashPublicValues\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programVkey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"publicInputHash\",\"type\":\"bytes32\"}],\"name\":\"verifyBatch\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"publicInputHash\",\"type\":\"bytes\"}],\"name\":\"verifyPlonk\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"programVKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"publicValues\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofBytes\",\"type\":\"bytes\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b50604051620032263803806200322683398101604081905262000033916200003b565b5f5562000053565b5f602082840312156200004c575f80fd5b5051919050565b6131c580620000615f395ff3fe608060405234801561000f575f80fd5b5060043610610085575f3560e01c80637e4f7a8a116100585780637e4f7a8a146100f2578063a48fd34b14610115578063c8bd017614610128578063ffa1ad741461013b575f80fd5b806309665ee7146100895780632a510436146100a457806341493c60146100ca5780636b61d8e7146100df575b5f80fd5b6100915f5481565b6040519081526020015b60405180910390f35b7fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e7610091565b6100dd6100d8366004612d64565b61017a565b005b6100916100ed366004612dd8565b610388565b610105610100366004612e17565b610404565b604051901515815260200161009b565b6100dd610123366004612ea9565b612c23565b6100dd610136366004612f10565b612c90565b604080518082018252600681527f76352e302e3000000000000000000000000000000000000000000000000000006020820152905161009b9190612fb9565b5f6101886004828486612fd2565b61019191612ff9565b90507fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e77fd4e8ecd2000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461025f576040517f988066a10000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000080841660048301528216602482015260440160405180910390fd5b5f61026a8787610388565b6040805160028082526060820183529293505f929091602083019080368337019050509050885f1c815f815181106102a4576102a4613041565b602002602001018181525050815f1c816001815181106102c6576102c6613041565b60209081029190910101525f30637e4f7a8a6102e5886004818c612fd2565b856040518463ffffffff1660e01b8152600401610304939291906130b5565b602060405180830381865afa15801561031f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610343919061310c565b90508061037c576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b5f7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f1b600284846040516103be92919061312b565b602060405180830381855afa1580156103d9573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103fc919061313a565b169392505050565b5f6040516102408101610416846108a6565b61042085856108b9565b61042986610908565b6104328761091e565b5f61043e86868a610ab8565b905061044981610dee565b90506104558189610e54565b90506104618189610ee2565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006104b884630100000085612bb8565b086101c0840152506104cb818587610f4d565b6104d682868a6112c2565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101a08401525061050d9050611667565b610516866127ac565b61051f866126fd565b61052886612324565b61053186611e50565b61053a86611bb6565b610543866117b8565b61020001519050612c1b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f72206d6f6420657870000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6572726f722070616972696e67000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b600281146108b6576108b661054f565b50565b5f5b81811015610903577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000833511156108f4576108f461066c565b602092909201916001016108bb565b505050565b61036081811461091a5761091a6106cb565b5050565b61018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109545761095461072a565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561098b5761098b61072a565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109c2576109c261072a565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109f9576109f961072a565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610a3057610a3061072a565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610a6757610a6761072a565b5061030081015f5b6001811015610903577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000082351115610aa957610aa961072a565b60209190910190600101610a6f565b5f60405161024081016467616d6d6181527f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a60208201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb960408201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a60608201527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd060808201527f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f60a08201527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c2960c08201527f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd60e08201527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be6101008201527f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a6101208201527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d6101408201527f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f6101608201527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e6101808201527f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b776101a08201527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf6101c08201527f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf1366101e08201527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f36102008201527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6102208201527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d79610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa905080610db857610db86107e8565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b5f60405161024060405101636265746181528360208201526020816024601c840160025afa80610e2057610e206107e8565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b5f60405161024060405101606564616c7068618252602082018681526020810190506103208601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610eb357610eb36107e8565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161024060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610f1d57610f1d6107e8565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b5f60405160608101516101c0820151915085610f6b81878585610fe6565b5f92505f91505b85821015610fdc577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610f72565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1183096001855f5b868110156110d4577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b840992506020919091019060010161102f565b506110e0818789611198565b5060019050855f5b8681101561118e577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b840992506001016110e8565b5050505050505050565b600183525f805b838110156111ed5781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990506020840193508084880152505060018101905061119f565b50602081038201915080840193505061122e6020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001038551612bb8565b5f5b838110156112bb5760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101611230565b5050505050565b5f60405160608101516101c0820151915061032084015f806112ea896020850135853561146e565b91506112fd8962a653508a018787611333565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b5f61135f85857f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b612bb8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1182099050611418867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff87612bb8565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b5f83525f602084015280604084015250806060830152505f6080820153603060818201535f60828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201535f602082608f8460025afa80611504576115046107e8565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa91508161157a5761157a6107e8565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806115fb576115fb6107e8565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610240604051016101c08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036060850151086116ed837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff83612bb8565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b60405161024081016101608201518152610180820151602082015261028083013560408201526102a08301356060820152610220830135608082015261024083013560a08201526102c083013560c08201526102e083013560e082015260608201516101008201526101e08201516101208201526020816101408360025afa8061184457611844610847565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182510690508160408101925061028085013581526102a0850135602082015261189483836102c0880184612b1f565b61016084016118a98484610220890184612b1f565b61014085016118bd84610260890183612b66565b7f1fa4be93b5e7f7e674d5059b63554fab99638b304ed8310e9fa44c281ac9b03b85527f1a01ae7fac6228e39d3cb5a5e71fd31160f3241e79a5f48ffb3737e6c389b7216020860152805160408087019182529095908160608160075afa91508161192a5761192a6107e8565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703825261196286828586612a16565b50508360408501945061197f8560608801516102808a0184612aad565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186850993506119ff85856102c08a0184612b1f565b611a0b85828485612a16565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f22f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a486101008401527f2a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb6101208401527f159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f86101408401527f0efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b3610160840152925061090390508160405160205f6101808460085afa80611ba857611ba8610789565b505f51610200919091015250565b6040516102406040510160208101604082016101e084015180610160860160e08701518152610100870151610180880152610120870151610140880152611c0186835f8b0184612b1f565b611c14826101808a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611c49868360408b0184612b1f565b611c5c826101a08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611c91868360808b0184612b1f565b611ca4826101c08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a86527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb98552611d1c84838884612ad8565b611d2f826101e08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a86527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd08552611da684838884612ad8565b611db9826102008a016101408a01612b66565b61030088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe87527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d798652611e3685848985612ad8565b611e4583826101408b01612b66565b505050505050505050565b6040516467616d6d616102408201908152606082015161026083015260e08201516102808301526101008201516102a083015260c0836102c08401377f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a6101408201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb96101608201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a610180808301919091527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd06101a0808401919091527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6101c0808501919091527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d796101e0808601919091526101208601516102008087019190915293870135610220860152918601356102408501528501356102608401528401356102808301528301356102a08201526102c081016103008401602081833750610260840135602091820152601b906102e5906101e085018285850160025afa9250505080612005576120056107e8565b506101e00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610240604051017f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd81527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be602082015261209e604082016101808501358360e08601612a82565b7f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a81527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d60208201526120fe604082016101a08501358360e08601612ad8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f82527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e602083015261218760408301828460e08701612ad8565b507f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b7781527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf60208201526121e8604082016101c08501358360e08601612ad8565b7f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf13681527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f36020820152612243604082018260e0850180612a16565b610300830161032084015f5b600181101561228f5781358452602082013560208501526122796040850184358660e08901612ad8565b602092909201916040919091019060010161224f565b5050507f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f81527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c2960208201526122ed60408201858360e08601612ad8565b6102208301358152610240830135602082015261231260408201868360e08601612ad8565b6112bb8160a0840160e0850180612a16565b6040516020810151604082015160608301515f8401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061037c88828c612034565b60405160026301000000016102406040510161271e81836060860151612bb8565b91506127338183610140870160a08701612aad565b61274681610100860160a0860180612a4c565b612755818360a0860180612a82565b6127678160c0860160a0860180612a4c565b61277e816101c085015160a0860160a08701612a82565b505060c00180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703905250565b6040515f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040830151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180840135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040840151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0850135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f840151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850135830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840151830860808401519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190810391508183087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036101209390930192909252505050565b8151845260208201516020850152825160408501526020830151606085015260408160808660065afa806112bb576112bb61060d565b8151845260208201516020850152823560408501526020830135606085015260408160808660065afa806112bb576112bb61060d565b815184526020820151602085015282604085015260408160608660075afa806112bb576112bb61060d565b813584526020820135602085015282604085015260408160608660075afa806112bb576112bb61060d565b815184526020820151602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa16806112bb576112bb61060d565b813584526020820135602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa16806112bb576112bb61060d565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08201525f60208260c08460055afa80612c1557612c156105ae565b50505190565b949350505050565b5f546040517f41493c6000000000000000000000000000000000000000000000000000000000815230916341493c6091612c689190869086908a908a90600401613151565b5f6040518083038186803b158015612c7e575f80fd5b505afa15801561118e573d5f803e3d5ffd5b3073ffffffffffffffffffffffffffffffffffffffff1663a48fd34b848484604051602001612cc191815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612cee93929190613189565b5f6040518083038186803b158015612d04575f80fd5b505afa158015612d16573d5f803e3d5ffd5b50505050505050565b5f8083601f840112612d2f575f80fd5b50813567ffffffffffffffff811115612d46575f80fd5b602083019150836020828501011115612d5d575f80fd5b9250929050565b5f805f805f60608688031215612d78575f80fd5b85359450602086013567ffffffffffffffff80821115612d96575f80fd5b612da289838a01612d1f565b90965094506040880135915080821115612dba575f80fd5b50612dc788828901612d1f565b969995985093965092949392505050565b5f8060208385031215612de9575f80fd5b823567ffffffffffffffff811115612dff575f80fd5b612e0b85828601612d1f565b90969095509350505050565b5f805f8060408587031215612e2a575f80fd5b843567ffffffffffffffff80821115612e41575f80fd5b612e4d88838901612d1f565b90965094506020870135915080821115612e65575f80fd5b818701915087601f830112612e78575f80fd5b813581811115612e86575f80fd5b8860208260051b8501011115612e9a575f80fd5b95989497505060200194505050565b5f805f8060408587031215612ebc575f80fd5b843567ffffffffffffffff80821115612ed3575f80fd5b612edf88838901612d1f565b90965094506020870135915080821115612ef7575f80fd5b50612f0487828801612d1f565b95989497509550505050565b5f805f60408486031215612f22575f80fd5b833567ffffffffffffffff811115612f38575f80fd5b612f4486828701612d1f565b909790965060209590950135949350505050565b5f81518084525f5b81811015612f7c57602081850181015186830182015201612f60565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612fcb6020830184612f58565b9392505050565b5f8085851115612fe0575f80fd5b83861115612fec575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156130395780818660040360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6130c860408301858761306e565b8281036020848101919091528451808352858201928201905f5b818110156130fe578451835293830193918301916001016130e2565b509098975050505050505050565b5f6020828403121561311c575f80fd5b81518015158114612fcb575f80fd5b818382375f9101908152919050565b5f6020828403121561314a575f80fd5b5051919050565b858152606060208201525f61316a60608301868861306e565b828103604084015261317d81858761306e565b98975050505050505050565b604081525f61319c60408301858761306e565b82810360208401526131ae8185612f58565b969550505050505056fea164736f6c6343000818000a", } // ZkEvmVerifierV1ABI is the input ABI used to generate the binding from. @@ -233,6 +233,37 @@ func (_ZkEvmVerifierV1 *ZkEvmVerifierV1CallerSession) VERIFIERHASH() ([32]byte, return _ZkEvmVerifierV1.Contract.VERIFIERHASH(&_ZkEvmVerifierV1.CallOpts) } +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() pure returns(string) +func (_ZkEvmVerifierV1 *ZkEvmVerifierV1Caller) VERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZkEvmVerifierV1.contract.Call(opts, &out, "VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() pure returns(string) +func (_ZkEvmVerifierV1 *ZkEvmVerifierV1Session) VERSION() (string, error) { + return _ZkEvmVerifierV1.Contract.VERSION(&_ZkEvmVerifierV1.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() pure returns(string) +func (_ZkEvmVerifierV1 *ZkEvmVerifierV1CallerSession) VERSION() (string, error) { + return _ZkEvmVerifierV1.Contract.VERSION(&_ZkEvmVerifierV1.CallOpts) +} + // Verify is a free data retrieval call binding the contract method 0x7e4f7a8a. // // Solidity: function Verify(bytes proof, uint256[] public_inputs) view returns(bool success) diff --git a/bindings/bindings/zkevmverifierv1_more.go b/bindings/bindings/zkevmverifierv1_more.go index 8169ca000..30895a160 100644 --- a/bindings/bindings/zkevmverifierv1_more.go +++ b/bindings/bindings/zkevmverifierv1_more.go @@ -13,7 +13,7 @@ const ZkEvmVerifierV1StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contra var ZkEvmVerifierV1StorageLayout = new(solc.StorageLayout) -var ZkEvmVerifierV1DeployedBin = "0x608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636b61d8e7116100585780636b61d8e7146100d45780637e4f7a8a146100e7578063a48fd34b1461010a578063c8bd01761461011d575f80fd5b806309665ee71461007e5780632a5104361461009957806341493c60146100bf575b5f80fd5b6100865f5481565b6040519081526020015b60405180910390f35b7fffea2d2e12ed24da258af874d77eee7ee91a1e050ee197052908089e57681e67610086565b6100d26100cd366004612cb5565b610130565b005b6100866100e2366004612d29565b61033e565b6100fa6100f5366004612d68565b6103ba565b6040519015158152602001610090565b6100d2610118366004612dfa565b612b74565b6100d261012b366004612e61565b612be1565b5f61013e6004828486612ea9565b61014791612ed0565b90507fffea2d2e12ed24da258af874d77eee7ee91a1e050ee197052908089e57681e677fffea2d2e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610215576040517f988066a10000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000080841660048301528216602482015260440160405180910390fd5b5f610220878761033e565b6040805160028082526060820183529293505f929091602083019080368337019050509050885f1c815f8151811061025a5761025a612f18565b602002602001018181525050815f1c8160018151811061027c5761027c612f18565b60209081029190910101525f30637e4f7a8a61029b886004818c612ea9565b856040518463ffffffff1660e01b81526004016102ba93929190612f8c565b602060405180830381865afa1580156102d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f99190612fe3565b905080610332576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b5f7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f1b60028484604051610374929190613009565b602060405180830381855afa15801561038f573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103b29190613018565b169392505050565b5f60405161024081016103cc846107fd565b6103d68585610810565b6103df8661085f565b6103e887610875565b5f6103f486868a610a0f565b90506103ff81610d46565b905061040b8189610dac565b90506104178189610e3a565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061046e84630100000085612b16565b086101c084015250610481818587610ea5565b61048c82868a61121a565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101a0840152506104c390506115bf565b6104cc8661270a565b6104d58661265b565b6104de86612282565b6104e786611dad565b6104f086611b0e565b6104f986611710565b61020001519050612b6c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6572726f722070616972696e67000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b6002811461080d5761080d610505565b50565b5f5b8181101561085a577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008335111561084b5761084b6105c3565b60209290920191600101610812565b505050565b61036081811461087157610871610622565b5050565b61018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156108ab576108ab610681565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156108e2576108e2610681565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561091957610919610681565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561095057610950610681565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561098757610987610681565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109be576109be610681565b5061030081015f5b600181101561085a577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000082351115610a0057610a00610681565b602091909101906001016109c6565b5f60405161024081016467616d6d6181527f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f7460208201527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e60408201527f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c2760608201527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f60808201527f2d22aa21883e2c02aeefdbb41a89e31305b7f785cff8d2543de3d2de0e67eb3760a08201527f27f57efe361342b4447b60b663324f47b268d2168a44b2c5a1ae943ad783eac260c08201527f07461bbeeaa489f270aea1e2f15a0b17a6828ee15568ca45d23b104609c983ac60e08201527f2a5d601b3c029f586ccf3d13f9610ec159fd271dff812606f3ac634637decbed6101008201527f2d8762fae30474b2d6707bfab8b02b7e87114c06452e946f685c3fe31af51d296101208201527f0481025548775a91bbce4d119d9f3d49f792d894182ded35400d7877bc7b1d086101408201527f072bde4706c1f31ca6f9d00281492fb765e066e2a91394829338eb8a728571566101608201527f035d79829b0c4f17f1ead06dc0dad3190dc3e0916d488882dbce96e970d9fa356101808201527f280dc265bff4759e2bfe552f6792226bc2667a39e5560316abd8825bc8ebc10a6101a08201527f1aacdb7d7cc8e54875efbcbd34b7149ed44fcdb0728e026f4369e7d48cfac8b06101c08201527f1d0dcabaa449cc5f2655bea87941c30e5a3be902444b9162918506600eacd3076101e08201527f1b00b88b20052a37c14a3beadb4c419bef8c04cc395f0566b50f0bf1090ce5746102008201527f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a6102208201527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa905080610d1057610d1061073f565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b5f60405161024060405101636265746181528360208201526020816024601c840160025afa80610d7857610d7861073f565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b5f60405161024060405101606564616c7068618252602082018681526020810190506103208601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610e0b57610e0b61073f565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161024060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610e7557610e7561073f565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b5f60405160608101516101c0820151915085610ec381878585610f3e565b5f92505f91505b85821015610f34577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610eca565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1183096001855f5b8681101561102c577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b8409925060209190910190600101610f87565b506110388187896110f0565b5060019050855f5b868110156110e6577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b84099250600101611040565b5050505050505050565b600183525f805b838110156111455781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099050602084019350808488015250506001810190506110f7565b5060208103820191508084019350506111866020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001038551612b16565b5f5b838110156112135760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101611188565b5050505050565b5f60405160608101516101c0820151915061032084015f8061124289602085013585356113c6565b91506112558962a350ce8a01878761128b565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b5f6112b785857f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b612b16565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1182099050611370867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff87612b16565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b5f83525f602084015280604084015250806060830152505f6080820153603060818201535f60828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201535f602082608f8460025afa8061145c5761145c61073f565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa9150816114d2576114d261073f565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806115535761155361073f565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610240604051016101c08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103606085015108611645837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff83612b16565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b60405161024081016101608201518152610180820151602082015261028083013560408201526102a08301356060820152610220830135608082015261024083013560a08201526102c083013560c08201526102e083013560e082015260608201516101008201526101e08201516101208201526020816101408360025afa8061179c5761179c61079e565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182510690508160408101925061028085013581526102a085013560208201526117ec83836102c0880184612a7d565b61016084016118018484610220890184612a7d565b610140850161181584610260890183612ac4565b7f1fa4be93b5e7f7e674d5059b63554fab99638b304ed8310e9fa44c281ac9b03b85527f1a01ae7fac6228e39d3cb5a5e71fd31160f3241e79a5f48ffb3737e6c389b7216020860152805160408087019182529095908160608160075afa9150816118825761188261073f565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470382526118ba86828586612974565b5050836040850194506118d78560608801516102808a0184612a0b565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868509935061195785856102c08a0184612a7d565b61196385828485612974565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f22f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a486101008401527f2a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb6101208401527f159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f86101408401527f0efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b3610160840152925061085a90508160405160205f6101808460085afa80611b0057611b006106e0565b505f51610200919091015250565b6040516101e081015160e08201516101608301908152610100830151610180840152610120830151610140840152610240830191610260840191610280850191908190611b5d86838a84612a7d565b611b70826101808a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611ba5868360408b0184612a7d565b611bb8826101a08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611bed868360808b0184612a7d565b611c00826101c08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f7486527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e8552611c7884838884612a36565b611c8b826101e08a016101408a01612ac4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c2786527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f8552611d0384838884612a36565b611d16826102008a016101408a01612ac4565b61030088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a87527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c8652611d9385848985612a36565b611da283826101408b01612ac4565b505050505050505050565b6040516467616d6d616102408201908152606082015161026083015260e08201516102808301526101008201516102a083015260c0836102c08401377f1c49223fce451fa84ed1e40acb592ab8476710ae7496a4a9fbd79885d04a8f746101408201527f11fb124b0a1ff36f046fbdebf9f6e29290f97952e3a968688c340f9369ad027e6101608201527f2fe1a4609b1141b4fc03cf73428f223643bfc676e6dc0323ffbe87f1fc4d2c27610180808301919091527f03cca4f52a83b38048f6fb2c6d1f12209ccd6135e5ef7bc133cdb431f47de36f6101a0808401919091527f1c2b5a7bce99e1e92402a2cb7f51cf3e359306bd7097247487a7fa4e5a60411a6101c0808501919091527f15f7c1d76eea2be4bdc4ae79cab797e20f3a01a6a62df3f6e403e0feddb2986c6101e0808601919091526101208601516102008087019190915293870135610220860152918601356102408501528501356102608401528401356102808301528301356102a08201526102c081016103008401602081833750610260840135602091820152601b906102e5906101e085018285850160025afa9250505080611f6357611f6361073f565b506101e00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610240604051017f07461bbeeaa489f270aea1e2f15a0b17a6828ee15568ca45d23b104609c983ac81527f2a5d601b3c029f586ccf3d13f9610ec159fd271dff812606f3ac634637decbed6020820152611ffc604082016101808501358360e086016129e0565b7f2d8762fae30474b2d6707bfab8b02b7e87114c06452e946f685c3fe31af51d2981527f0481025548775a91bbce4d119d9f3d49f792d894182ded35400d7877bc7b1d08602082015261205c604082016101a08501358360e08601612a36565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f072bde4706c1f31ca6f9d00281492fb765e066e2a91394829338eb8a7285715682527f035d79829b0c4f17f1ead06dc0dad3190dc3e0916d488882dbce96e970d9fa3560208301526120e560408301828460e08701612a36565b507f280dc265bff4759e2bfe552f6792226bc2667a39e5560316abd8825bc8ebc10a81527f1aacdb7d7cc8e54875efbcbd34b7149ed44fcdb0728e026f4369e7d48cfac8b06020820152612146604082016101c08501358360e08601612a36565b7f1d0dcabaa449cc5f2655bea87941c30e5a3be902444b9162918506600eacd30781527f1b00b88b20052a37c14a3beadb4c419bef8c04cc395f0566b50f0bf1090ce57460208201526121a1604082018260e0850180612974565b610300830161032084015f5b60018110156121ed5781358452602082013560208501526121d76040850184358660e08901612a36565b60209290920191604091909101906001016121ad565b5050507f2d22aa21883e2c02aeefdbb41a89e31305b7f785cff8d2543de3d2de0e67eb3781527f27f57efe361342b4447b60b663324f47b268d2168a44b2c5a1ae943ad783eac2602082015261224b60408201858360e08601612a36565b6102208301358152610240830135602082015261227060408201868360e08601612a36565b6112138160a0840160e0850180612974565b6040516020810151604082015160608301515f8401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061033288828c611f92565b60405160026301000000016102406040510161267c81836060860151612b16565b91506126918183610140870160a08701612a0b565b6126a481610100860160a08601806129aa565b6126b3818360a08601806129e0565b6126c58160c0860160a08601806129aa565b6126dc816101c085015160a0860160a087016129e0565b505060c00180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703905250565b6040515f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040830151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180840135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040840151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0850135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f840151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850135830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840151830860808401519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190810391508183087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036101209390930192909252505050565b8151845260208201516020850152825160408501526020830151606085015260408160808660065afa8061121357611213610564565b8151845260208201516020850152823560408501526020830135606085015260408160808660065afa8061121357611213610564565b815184526020820151602085015282604085015260408160608660075afa8061121357611213610564565b813584526020820135602085015282604085015260408160608660075afa8061121357611213610564565b815184526020820151602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa168061121357611213610564565b813584526020808301359085015260408481018490528460608160075afa815160408601526020820151606086015260408260808760065afa168061121357611213610564565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08201525f60208260c08460055afa50505190565b949350505050565b5f546040517f41493c6000000000000000000000000000000000000000000000000000000000815230916341493c6091612bb99190869086908a908a9060040161302f565b5f6040518083038186803b158015612bcf575f80fd5b505afa1580156110e6573d5f803e3d5ffd5b3073ffffffffffffffffffffffffffffffffffffffff1663a48fd34b848484604051602001612c1291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612c3f93929190613067565b5f6040518083038186803b158015612c55575f80fd5b505afa158015612c67573d5f803e3d5ffd5b50505050505050565b5f8083601f840112612c80575f80fd5b50813567ffffffffffffffff811115612c97575f80fd5b602083019150836020828501011115612cae575f80fd5b9250929050565b5f805f805f60608688031215612cc9575f80fd5b85359450602086013567ffffffffffffffff80821115612ce7575f80fd5b612cf389838a01612c70565b90965094506040880135915080821115612d0b575f80fd5b50612d1888828901612c70565b969995985093965092949392505050565b5f8060208385031215612d3a575f80fd5b823567ffffffffffffffff811115612d50575f80fd5b612d5c85828601612c70565b90969095509350505050565b5f805f8060408587031215612d7b575f80fd5b843567ffffffffffffffff80821115612d92575f80fd5b612d9e88838901612c70565b90965094506020870135915080821115612db6575f80fd5b818701915087601f830112612dc9575f80fd5b813581811115612dd7575f80fd5b8860208260051b8501011115612deb575f80fd5b95989497505060200194505050565b5f805f8060408587031215612e0d575f80fd5b843567ffffffffffffffff80821115612e24575f80fd5b612e3088838901612c70565b90965094506020870135915080821115612e48575f80fd5b50612e5587828801612c70565b95989497509550505050565b5f805f60408486031215612e73575f80fd5b833567ffffffffffffffff811115612e89575f80fd5b612e9586828701612c70565b909790965060209590950135949350505050565b5f8085851115612eb7575f80fd5b83861115612ec3575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015612f105780818660040360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612f9f604083018587612f45565b8281036020848101919091528451808352858201928201905f5b81811015612fd557845183529383019391830191600101612fb9565b509098975050505050505050565b5f60208284031215612ff3575f80fd5b81518015158114613002575f80fd5b9392505050565b818382375f9101908152919050565b5f60208284031215613028575f80fd5b5051919050565b858152606060208201525f613048606083018688612f45565b828103604084015261305b818587612f45565b98975050505050505050565b604081525f61307a604083018587612f45565b60208382038185015284518083525f5b818110156130a557868101830151848201840152820161308a565b505f838201830152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019594505050505056fea164736f6c6343000818000a" +var ZkEvmVerifierV1DeployedBin = "0x608060405234801561000f575f80fd5b5060043610610085575f3560e01c80637e4f7a8a116100585780637e4f7a8a146100f2578063a48fd34b14610115578063c8bd017614610128578063ffa1ad741461013b575f80fd5b806309665ee7146100895780632a510436146100a457806341493c60146100ca5780636b61d8e7146100df575b5f80fd5b6100915f5481565b6040519081526020015b60405180910390f35b7fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e7610091565b6100dd6100d8366004612d64565b61017a565b005b6100916100ed366004612dd8565b610388565b610105610100366004612e17565b610404565b604051901515815260200161009b565b6100dd610123366004612ea9565b612c23565b6100dd610136366004612f10565b612c90565b604080518082018252600681527f76352e302e3000000000000000000000000000000000000000000000000000006020820152905161009b9190612fb9565b5f6101886004828486612fd2565b61019191612ff9565b90507fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e77fd4e8ecd2000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461025f576040517f988066a10000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000080841660048301528216602482015260440160405180910390fd5b5f61026a8787610388565b6040805160028082526060820183529293505f929091602083019080368337019050509050885f1c815f815181106102a4576102a4613041565b602002602001018181525050815f1c816001815181106102c6576102c6613041565b60209081029190910101525f30637e4f7a8a6102e5886004818c612fd2565b856040518463ffffffff1660e01b8152600401610304939291906130b5565b602060405180830381865afa15801561031f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610343919061310c565b90508061037c576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b5f7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f1b600284846040516103be92919061312b565b602060405180830381855afa1580156103d9573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103fc919061313a565b169392505050565b5f6040516102408101610416846108a6565b61042085856108b9565b61042986610908565b6104328761091e565b5f61043e86868a610ab8565b905061044981610dee565b90506104558189610e54565b90506104618189610ee2565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006104b884630100000085612bb8565b086101c0840152506104cb818587610f4d565b6104d682868a6112c2565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101a08401525061050d9050611667565b610516866127ac565b61051f866126fd565b61052886612324565b61053186611e50565b61053a86611bb6565b610543866117b8565b61020001519050612c1b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f72206d6f6420657870000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6572726f722070616972696e67000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b600281146108b6576108b661054f565b50565b5f5b81811015610903577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000833511156108f4576108f461066c565b602092909201916001016108bb565b505050565b61036081811461091a5761091a6106cb565b5050565b61018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109545761095461072a565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561098b5761098b61072a565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109c2576109c261072a565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109f9576109f961072a565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610a3057610a3061072a565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610a6757610a6761072a565b5061030081015f5b6001811015610903577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000082351115610aa957610aa961072a565b60209190910190600101610a6f565b5f60405161024081016467616d6d6181527f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a60208201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb960408201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a60608201527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd060808201527f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f60a08201527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c2960c08201527f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd60e08201527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be6101008201527f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a6101208201527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d6101408201527f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f6101608201527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e6101808201527f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b776101a08201527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf6101c08201527f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf1366101e08201527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f36102008201527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6102208201527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d79610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa905080610db857610db86107e8565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b5f60405161024060405101636265746181528360208201526020816024601c840160025afa80610e2057610e206107e8565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b5f60405161024060405101606564616c7068618252602082018681526020810190506103208601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610eb357610eb36107e8565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161024060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610f1d57610f1d6107e8565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b5f60405160608101516101c0820151915085610f6b81878585610fe6565b5f92505f91505b85821015610fdc577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610f72565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1183096001855f5b868110156110d4577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b840992506020919091019060010161102f565b506110e0818789611198565b5060019050855f5b8681101561118e577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b840992506001016110e8565b5050505050505050565b600183525f805b838110156111ed5781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990506020840193508084880152505060018101905061119f565b50602081038201915080840193505061122e6020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001038551612bb8565b5f5b838110156112bb5760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101611230565b5050505050565b5f60405160608101516101c0820151915061032084015f806112ea896020850135853561146e565b91506112fd8962a653508a018787611333565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b5f61135f85857f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b612bb8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1182099050611418867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff87612bb8565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b5f83525f602084015280604084015250806060830152505f6080820153603060818201535f60828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201535f602082608f8460025afa80611504576115046107e8565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa91508161157a5761157a6107e8565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806115fb576115fb6107e8565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610240604051016101c08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036060850151086116ed837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff83612bb8565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b60405161024081016101608201518152610180820151602082015261028083013560408201526102a08301356060820152610220830135608082015261024083013560a08201526102c083013560c08201526102e083013560e082015260608201516101008201526101e08201516101208201526020816101408360025afa8061184457611844610847565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182510690508160408101925061028085013581526102a0850135602082015261189483836102c0880184612b1f565b61016084016118a98484610220890184612b1f565b61014085016118bd84610260890183612b66565b7f1fa4be93b5e7f7e674d5059b63554fab99638b304ed8310e9fa44c281ac9b03b85527f1a01ae7fac6228e39d3cb5a5e71fd31160f3241e79a5f48ffb3737e6c389b7216020860152805160408087019182529095908160608160075afa91508161192a5761192a6107e8565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703825261196286828586612a16565b50508360408501945061197f8560608801516102808a0184612aad565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186850993506119ff85856102c08a0184612b1f565b611a0b85828485612a16565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f22f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a486101008401527f2a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb6101208401527f159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f86101408401527f0efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b3610160840152925061090390508160405160205f6101808460085afa80611ba857611ba8610789565b505f51610200919091015250565b6040516102406040510160208101604082016101e084015180610160860160e08701518152610100870151610180880152610120870151610140880152611c0186835f8b0184612b1f565b611c14826101808a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611c49868360408b0184612b1f565b611c5c826101a08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611c91868360808b0184612b1f565b611ca4826101c08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a86527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb98552611d1c84838884612ad8565b611d2f826101e08a016101408a01612b66565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a86527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd08552611da684838884612ad8565b611db9826102008a016101408a01612b66565b61030088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe87527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d798652611e3685848985612ad8565b611e4583826101408b01612b66565b505050505050505050565b6040516467616d6d616102408201908152606082015161026083015260e08201516102808301526101008201516102a083015260c0836102c08401377f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a6101408201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb96101608201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a610180808301919091527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd06101a0808401919091527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6101c0808501919091527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d796101e0808601919091526101208601516102008087019190915293870135610220860152918601356102408501528501356102608401528401356102808301528301356102a08201526102c081016103008401602081833750610260840135602091820152601b906102e5906101e085018285850160025afa9250505080612005576120056107e8565b506101e00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610240604051017f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd81527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be602082015261209e604082016101808501358360e08601612a82565b7f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a81527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d60208201526120fe604082016101a08501358360e08601612ad8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f82527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e602083015261218760408301828460e08701612ad8565b507f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b7781527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf60208201526121e8604082016101c08501358360e08601612ad8565b7f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf13681527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f36020820152612243604082018260e0850180612a16565b610300830161032084015f5b600181101561228f5781358452602082013560208501526122796040850184358660e08901612ad8565b602092909201916040919091019060010161224f565b5050507f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f81527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c2960208201526122ed60408201858360e08601612ad8565b6102208301358152610240830135602082015261231260408201868360e08601612ad8565b6112bb8160a0840160e0850180612a16565b6040516020810151604082015160608301515f8401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061037c88828c612034565b60405160026301000000016102406040510161271e81836060860151612bb8565b91506127338183610140870160a08701612aad565b61274681610100860160a0860180612a4c565b612755818360a0860180612a82565b6127678160c0860160a0860180612a4c565b61277e816101c085015160a0860160a08701612a82565b505060c00180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703905250565b6040515f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040830151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180840135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040840151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0850135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f840151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850135830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840151830860808401519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190810391508183087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036101209390930192909252505050565b8151845260208201516020850152825160408501526020830151606085015260408160808660065afa806112bb576112bb61060d565b8151845260208201516020850152823560408501526020830135606085015260408160808660065afa806112bb576112bb61060d565b815184526020820151602085015282604085015260408160608660075afa806112bb576112bb61060d565b813584526020820135602085015282604085015260408160608660075afa806112bb576112bb61060d565b815184526020820151602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa16806112bb576112bb61060d565b813584526020820135602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa16806112bb576112bb61060d565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08201525f60208260c08460055afa80612c1557612c156105ae565b50505190565b949350505050565b5f546040517f41493c6000000000000000000000000000000000000000000000000000000000815230916341493c6091612c689190869086908a908a90600401613151565b5f6040518083038186803b158015612c7e575f80fd5b505afa15801561118e573d5f803e3d5ffd5b3073ffffffffffffffffffffffffffffffffffffffff1663a48fd34b848484604051602001612cc191815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612cee93929190613189565b5f6040518083038186803b158015612d04575f80fd5b505afa158015612d16573d5f803e3d5ffd5b50505050505050565b5f8083601f840112612d2f575f80fd5b50813567ffffffffffffffff811115612d46575f80fd5b602083019150836020828501011115612d5d575f80fd5b9250929050565b5f805f805f60608688031215612d78575f80fd5b85359450602086013567ffffffffffffffff80821115612d96575f80fd5b612da289838a01612d1f565b90965094506040880135915080821115612dba575f80fd5b50612dc788828901612d1f565b969995985093965092949392505050565b5f8060208385031215612de9575f80fd5b823567ffffffffffffffff811115612dff575f80fd5b612e0b85828601612d1f565b90969095509350505050565b5f805f8060408587031215612e2a575f80fd5b843567ffffffffffffffff80821115612e41575f80fd5b612e4d88838901612d1f565b90965094506020870135915080821115612e65575f80fd5b818701915087601f830112612e78575f80fd5b813581811115612e86575f80fd5b8860208260051b8501011115612e9a575f80fd5b95989497505060200194505050565b5f805f8060408587031215612ebc575f80fd5b843567ffffffffffffffff80821115612ed3575f80fd5b612edf88838901612d1f565b90965094506020870135915080821115612ef7575f80fd5b50612f0487828801612d1f565b95989497509550505050565b5f805f60408486031215612f22575f80fd5b833567ffffffffffffffff811115612f38575f80fd5b612f4486828701612d1f565b909790965060209590950135949350505050565b5f81518084525f5b81811015612f7c57602081850181015186830182015201612f60565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612fcb6020830184612f58565b9392505050565b5f8085851115612fe0575f80fd5b83861115612fec575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156130395780818660040360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6130c860408301858761306e565b8281036020848101919091528451808352858201928201905f5b818110156130fe578451835293830193918301916001016130e2565b509098975050505050505050565b5f6020828403121561311c575f80fd5b81518015158114612fcb575f80fd5b818382375f9101908152919050565b5f6020828403121561314a575f80fd5b5051919050565b858152606060208201525f61316a60608301868861306e565b828103604084015261317d81858761306e565b98975050505050505050565b604081525f61319c60408301858761306e565b82810360208401526131ae8185612f58565b969550505050505056fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(ZkEvmVerifierV1StorageLayoutJSON), ZkEvmVerifierV1StorageLayout); err != nil { From f653bf8e3b8dde44e8535d16fb73f1394420b802 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Mon, 16 Mar 2026 14:15:27 +0800 Subject: [PATCH 4/5] update batch check --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/rollup.go | 2 +- bindings/bindings/rollup_more.go | 2 +- contracts/contracts/l1/rollup/Rollup.sol | 64 ++++++++--- contracts/contracts/test/Rollup.t.sol | 103 ++++++++++++------ .../contracts/test/base/L1MessageBase.t.sol | 68 +++++++++++- 6 files changed, 189 insertions(+), 52 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index 1208b8120..aab843afb 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610ac4578063e3fff1dd14610ad9578063f2fde38b14610af8578063fb1e8b0414610b17575f80fd5b8063d8dc99d214610a71578063ddd8a3dc14610a86578063de8b303514610aa5575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a0b578063ce5db8d614610a1e578063cf9a674514610a33578063d279c19114610a52575f80fd5b8063b8d0a1b0146109ae578063bedb86fb146109cd578063c5553892146109ec575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461093c578063b348442514610951578063b35dac4e14610970578063b3e0a5091461098f575f80fd5b8063a479265d146108dd578063a4f209b0146108f2578063abc8d68d14610911575f80fd5b80638f1d3776116101985780638f1d3776146107af578063910129d41461085f57806397fc007c14610890578063a415d8dc146108af575f80fd5b8063728cdbca1461075a57806388b1ea09146107795780638da5cb5b14610792575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e57806361267290146106dd57806368589dfa146106fc5780636c578c1d14610727578063715018a614610746575f80fd5b80635c975abb1461061a5780635ef7a94a146106315780635f77cf1d14610691575f80fd5b80633e001b661161026e5780633e001b66146105b4578063428868b5146105c95780634e8f1d67146105dc57806357e0af6c146105fb575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a14610595575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c610378366004614b97565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de366004614bc9565b610b2c565b005b3480156103f0575f80fd5b506103e36103ff366004614c27565b610bfe565b34801561040f575f80fd5b5061038c61041e366004614b97565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004614c6f565b610f3a565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c610489366004614b97565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004614cd4565b611434565b3480156104c9575f80fd5b5061038c6104d8366004614b97565b6117bf565b3480156104e8575f80fd5b506103b66104f7366004614b97565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b6610522366004614b97565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d366004614b97565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461057d906001600160a01b031681565b6040516001600160a01b039091168152602001610398565b3480156105a0575f80fd5b50609b5461057d906001600160a01b031681565b3480156105bf575f80fd5b506103b660aa5481565b6103e36105d7366004614cd4565b6117ed565b3480156105e7575f80fd5b506103e36105f6366004614d34565b611ac1565b348015610606575f80fd5b506103e3610615366004614b97565b611d91565b348015610625575f80fd5b5060655460ff1661038c565b34801561063c575f80fd5b5061067161064b366004614b97565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b34801561069c575f80fd5b506106c47f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b3480156106e8575f80fd5b506103e36106f7366004614b97565b611e3c565b348015610707575f80fd5b506103b6610716366004614b97565b60ab6020525f908152604090205481565b348015610732575f80fd5b506103e3610741366004614bc9565b612017565b348015610751575f80fd5b506103e36120d4565b348015610765575f80fd5b506103e3610774366004614de5565b6120e7565b348015610784575f80fd5b5060a65461038c9060ff1681565b34801561079d575f80fd5b506033546001600160a01b031661057d565b3480156107ba575f80fd5b5061081b6107c9366004614b97565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b34801561086a575f80fd5b5061038c610879366004614b97565b5f90815260a4602052604090206003015460ff1690565b34801561089b575f80fd5b506103e36108aa366004614bc9565b6123f0565b3480156108ba575f80fd5b5061038c6108c9366004614bc9565b609f6020525f908152604090205460ff1681565b3480156108e8575f80fd5b506103b660995481565b3480156108fd575f80fd5b506103e361090c366004614b97565b6124d3565b34801561091c575f80fd5b506103b661092b366004614bc9565b60a56020525f908152604090205481565b348015610947575f80fd5b506103b660a85481565b34801561095c575f80fd5b506103e361096b366004614e40565b612583565b34801561097b575f80fd5b506103e361098a366004614bc9565b612887565b34801561099a575f80fd5b506103e36109a9366004614c6f565b6128e0565b3480156109b9575f80fd5b506103e36109c8366004614e40565b612c3d565b3480156109d8575f80fd5b506103e36109e7366004614eb4565b612cc6565b3480156109f7575f80fd5b506103e3610a06366004614b97565b612e04565b6103e3610a19366004614ee6565b612ea7565b348015610a29575f80fd5b506103b660985481565b348015610a3e575f80fd5b506103e3610a4d366004614b97565b613439565b348015610a5d575f80fd5b506103e3610a6c366004614bc9565b6135a8565b348015610a7c575f80fd5b506103b660ac5481565b348015610a91575f80fd5b5060975461057d906001600160a01b031681565b348015610ab0575f80fd5b5061038c610abf366004614b97565b613667565b348015610acf575f80fd5b506103b6609a5481565b348015610ae4575f80fd5b506103e3610af3366004614b97565b6136b1565b348015610b03575f80fd5b506103e3610b12366004614bc9565b613754565b348015610b22575f80fd5b506103b660a95481565b610b346137e1565b6001600160a01b0381165f908152609f602052604090205460ff1615610ba15760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c066137e1565b5f8111610c555760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b98565b5f80610c61858561383b565b915091505f610c74836001015160c01c90565b5f81815260a160205260409020549091508214610cd35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f60a181610ce18785614f3b565b81526020019081526020015f205414610d615760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b98565b609d548111610dd85760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b610de3600182614f4e565b609e555b8315610f3257604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e2f81613667565b15610e8a575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610e7a908490614f3b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610eea575060a85481145b15610ef4575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610de7575b505050505050565b60a85415610f8a5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b610f926138d4565b5f80610f9e848461383b565b915091505f610fb1836001015160c01c90565b5f81815260a1602052604090205490915082146110105760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b611019816117bf565b6110655760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b61106e81613667565b156110bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a4602052604090206003015460ff161561111c5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b98565b5f81815260a2602052604090206001015442101561117c5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b98565b605983015160a05f61118f600185614f4e565b81526020019081526020015f2054146111ea5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f81815260a06020526040902054156112455760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b98565b80609d54600101146112995760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b609d819055600160a35f6112ae866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556112fd6112f0846011015160c01c90565b600985015160c01c613927565b60a25f61130b600184614f4e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906113449084614f4e565b81526020019081526020015f205f905560ad5f6001836113649190614f4e565b81526020019081526020015f205f905560a45f6001836113849190614f4e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611410866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c49190614f61565b6115105760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156115605760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6115686138d4565b5f61157e6115796020850185614f7c565b61383b565b5090505f611590826001015160c01c90565b61159b906001614f3b565b5f81815260ad602052604090205490915061161e5760405162461bcd60e51b815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611682573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a69190614fdd565b6116b09190614f3b565b1015611718575f6116c76080860160608701614ff4565b61ffff16116117185760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611786573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117aa9190614fdd565b90506117b88585835f6139e4565b5050505050565b5f81815260a26020526040812054158015906117e757505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611859573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187d9190614f61565b6118c95760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156119195760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6119216138d4565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611985573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a99190614fdd565b6119b39190614f3b565b1015611a1b575f6119ca6080840160608501614ff4565b61ffff1611611a1b5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aad9190614fdd565b9050611abc83838360016139e4565b505050565b60a85415611b115760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b611b196138d4565b60ac54609e545f90815260a2602052604081205490914291611b3b9190614f3b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb79190614fdd565b611bc19190614f3b565b10905081158015611bcf5750805b15611c36575f611be560808a0160608b01614ff4565b61ffff1611611c365760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b8180611c3f5750805b611c8b5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b98565b611c9788885f806139e4565b5f80611ca3888861383b565b915091505f611cb6836001015160c01c90565b905080609e5414611d095760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214611d655760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f81815260a26020526040902042600190910155611d8483888861411f565b5050505050505050505050565b611d996137e1565b5f81118015611daa57506099548114155b611df65760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b98565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611e5c57505f5460ff8083169116105b611ece5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff831617610100179055611eec5f5460ff1690565b60ff16600214611f3e5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b98565b81611fb15760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b98565b609e545f90815260ab6020526040902054611fda57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b61201f6137e1565b6001600160a01b0381165f908152609f602052604090205460ff166120865760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b98565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bf3565b6120dc6137e1565b6120e55f6142d2565b565b5f54610100900460ff161580801561210557505f54600160ff909116105b8061211e5750303b15801561211e57505f5460ff166001145b6121905760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805460ff1916600117905580156121b1575f805461ff0019166101001790555b6001600160a01b03861615806121ce57506001600160a01b038516155b15612205576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03871661225b5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b98565b61226361433b565b61226b6143bf565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123e7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123f86137e1565b6001600160a01b0381161580159061241e5750609c546001600160a01b03828116911614155b61246a5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b98565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124db6137e1565b5f811180156124eb575060648111155b80156124f9575060a9548114155b6125455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b98565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611e30565b60a854156125d35760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6125db6138d4565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266b9190614f61565b6126b75760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b5f806126c3868661383b565b915091505f6126d6836001015160c01c90565b5f81815260a1602052604090205490915082146127355760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b61273e81613667565b61278a5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916127c691614f3b565b1161283c575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261283791839190614443565b6123e7565b61284783868661411f565b6123e781336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061459f565b61288f6137e1565b60aa80545f9091556128a1828261466b565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611e30565b6128e86137e1565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561295f5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b98565b5f8061296b848461383b565b915091505f61297e836001015160c01c90565b905080156129ce5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b98565b5f6129da846079015190565b905080612a295760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b98565b600984015160c01c15612a7e5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b98565b5f612a8a856019015190565b03612ad75760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b98565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612b03856039015190565b14612b505760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b98565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80612c49868661383b565b915091505f612c5c836001015160c01c90565b5f81815260a160205260409020549091508214612cbb5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6123e783868661411f565b612cce6137e1565b8015612dd257612cdc614714565b60a65460ff1615612d915760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612d30908490614f3b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612dda61476e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612db4565b50565b612e0c6137e1565b5f81118015612e1d575060ac548114155b612e695760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b98565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611e30565b335f908152609f602052604090205460ff16612f055760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b98565b60a85415612f555760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b612f5d6138d4565b60a65460ff1615612fb05760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b98565b8167ffffffffffffffff16609d541061300b5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a1602052604090205481146130725760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6130858267ffffffffffffffff166117bf565b6130d15760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b03161561314c5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a2602052604090206001015442106131dc5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b98565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561322c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132509190614fdd565b34101561329f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516133b791815260200190565b60405180910390a35f609d5460016133cf9190614f3b565b90505b609e548111613427578267ffffffffffffffff168114613415576099545f82815260a260205260408120600101805490919061340f908490614f3b565b90915550505b8061341f81615015565b9150506133d2565b505060a6805460ff1916600117905550565b5f54600390610100900460ff1615801561345957505f5460ff8083169116105b6134cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff83161761010017815582900361352d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b98565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b335f90815260a56020526040812054908190036136075760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b98565b335f90815260a56020526040812055613620828261466b565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161365b91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906117e75750505f90815260a46020526040902060030154610100900460ff161590565b6136b96137e1565b5f811180156136ca57506098548114155b6137165760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b98565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611e30565b61375c6137e1565b6001600160a01b0381166137d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b98565b612e01816142d2565b6033546001600160a01b031633146120e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b98565b5f805f61384885856147a7565b90505f8160ff165f036138695761385f8686614817565b90945090506138c6565b8160ff1660010361387e5761385f8686614880565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b98565b808420925050509250929050565b60655460ff16156120e55760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b98565b805f03613932575050565b8082035f5b828110156139de5761010081840381111561395157508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156139b4575f80fd5b505af11580156139c6573d5f803e3d5ffd5b50505050610100830192505061010081019050613937565b50505050565b6139f1602085018561504c565b60ff161580613a0f5750613a08602085018561504c565b60ff166001145b613a5b5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b98565b6080840135613aac5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b98565b60a0840135613afd5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b98565b5f80613b0f6115796020880188614f7c565b915091505f613b22836001015160c01c90565b90505f60a181613b33846001614f3b565b81526020019081526020015f205414613b8e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b98565b609e548114613bdf5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214613c3b5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b98565b5f81815260ab6020526040902054608088013514613c9b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f613caa846011015160c01c90565b90505f613cd6613cc060608b0160408c0161506c565b613cd060808c0160608d01614ff4565b846148d3565b9050613ce860808a0160608b01614ff4565b6001939093015f81815260ad6020526040902054909361ffff16929092019180613db9578615613d86575f49613d865760405162461bcd60e51b815260206004820152602160248201527f626c6f62207265717569726564207768656e206e6f2073746f7265642068617360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f4915613d94575f49613db6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b60f9613dc860208c018c61504c565b60ff16600103613dd757506101015b604080518281019091529650613dfc87613df460208e018e61504c565b60ff16614917565b60c085901b6001880152613e2a87613e1a60808e0160608f01614ff4565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b01356099880152613e8e87613e6f60208d018d614f7c565b604051613e7d929190615085565b604051809103902060b99190910152565b60d987018690526001613ea460208d018d61504c565b60ff1610613ed657613ed687613ec060608e0160408f0161506c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff1615613f3f5760a7545f90815260a460205260409020600201546099544291613f3291614f3b565b613f3c9190614f4e565b90505b60405180608001604052804281526020018260985442613f5f9190614f3b565b613f699190614f3b565b81526020018d6040016020810190613f81919061506c565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e8790556097546001600160a01b031692506374fe27b791508b3590613ffb90613ff5908e018e614f7c565b5f61491e565b5f61400960408f018f614f7c565b6040518663ffffffff1660e01b81526004016140299594939291906150db565b602060405180830381865afa158015614044573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140689190614f61565b6140da5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b8061416c5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b98565b5f61417b846001015160c01c90565b90505f614189856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006141b8876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a84861427a885160f81c90565b858888866040518663ffffffff1660e01b815260040161429e95949392919061514e565b5f6040518083038186803b1580156142b4575f80fd5b505afa1580156142c6573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166143b75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5614972565b5f54610100900460ff1661443b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e56149fa565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156144c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144eb9190614fdd565b5f86815260a4602052604090206001015490915061450a908290614f3b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614549908490614f3b565b909155505060405161455c90849061517f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906145c390846151ab565b6145cd91906151c2565b90506145d98183614f4e565b60aa5f8282546145e99190614f3b565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614615908490614f3b565b909155505060405161462890849061517f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614710575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146146ba576040519150601f19603f3d011682016040523d82523d5f602084013e6146bf565b606091505b5050905080611abc5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b98565b5050565b61471c6138d4565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586147513390565b6040516001600160a01b03909116815260200160405180910390a1565b614776614a7f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614751565b5f816147f55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b98565b82825f818110614807576148076151fa565b919091013560f81c949350505050565b5f8160f981101561486a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b98565b6040519150808483378082016040529250929050565b5f81610101811461486a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b98565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016149088161ffff871686614ad1565b82900390912095945050505050565b8082535050565b60605f80808080614931888a018a615314565b955095509550955095505081871061494f57945061496b9350505050565b83871061496357829550505050505061496b565b509293505050505b9392505050565b5f54610100900460ff166149ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6065805460ff19169055565b5f54610100900460ff16614a765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5336142d2565b60655460ff166120e55760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b98565b5f825f03614ae057508261496b565b609b546001600160a01b03165f5b84811015614b8d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b789190614fdd565b87525060209095019460019384019301614aee565b5093949350505050565b5f60208284031215614ba7575f80fd5b5035919050565b80356001600160a01b0381168114614bc4575f80fd5b919050565b5f60208284031215614bd9575f80fd5b61496b82614bae565b5f8083601f840112614bf2575f80fd5b50813567ffffffffffffffff811115614c09575f80fd5b602083019150836020828501011115614c20575f80fd5b9250929050565b5f805f60408486031215614c39575f80fd5b833567ffffffffffffffff811115614c4f575f80fd5b614c5b86828701614be2565b909790965060209590950135949350505050565b5f8060208385031215614c80575f80fd5b823567ffffffffffffffff811115614c96575f80fd5b614ca285828601614be2565b90969095509350505050565b5f60e08284031215614cbe575f80fd5b50919050565b5f60608284031215614cbe575f80fd5b5f8060408385031215614ce5575f80fd5b823567ffffffffffffffff80821115614cfc575f80fd5b614d0886838701614cae565b93506020850135915080821115614d1d575f80fd5b50614d2a85828601614cc4565b9150509250929050565b5f805f805f8060808789031215614d49575f80fd5b863567ffffffffffffffff80821115614d60575f80fd5b614d6c8a838b01614cae565b97506020890135915080821115614d81575f80fd5b614d8d8a838b01614cc4565b96506040890135915080821115614da2575f80fd5b614dae8a838b01614be2565b90965094506060890135915080821115614dc6575f80fd5b50614dd389828a01614be2565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614dfa575f80fd5b614e0387614bae565b9550614e1160208801614bae565b9450614e1f60408801614bae565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614e53575f80fd5b843567ffffffffffffffff80821115614e6a575f80fd5b614e7688838901614be2565b90965094506020870135915080821115614e8e575f80fd5b50614e9b87828801614be2565b95989497509550505050565b8015158114612e01575f80fd5b5f60208284031215614ec4575f80fd5b813561496b81614ea7565b803567ffffffffffffffff81168114614bc4575f80fd5b5f8060408385031215614ef7575f80fd5b614f0083614ecf565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117e7576117e7614f0e565b818103818111156117e7576117e7614f0e565b5f60208284031215614f71575f80fd5b815161496b81614ea7565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614faf575f80fd5b83018035915067ffffffffffffffff821115614fc9575f80fd5b602001915036819003821315614c20575f80fd5b5f60208284031215614fed575f80fd5b5051919050565b5f60208284031215615004575f80fd5b813561ffff8116811461496b575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504557615045614f0e565b5060010190565b5f6020828403121561505c575f80fd5b813560ff8116811461496b575f80fd5b5f6020828403121561507c575f80fd5b61496b82614ecf565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156151255784516001600160a01b031683529383019391830191600101615100565b50508760408601528481036060860152615140818789615094565b9a9950505050505050505050565b858152846020820152608060408201525f61516d608083018587615094565b90508260608301529695505050505050565b5f82515f5b8181101561519e5760208186018101518583015201615184565b505f920191825250919050565b80820281158282048414176117e7576117e7614f0e565b5f826151f5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615263575f80fd5b8135602067ffffffffffffffff8083111561528057615280615227565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156152c3576152c3615227565b60405293845260208187018101949081019250878511156152e2575f80fd5b6020870191505b84821015615309576152fa82614bae565b835291830191908301906152e9565b979650505050505050565b5f805f805f8060c08789031215615329575f80fd5b86359550602087013567ffffffffffffffff80821115615347575f80fd5b6153538a838b01615254565b965060408901359550606089013591508082111561536f575f80fd5b61537b8a838b01615254565b94506080890135935060a0890135915080821115615397575f80fd5b506153a489828a01615254565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610ac4578063e3fff1dd14610ad9578063f2fde38b14610af8578063fb1e8b0414610b17575f80fd5b8063d8dc99d214610a71578063ddd8a3dc14610a86578063de8b303514610aa5575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a0b578063ce5db8d614610a1e578063cf9a674514610a33578063d279c19114610a52575f80fd5b8063b8d0a1b0146109ae578063bedb86fb146109cd578063c5553892146109ec575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461093c578063b348442514610951578063b35dac4e14610970578063b3e0a5091461098f575f80fd5b8063a479265d146108dd578063a4f209b0146108f2578063abc8d68d14610911575f80fd5b80638f1d3776116101985780638f1d3776146107af578063910129d41461085f57806397fc007c14610890578063a415d8dc146108af575f80fd5b8063728cdbca1461075a57806388b1ea09146107795780638da5cb5b14610792575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e57806361267290146106dd57806368589dfa146106fc5780636c578c1d14610727578063715018a614610746575f80fd5b80635c975abb1461061a5780635ef7a94a146106315780635f77cf1d14610691575f80fd5b80633e001b661161026e5780633e001b66146105b4578063428868b5146105c95780634e8f1d67146105dc57806357e0af6c146105fb575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a14610595575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c610378366004614d1c565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de366004614d4e565b610b2c565b005b3480156103f0575f80fd5b506103e36103ff366004614dac565b610bfe565b34801561040f575f80fd5b5061038c61041e366004614d1c565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004614df4565b610f3a565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c610489366004614d1c565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004614e59565b611434565b3480156104c9575f80fd5b5061038c6104d8366004614d1c565b61181f565b3480156104e8575f80fd5b506103b66104f7366004614d1c565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b6610522366004614d1c565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d366004614d1c565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461057d906001600160a01b031681565b6040516001600160a01b039091168152602001610398565b3480156105a0575f80fd5b50609b5461057d906001600160a01b031681565b3480156105bf575f80fd5b506103b660aa5481565b6103e36105d7366004614e59565b61184d565b3480156105e7575f80fd5b506103e36105f6366004614eb9565b611c00565b348015610606575f80fd5b506103e3610615366004614d1c565b611fd4565b348015610625575f80fd5b5060655460ff1661038c565b34801561063c575f80fd5b5061067161064b366004614d1c565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b34801561069c575f80fd5b506106c47f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b3480156106e8575f80fd5b506103e36106f7366004614d1c565b61207f565b348015610707575f80fd5b506103b6610716366004614d1c565b60ab6020525f908152604090205481565b348015610732575f80fd5b506103e3610741366004614d4e565b61225a565b348015610751575f80fd5b506103e3612317565b348015610765575f80fd5b506103e3610774366004614f6a565b61232a565b348015610784575f80fd5b5060a65461038c9060ff1681565b34801561079d575f80fd5b506033546001600160a01b031661057d565b3480156107ba575f80fd5b5061081b6107c9366004614d1c565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b34801561086a575f80fd5b5061038c610879366004614d1c565b5f90815260a4602052604090206003015460ff1690565b34801561089b575f80fd5b506103e36108aa366004614d4e565b612633565b3480156108ba575f80fd5b5061038c6108c9366004614d4e565b609f6020525f908152604090205460ff1681565b3480156108e8575f80fd5b506103b660995481565b3480156108fd575f80fd5b506103e361090c366004614d1c565b612716565b34801561091c575f80fd5b506103b661092b366004614d4e565b60a56020525f908152604090205481565b348015610947575f80fd5b506103b660a85481565b34801561095c575f80fd5b506103e361096b366004614fc5565b6127c6565b34801561097b575f80fd5b506103e361098a366004614d4e565b612aca565b34801561099a575f80fd5b506103e36109a9366004614df4565b612b23565b3480156109b9575f80fd5b506103e36109c8366004614fc5565b612e80565b3480156109d8575f80fd5b506103e36109e7366004615039565b612f09565b3480156109f7575f80fd5b506103e3610a06366004614d1c565b613047565b6103e3610a1936600461506b565b6130ea565b348015610a29575f80fd5b506103b660985481565b348015610a3e575f80fd5b506103e3610a4d366004614d1c565b61367c565b348015610a5d575f80fd5b506103e3610a6c366004614d4e565b6137eb565b348015610a7c575f80fd5b506103b660ac5481565b348015610a91575f80fd5b5060975461057d906001600160a01b031681565b348015610ab0575f80fd5b5061038c610abf366004614d1c565b6138aa565b348015610acf575f80fd5b506103b6609a5481565b348015610ae4575f80fd5b506103e3610af3366004614d1c565b6138f4565b348015610b03575f80fd5b506103e3610b12366004614d4e565b613997565b348015610b22575f80fd5b506103b660a95481565b610b34613a24565b6001600160a01b0381165f908152609f602052604090205460ff1615610ba15760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c06613a24565b5f8111610c555760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b98565b5f80610c618585613a7e565b915091505f610c74836001015160c01c90565b5f81815260a160205260409020549091508214610cd35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f60a181610ce187856150c0565b81526020019081526020015f205414610d615760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b98565b609d548111610dd85760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b610de36001826150d3565b609e555b8315610f3257604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e2f816138aa565b15610e8a575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610e7a9084906150c0565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610eea575060a85481145b15610ef4575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610de7575b505050505050565b60a85415610f8a5760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b610f92613b17565b5f80610f9e8484613a7e565b915091505f610fb1836001015160c01c90565b5f81815260a1602052604090205490915082146110105760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6110198161181f565b6110655760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b61106e816138aa565b156110bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a4602052604090206003015460ff161561111c5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b98565b5f81815260a2602052604090206001015442101561117c5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b98565b605983015160a05f61118f6001856150d3565b81526020019081526020015f2054146111ea5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f81815260a06020526040902054156112455760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b98565b80609d54600101146112995760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b609d819055600160a35f6112ae866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556112fd6112f0846011015160c01c90565b600985015160c01c613b6a565b60a25f61130b6001846150d3565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061134490846150d3565b81526020019081526020015f205f905560ad5f60018361136491906150d3565b81526020019081526020015f205f905560a45f60018361138491906150d3565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611410866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c491906150e6565b6115105760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156115605760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b611568613b17565b5f49156115b75760405162461bcd60e51b815260206004820152601f60248201527f636f6d6d69745374617465206d757374206e6f7420636172727920626c6f62006044820152606401610b98565b5f6115cd6115c86020850185615101565b613a7e565b5090505f6115df826001015160c01c90565b6115ea9060016150c0565b5f81815260ad602052604090205490915061166d5760405162461bcd60e51b815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f59190615162565b6116ff91906150c0565b1015611767575f6117166080860160608701615179565b61ffff16116117675760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156117d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f99190615162565b905061181885858360ad5f8781526020019081526020015f2054613c27565b5050505050565b5f81815260a260205260408120541580159061184757505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156118b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118dd91906150e6565b6119295760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156119795760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b611981613b17565b5f6119926115c86020850185615101565b5090505f6119a4826001015160c01c90565b6119af9060016150c0565b5f81815260ad602052604090205490915015611a335760405162461bcd60e51b815260206004820152602860248201527f636f6d6d69744261746368207265717569726573206e6f2073746f726564206260448201527f6c6f6220686173680000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611a97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abb9190615162565b611ac591906150c0565b1015611b2d575f611adc6080860160608701615179565b61ffff1611611b2d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611b9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615162565b90505f804915611bd0575f49611bf2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b9050610f3286868484613c27565b60a85415611c505760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b611c58613b17565b60ac54609e545f90815260a2602052604081205490914291611c7a91906150c0565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf69190615162565b611d0091906150c0565b10905081158015611d0e5750805b15611d75575f611d2460808a0160608b01615179565b61ffff1611611d755760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b8180611d7e5750805b611dca5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b98565b5f611ddb6115c860208b018b615101565b5090505f611ded826001015160c01c90565b611df89060016150c0565b5f81815260ad60205260408120549192509015611e98575f4915611e845760405162461bcd60e51b815260206004820152602f60248201527f6d757374206e6f7420636172727920626c6f62207768656e207573696e67207360448201527f746f72656420626c6f62206861736800000000000000000000000000000000006064820152608401610b98565b505f81815260ad6020526040902054611ecb565b5f4915611ea6575f49611ec8565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b611ed78b8b5f84613c27565b5f80611ee38b8b613a7e565b915091505f611ef6836001015160c01c90565b905080609e5414611f495760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214611fa55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f81815260a26020526040902042600190910155611fc4838b8b6142a2565b5050505050505050505050505050565b611fdc613a24565b5f81118015611fed57506099548114155b6120395760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b98565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561209f57505f5460ff8083169116105b6121115760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff83161761010017905561212f5f5460ff1690565b60ff166002146121815760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b98565b816121f45760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b98565b609e545f90815260ab602052604090205461221d57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612073565b612262613a24565b6001600160a01b0381165f908152609f602052604090205460ff166122c95760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b98565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bf3565b61231f613a24565b6123285f614455565b565b5f54610100900460ff161580801561234857505f54600160ff909116105b806123615750303b15801561236157505f5460ff166001145b6123d35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805460ff1916600117905580156123f4575f805461ff0019166101001790555b6001600160a01b038616158061241157506001600160a01b038516155b15612448576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03871661249e5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b98565b6124a66144be565b6124ae614542565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561262a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61263b613a24565b6001600160a01b038116158015906126615750609c546001600160a01b03828116911614155b6126ad5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b98565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61271e613a24565b5f8111801561272e575060648111155b801561273c575060a9548114155b6127885760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b98565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101612073565b60a854156128165760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b61281e613b17565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561288a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae91906150e6565b6128fa5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b5f806129068686613a7e565b915091505f612919836001015160c01c90565b5f81815260a1602052604090205490915082146129785760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b612981816138aa565b6129cd5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff191690556099546002909101544291612a09916150c0565b11612a7f575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612a7a918391906145c6565b61262a565b612a8a8386866142a2565b61262a81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614722565b612ad2613a24565b60aa80545f909155612ae482826147ee565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101612073565b612b2b613a24565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612ba25760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b98565b5f80612bae8484613a7e565b915091505f612bc1836001015160c01c90565b90508015612c115760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b98565b5f612c1d846079015190565b905080612c6c5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b98565b600984015160c01c15612cc15760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b98565b5f612ccd856019015190565b03612d1a5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b98565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d46856039015190565b14612d935760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b98565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80612e8c8686613a7e565b915091505f612e9f836001015160c01c90565b5f81815260a160205260409020549091508214612efe5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b61262a8386866142a2565b612f11613a24565b801561301557612f1f614899565b60a65460ff1615612fd45760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612f739084906150c0565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b61301d6148f3565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ff7565b50565b61304f613a24565b5f81118015613060575060ac548114155b6130ac5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b98565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101612073565b335f908152609f602052604090205460ff166131485760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79206368616c6c656e67657220616c6c6f7765640000000000000000006044820152606401610b98565b60a854156131985760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b6131a0613b17565b60a65460ff16156131f35760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b98565b8167ffffffffffffffff16609d541061324e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a1602052604090205481146132b55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6132c88267ffffffffffffffff1661181f565b6133145760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b03161561338f5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a26020526040902060010154421061341f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b98565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561346f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134939190615162565b3410156134e25760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516135fa91815260200190565b60405180910390a35f609d54600161361291906150c0565b90505b609e54811161366a578267ffffffffffffffff168114613658576099545f82815260a26020526040812060010180549091906136529084906150c0565b90915550505b806136628161519a565b915050613615565b505060a6805460ff1916600117905550565b5f54600390610100900460ff1615801561369c57505f5460ff8083169116105b61370e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff8316176101001781558290036137705760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b98565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612073565b335f90815260a560205260408120549081900361384a5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b98565b335f90815260a5602052604081205561386382826147ee565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161389e91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906118475750505f90815260a46020526040902060030154610100900460ff161590565b6138fc613a24565b5f8111801561390d57506098548114155b6139595760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b98565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101612073565b61399f613a24565b6001600160a01b038116613a1b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b98565b61304481614455565b6033546001600160a01b031633146123285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b98565b5f805f613a8b858561492c565b90505f8160ff165f03613aac57613aa2868661499c565b9094509050613b09565b8160ff16600103613ac157613aa28686614a05565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b98565b808420925050509250929050565b60655460ff16156123285760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b98565b805f03613b75575050565b8082035f5b82811015613c2157610100818403811115613b9457508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613bf7575f80fd5b505af1158015613c09573d5f803e3d5ffd5b50505050610100830192505061010081019050613b7a565b50505050565b613c3460208501856151d1565b60ff161580613c525750613c4b60208501856151d1565b60ff166001145b613c9e5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b98565b6080840135613cef5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b98565b60a0840135613d405760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b98565b5f80613d526115c86020880188615101565b915091505f613d65836001015160c01c90565b90505f60a181613d768460016150c0565b81526020019081526020015f205414613dd15760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b98565b609e548114613e225760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214613e7e5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b98565b5f81815260ab6020526040902054608088013514613ede5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f613eed846011015160c01c90565b90505f613f19613f0360608b0160408c016151f1565b613f1360808c0160608d01615179565b84614a58565b9050613f2b60808a0160608b01615179565b6001939093019261ffff1691909101908560f9613f4b60208c018c6151d1565b60ff16600103613f5a57506101015b604080518281019091529650613f7f87613f7760208e018e6151d1565b60ff16614a9c565b60c085901b6001880152613fad87613f9d60808e0160608f01615179565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b0135609988015261401187613ff260208d018d615101565b60405161400092919061520a565b604051809103902060b99190910152565b60d98701869052600161402760208d018d6151d1565b60ff1610614059576140598761404360608e0160408f016151f1565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff16156140c25760a7545f90815260a4602052604090206002015460995442916140b5916150c0565b6140bf91906150d3565b90505b604051806080016040528042815260200182609854426140e291906150c0565b6140ec91906150c0565b81526020018d604001602081019061410491906151f1565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e8790556097546001600160a01b031692506374fe27b791508b359061417e90614178908e018e615101565b5f614aa3565b5f61418c60408f018f615101565b6040518663ffffffff1660e01b81526004016141ac959493929190615260565b602060405180830381865afa1580156141c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141eb91906150e6565b61425d5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b806142ef5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b98565b5f6142fe846001015160c01c90565b90505f61430c856039015190565b90505f7f000000000000000000000000000000000000000000000000000000000000000061433b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a8486143fd885160f81c90565b858888866040518663ffffffff1660e01b81526004016144219594939291906152d3565b5f6040518083038186803b158015614437575f80fd5b505afa158015614449573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661453a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b612328614af7565b5f54610100900460ff166145be5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b612328614b7f565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af115801561464a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061466e9190615162565b5f86815260a4602052604090206001015490915061468d9082906150c0565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906146cc9084906150c0565b90915550506040516146df908490615304565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906147469084615330565b6147509190615347565b905061475c81836150d3565b60aa5f82825461476c91906150c0565b90915550506001600160a01b0384165f90815260a56020526040812080548392906147989084906150c0565b90915550506040516147ab908490615304565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614895575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461483d576040519150601f19603f3d011682016040523d82523d5f602084013e614842565b606091505b50509050806148935760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b98565b505b5050565b6148a1613b17565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586148d63390565b6040516001600160a01b03909116815260200160405180910390a1565b6148fb614c04565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336148d6565b5f8161497a5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b98565b82825f81811061498c5761498c61537f565b919091013560f81c949350505050565b5f8160f98110156149ef5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b98565b6040519150808483378082016040529250929050565b5f8161010181146149ef5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b98565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f918101614a8d8161ffff871686614c56565b82900390912095945050505050565b8082535050565b60605f80808080614ab6888a018a615499565b9550955095509550955050818710614ad4579450614af09350505050565b838710614ae8578295505050505050614af0565b509293505050505b9392505050565b5f54610100900460ff16614b735760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6065805460ff19169055565b5f54610100900460ff16614bfb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b61232833614455565b60655460ff166123285760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b98565b5f825f03614c65575082614af0565b609b546001600160a01b03165f5b84811015614d12576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614cd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614cfd9190615162565b87525060209095019460019384019301614c73565b5093949350505050565b5f60208284031215614d2c575f80fd5b5035919050565b80356001600160a01b0381168114614d49575f80fd5b919050565b5f60208284031215614d5e575f80fd5b614af082614d33565b5f8083601f840112614d77575f80fd5b50813567ffffffffffffffff811115614d8e575f80fd5b602083019150836020828501011115614da5575f80fd5b9250929050565b5f805f60408486031215614dbe575f80fd5b833567ffffffffffffffff811115614dd4575f80fd5b614de086828701614d67565b909790965060209590950135949350505050565b5f8060208385031215614e05575f80fd5b823567ffffffffffffffff811115614e1b575f80fd5b614e2785828601614d67565b90969095509350505050565b5f60e08284031215614e43575f80fd5b50919050565b5f60608284031215614e43575f80fd5b5f8060408385031215614e6a575f80fd5b823567ffffffffffffffff80821115614e81575f80fd5b614e8d86838701614e33565b93506020850135915080821115614ea2575f80fd5b50614eaf85828601614e49565b9150509250929050565b5f805f805f8060808789031215614ece575f80fd5b863567ffffffffffffffff80821115614ee5575f80fd5b614ef18a838b01614e33565b97506020890135915080821115614f06575f80fd5b614f128a838b01614e49565b96506040890135915080821115614f27575f80fd5b614f338a838b01614d67565b90965094506060890135915080821115614f4b575f80fd5b50614f5889828a01614d67565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614f7f575f80fd5b614f8887614d33565b9550614f9660208801614d33565b9450614fa460408801614d33565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614fd8575f80fd5b843567ffffffffffffffff80821115614fef575f80fd5b614ffb88838901614d67565b90965094506020870135915080821115615013575f80fd5b5061502087828801614d67565b95989497509550505050565b8015158114613044575f80fd5b5f60208284031215615049575f80fd5b8135614af08161502c565b803567ffffffffffffffff81168114614d49575f80fd5b5f806040838503121561507c575f80fd5b61508583615054565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561184757611847615093565b8181038181111561184757611847615093565b5f602082840312156150f6575f80fd5b8151614af08161502c565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615134575f80fd5b83018035915067ffffffffffffffff82111561514e575f80fd5b602001915036819003821315614da5575f80fd5b5f60208284031215615172575f80fd5b5051919050565b5f60208284031215615189575f80fd5b813561ffff81168114614af0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151ca576151ca615093565b5060010190565b5f602082840312156151e1575f80fd5b813560ff81168114614af0575f80fd5b5f60208284031215615201575f80fd5b614af082615054565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156152aa5784516001600160a01b031683529383019391830191600101615285565b505087604086015284810360608601526152c5818789615219565b9a9950505050505050505050565b858152846020820152608060408201525f6152f2608083018587615219565b90508260608301529695505050505050565b5f82515f5b818110156153235760208186018101518583015201615309565b505f920191825250919050565b808202811582820484141761184757611847615093565b5f8261537a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126153e8575f80fd5b8135602067ffffffffffffffff80831115615405576154056153ac565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615448576154486153ac565b6040529384526020818701810194908101925087851115615467575f80fd5b6020870191505b8482101561548e5761547f82614d33565b8352918301919083019061546e565b979650505050505050565b5f805f805f8060c087890312156154ae575f80fd5b86359550602087013567ffffffffffffffff808211156154cc575f80fd5b6154d88a838b016153d9565b96506040890135955060608901359150808211156154f4575f80fd5b6155008a838b016153d9565b94506080890135935060a089013591508082111561551c575f80fd5b5061552989828a016153d9565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 46d87d00a..9466d2be0 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -50,7 +50,7 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateRollupDelayPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchBlobVersionedHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobVersionedHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveCommittedBatchState\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b506040516200551c3803806200551c83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516153be6200015e5f395f81816106a2015261418e01526153be5ff3fe608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610ac4578063e3fff1dd14610ad9578063f2fde38b14610af8578063fb1e8b0414610b17575f80fd5b8063d8dc99d214610a71578063ddd8a3dc14610a86578063de8b303514610aa5575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a0b578063ce5db8d614610a1e578063cf9a674514610a33578063d279c19114610a52575f80fd5b8063b8d0a1b0146109ae578063bedb86fb146109cd578063c5553892146109ec575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461093c578063b348442514610951578063b35dac4e14610970578063b3e0a5091461098f575f80fd5b8063a479265d146108dd578063a4f209b0146108f2578063abc8d68d14610911575f80fd5b80638f1d3776116101985780638f1d3776146107af578063910129d41461085f57806397fc007c14610890578063a415d8dc146108af575f80fd5b8063728cdbca1461075a57806388b1ea09146107795780638da5cb5b14610792575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e57806361267290146106dd57806368589dfa146106fc5780636c578c1d14610727578063715018a614610746575f80fd5b80635c975abb1461061a5780635ef7a94a146106315780635f77cf1d14610691575f80fd5b80633e001b661161026e5780633e001b66146105b4578063428868b5146105c95780634e8f1d67146105dc57806357e0af6c146105fb575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a14610595575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c610378366004614b97565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de366004614bc9565b610b2c565b005b3480156103f0575f80fd5b506103e36103ff366004614c27565b610bfe565b34801561040f575f80fd5b5061038c61041e366004614b97565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004614c6f565b610f3a565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c610489366004614b97565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004614cd4565b611434565b3480156104c9575f80fd5b5061038c6104d8366004614b97565b6117bf565b3480156104e8575f80fd5b506103b66104f7366004614b97565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b6610522366004614b97565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d366004614b97565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461057d906001600160a01b031681565b6040516001600160a01b039091168152602001610398565b3480156105a0575f80fd5b50609b5461057d906001600160a01b031681565b3480156105bf575f80fd5b506103b660aa5481565b6103e36105d7366004614cd4565b6117ed565b3480156105e7575f80fd5b506103e36105f6366004614d34565b611ac1565b348015610606575f80fd5b506103e3610615366004614b97565b611d91565b348015610625575f80fd5b5060655460ff1661038c565b34801561063c575f80fd5b5061067161064b366004614b97565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b34801561069c575f80fd5b506106c47f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b3480156106e8575f80fd5b506103e36106f7366004614b97565b611e3c565b348015610707575f80fd5b506103b6610716366004614b97565b60ab6020525f908152604090205481565b348015610732575f80fd5b506103e3610741366004614bc9565b612017565b348015610751575f80fd5b506103e36120d4565b348015610765575f80fd5b506103e3610774366004614de5565b6120e7565b348015610784575f80fd5b5060a65461038c9060ff1681565b34801561079d575f80fd5b506033546001600160a01b031661057d565b3480156107ba575f80fd5b5061081b6107c9366004614b97565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b34801561086a575f80fd5b5061038c610879366004614b97565b5f90815260a4602052604090206003015460ff1690565b34801561089b575f80fd5b506103e36108aa366004614bc9565b6123f0565b3480156108ba575f80fd5b5061038c6108c9366004614bc9565b609f6020525f908152604090205460ff1681565b3480156108e8575f80fd5b506103b660995481565b3480156108fd575f80fd5b506103e361090c366004614b97565b6124d3565b34801561091c575f80fd5b506103b661092b366004614bc9565b60a56020525f908152604090205481565b348015610947575f80fd5b506103b660a85481565b34801561095c575f80fd5b506103e361096b366004614e40565b612583565b34801561097b575f80fd5b506103e361098a366004614bc9565b612887565b34801561099a575f80fd5b506103e36109a9366004614c6f565b6128e0565b3480156109b9575f80fd5b506103e36109c8366004614e40565b612c3d565b3480156109d8575f80fd5b506103e36109e7366004614eb4565b612cc6565b3480156109f7575f80fd5b506103e3610a06366004614b97565b612e04565b6103e3610a19366004614ee6565b612ea7565b348015610a29575f80fd5b506103b660985481565b348015610a3e575f80fd5b506103e3610a4d366004614b97565b613439565b348015610a5d575f80fd5b506103e3610a6c366004614bc9565b6135a8565b348015610a7c575f80fd5b506103b660ac5481565b348015610a91575f80fd5b5060975461057d906001600160a01b031681565b348015610ab0575f80fd5b5061038c610abf366004614b97565b613667565b348015610acf575f80fd5b506103b6609a5481565b348015610ae4575f80fd5b506103e3610af3366004614b97565b6136b1565b348015610b03575f80fd5b506103e3610b12366004614bc9565b613754565b348015610b22575f80fd5b506103b660a95481565b610b346137e1565b6001600160a01b0381165f908152609f602052604090205460ff1615610ba15760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c066137e1565b5f8111610c555760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b98565b5f80610c61858561383b565b915091505f610c74836001015160c01c90565b5f81815260a160205260409020549091508214610cd35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f60a181610ce18785614f3b565b81526020019081526020015f205414610d615760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b98565b609d548111610dd85760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b610de3600182614f4e565b609e555b8315610f3257604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e2f81613667565b15610e8a575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610e7a908490614f3b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610eea575060a85481145b15610ef4575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610de7575b505050505050565b60a85415610f8a5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b610f926138d4565b5f80610f9e848461383b565b915091505f610fb1836001015160c01c90565b5f81815260a1602052604090205490915082146110105760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b611019816117bf565b6110655760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b61106e81613667565b156110bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a4602052604090206003015460ff161561111c5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b98565b5f81815260a2602052604090206001015442101561117c5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b98565b605983015160a05f61118f600185614f4e565b81526020019081526020015f2054146111ea5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f81815260a06020526040902054156112455760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b98565b80609d54600101146112995760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b609d819055600160a35f6112ae866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556112fd6112f0846011015160c01c90565b600985015160c01c613927565b60a25f61130b600184614f4e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906113449084614f4e565b81526020019081526020015f205f905560ad5f6001836113649190614f4e565b81526020019081526020015f205f905560a45f6001836113849190614f4e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611410866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c49190614f61565b6115105760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156115605760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6115686138d4565b5f61157e6115796020850185614f7c565b61383b565b5090505f611590826001015160c01c90565b61159b906001614f3b565b5f81815260ad602052604090205490915061161e5760405162461bcd60e51b815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611682573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a69190614fdd565b6116b09190614f3b565b1015611718575f6116c76080860160608701614ff4565b61ffff16116117185760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611786573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117aa9190614fdd565b90506117b88585835f6139e4565b5050505050565b5f81815260a26020526040812054158015906117e757505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611859573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187d9190614f61565b6118c95760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156119195760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6119216138d4565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611985573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a99190614fdd565b6119b39190614f3b565b1015611a1b575f6119ca6080840160608501614ff4565b61ffff1611611a1b5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aad9190614fdd565b9050611abc83838360016139e4565b505050565b60a85415611b115760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b611b196138d4565b60ac54609e545f90815260a2602052604081205490914291611b3b9190614f3b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb79190614fdd565b611bc19190614f3b565b10905081158015611bcf5750805b15611c36575f611be560808a0160608b01614ff4565b61ffff1611611c365760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b8180611c3f5750805b611c8b5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b98565b611c9788885f806139e4565b5f80611ca3888861383b565b915091505f611cb6836001015160c01c90565b905080609e5414611d095760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214611d655760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f81815260a26020526040902042600190910155611d8483888861411f565b5050505050505050505050565b611d996137e1565b5f81118015611daa57506099548114155b611df65760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b98565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611e5c57505f5460ff8083169116105b611ece5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff831617610100179055611eec5f5460ff1690565b60ff16600214611f3e5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b98565b81611fb15760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b98565b609e545f90815260ab6020526040902054611fda57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b61201f6137e1565b6001600160a01b0381165f908152609f602052604090205460ff166120865760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b98565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bf3565b6120dc6137e1565b6120e55f6142d2565b565b5f54610100900460ff161580801561210557505f54600160ff909116105b8061211e5750303b15801561211e57505f5460ff166001145b6121905760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805460ff1916600117905580156121b1575f805461ff0019166101001790555b6001600160a01b03861615806121ce57506001600160a01b038516155b15612205576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03871661225b5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b98565b61226361433b565b61226b6143bf565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123e7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123f86137e1565b6001600160a01b0381161580159061241e5750609c546001600160a01b03828116911614155b61246a5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b98565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124db6137e1565b5f811180156124eb575060648111155b80156124f9575060a9548114155b6125455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b98565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611e30565b60a854156125d35760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b6125db6138d4565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266b9190614f61565b6126b75760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b5f806126c3868661383b565b915091505f6126d6836001015160c01c90565b5f81815260a1602052604090205490915082146127355760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b61273e81613667565b61278a5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916127c691614f3b565b1161283c575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261283791839190614443565b6123e7565b61284783868661411f565b6123e781336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061459f565b61288f6137e1565b60aa80545f9091556128a1828261466b565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611e30565b6128e86137e1565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561295f5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b98565b5f8061296b848461383b565b915091505f61297e836001015160c01c90565b905080156129ce5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b98565b5f6129da846079015190565b905080612a295760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b98565b600984015160c01c15612a7e5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b98565b5f612a8a856019015190565b03612ad75760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b98565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612b03856039015190565b14612b505760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b98565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80612c49868661383b565b915091505f612c5c836001015160c01c90565b5f81815260a160205260409020549091508214612cbb5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6123e783868661411f565b612cce6137e1565b8015612dd257612cdc614714565b60a65460ff1615612d915760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612d30908490614f3b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612dda61476e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612db4565b50565b612e0c6137e1565b5f81118015612e1d575060ac548114155b612e695760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b98565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611e30565b335f908152609f602052604090205460ff16612f055760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b98565b60a85415612f555760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b98565b612f5d6138d4565b60a65460ff1615612fb05760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b98565b8167ffffffffffffffff16609d541061300b5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a1602052604090205481146130725760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6130858267ffffffffffffffff166117bf565b6130d15760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b03161561314c5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a2602052604090206001015442106131dc5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b98565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561322c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132509190614fdd565b34101561329f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516133b791815260200190565b60405180910390a35f609d5460016133cf9190614f3b565b90505b609e548111613427578267ffffffffffffffff168114613415576099545f82815260a260205260408120600101805490919061340f908490614f3b565b90915550505b8061341f81615015565b9150506133d2565b505060a6805460ff1916600117905550565b5f54600390610100900460ff1615801561345957505f5460ff8083169116105b6134cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff83161761010017815582900361352d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b98565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e30565b335f90815260a56020526040812054908190036136075760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b98565b335f90815260a56020526040812055613620828261466b565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161365b91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906117e75750505f90815260a46020526040902060030154610100900460ff161590565b6136b96137e1565b5f811180156136ca57506098548114155b6137165760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b98565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611e30565b61375c6137e1565b6001600160a01b0381166137d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b98565b612e01816142d2565b6033546001600160a01b031633146120e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b98565b5f805f61384885856147a7565b90505f8160ff165f036138695761385f8686614817565b90945090506138c6565b8160ff1660010361387e5761385f8686614880565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b98565b808420925050509250929050565b60655460ff16156120e55760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b98565b805f03613932575050565b8082035f5b828110156139de5761010081840381111561395157508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156139b4575f80fd5b505af11580156139c6573d5f803e3d5ffd5b50505050610100830192505061010081019050613937565b50505050565b6139f1602085018561504c565b60ff161580613a0f5750613a08602085018561504c565b60ff166001145b613a5b5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b98565b6080840135613aac5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b98565b60a0840135613afd5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b98565b5f80613b0f6115796020880188614f7c565b915091505f613b22836001015160c01c90565b90505f60a181613b33846001614f3b565b81526020019081526020015f205414613b8e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b98565b609e548114613bdf5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214613c3b5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b98565b5f81815260ab6020526040902054608088013514613c9b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f613caa846011015160c01c90565b90505f613cd6613cc060608b0160408c0161506c565b613cd060808c0160608d01614ff4565b846148d3565b9050613ce860808a0160608b01614ff4565b6001939093015f81815260ad6020526040902054909361ffff16929092019180613db9578615613d86575f49613d865760405162461bcd60e51b815260206004820152602160248201527f626c6f62207265717569726564207768656e206e6f2073746f7265642068617360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f4915613d94575f49613db6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b60f9613dc860208c018c61504c565b60ff16600103613dd757506101015b604080518281019091529650613dfc87613df460208e018e61504c565b60ff16614917565b60c085901b6001880152613e2a87613e1a60808e0160608f01614ff4565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b01356099880152613e8e87613e6f60208d018d614f7c565b604051613e7d929190615085565b604051809103902060b99190910152565b60d987018690526001613ea460208d018d61504c565b60ff1610613ed657613ed687613ec060608e0160408f0161506c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff1615613f3f5760a7545f90815260a460205260409020600201546099544291613f3291614f3b565b613f3c9190614f4e565b90505b60405180608001604052804281526020018260985442613f5f9190614f3b565b613f699190614f3b565b81526020018d6040016020810190613f81919061506c565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e8790556097546001600160a01b031692506374fe27b791508b3590613ffb90613ff5908e018e614f7c565b5f61491e565b5f61400960408f018f614f7c565b6040518663ffffffff1660e01b81526004016140299594939291906150db565b602060405180830381865afa158015614044573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140689190614f61565b6140da5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b8061416c5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b98565b5f61417b846001015160c01c90565b90505f614189856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006141b8876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a84861427a885160f81c90565b858888866040518663ffffffff1660e01b815260040161429e95949392919061514e565b5f6040518083038186803b1580156142b4575f80fd5b505afa1580156142c6573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166143b75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5614972565b5f54610100900460ff1661443b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e56149fa565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156144c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144eb9190614fdd565b5f86815260a4602052604090206001015490915061450a908290614f3b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614549908490614f3b565b909155505060405161455c90849061517f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906145c390846151ab565b6145cd91906151c2565b90506145d98183614f4e565b60aa5f8282546145e99190614f3b565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614615908490614f3b565b909155505060405161462890849061517f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614710575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146146ba576040519150601f19603f3d011682016040523d82523d5f602084013e6146bf565b606091505b5050905080611abc5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b98565b5050565b61471c6138d4565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586147513390565b6040516001600160a01b03909116815260200160405180910390a1565b614776614a7f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614751565b5f816147f55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b98565b82825f818110614807576148076151fa565b919091013560f81c949350505050565b5f8160f981101561486a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b98565b6040519150808483378082016040529250929050565b5f81610101811461486a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b98565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016149088161ffff871686614ad1565b82900390912095945050505050565b8082535050565b60605f80808080614931888a018a615314565b955095509550955095505081871061494f57945061496b9350505050565b83871061496357829550505050505061496b565b509293505050505b9392505050565b5f54610100900460ff166149ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6065805460ff19169055565b5f54610100900460ff16614a765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6120e5336142d2565b60655460ff166120e55760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b98565b5f825f03614ae057508261496b565b609b546001600160a01b03165f5b84811015614b8d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b789190614fdd565b87525060209095019460019384019301614aee565b5093949350505050565b5f60208284031215614ba7575f80fd5b5035919050565b80356001600160a01b0381168114614bc4575f80fd5b919050565b5f60208284031215614bd9575f80fd5b61496b82614bae565b5f8083601f840112614bf2575f80fd5b50813567ffffffffffffffff811115614c09575f80fd5b602083019150836020828501011115614c20575f80fd5b9250929050565b5f805f60408486031215614c39575f80fd5b833567ffffffffffffffff811115614c4f575f80fd5b614c5b86828701614be2565b909790965060209590950135949350505050565b5f8060208385031215614c80575f80fd5b823567ffffffffffffffff811115614c96575f80fd5b614ca285828601614be2565b90969095509350505050565b5f60e08284031215614cbe575f80fd5b50919050565b5f60608284031215614cbe575f80fd5b5f8060408385031215614ce5575f80fd5b823567ffffffffffffffff80821115614cfc575f80fd5b614d0886838701614cae565b93506020850135915080821115614d1d575f80fd5b50614d2a85828601614cc4565b9150509250929050565b5f805f805f8060808789031215614d49575f80fd5b863567ffffffffffffffff80821115614d60575f80fd5b614d6c8a838b01614cae565b97506020890135915080821115614d81575f80fd5b614d8d8a838b01614cc4565b96506040890135915080821115614da2575f80fd5b614dae8a838b01614be2565b90965094506060890135915080821115614dc6575f80fd5b50614dd389828a01614be2565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614dfa575f80fd5b614e0387614bae565b9550614e1160208801614bae565b9450614e1f60408801614bae565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614e53575f80fd5b843567ffffffffffffffff80821115614e6a575f80fd5b614e7688838901614be2565b90965094506020870135915080821115614e8e575f80fd5b50614e9b87828801614be2565b95989497509550505050565b8015158114612e01575f80fd5b5f60208284031215614ec4575f80fd5b813561496b81614ea7565b803567ffffffffffffffff81168114614bc4575f80fd5b5f8060408385031215614ef7575f80fd5b614f0083614ecf565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117e7576117e7614f0e565b818103818111156117e7576117e7614f0e565b5f60208284031215614f71575f80fd5b815161496b81614ea7565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614faf575f80fd5b83018035915067ffffffffffffffff821115614fc9575f80fd5b602001915036819003821315614c20575f80fd5b5f60208284031215614fed575f80fd5b5051919050565b5f60208284031215615004575f80fd5b813561ffff8116811461496b575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504557615045614f0e565b5060010190565b5f6020828403121561505c575f80fd5b813560ff8116811461496b575f80fd5b5f6020828403121561507c575f80fd5b61496b82614ecf565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156151255784516001600160a01b031683529383019391830191600101615100565b50508760408601528481036060860152615140818789615094565b9a9950505050505050505050565b858152846020820152608060408201525f61516d608083018587615094565b90508260608301529695505050505050565b5f82515f5b8181101561519e5760208186018101518583015201615184565b505f920191825250919050565b80820281158282048414176117e7576117e7614f0e565b5f826151f5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615263575f80fd5b8135602067ffffffffffffffff8083111561528057615280615227565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156152c3576152c3615227565b60405293845260208187018101949081019250878511156152e2575f80fd5b6020870191505b84821015615309576152fa82614bae565b835291830191908301906152e9565b979650505050505050565b5f805f805f8060c08789031215615329575f80fd5b86359550602087013567ffffffffffffffff80821115615347575f80fd5b6153538a838b01615254565b965060408901359550606089013591508082111561536f575f80fd5b61537b8a838b01615254565b94506080890135935060a0890135915080821115615397575f80fd5b506153a489828a01615254565b915050929550929550929556fea164736f6c6343000818000a", + Bin: "0x60a060405234801562000010575f80fd5b50604051620056a1380380620056a183398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516155436200015e5f395f81816106a2015261431101526155435ff3fe608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610ac4578063e3fff1dd14610ad9578063f2fde38b14610af8578063fb1e8b0414610b17575f80fd5b8063d8dc99d214610a71578063ddd8a3dc14610a86578063de8b303514610aa5575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a0b578063ce5db8d614610a1e578063cf9a674514610a33578063d279c19114610a52575f80fd5b8063b8d0a1b0146109ae578063bedb86fb146109cd578063c5553892146109ec575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461093c578063b348442514610951578063b35dac4e14610970578063b3e0a5091461098f575f80fd5b8063a479265d146108dd578063a4f209b0146108f2578063abc8d68d14610911575f80fd5b80638f1d3776116101985780638f1d3776146107af578063910129d41461085f57806397fc007c14610890578063a415d8dc146108af575f80fd5b8063728cdbca1461075a57806388b1ea09146107795780638da5cb5b14610792575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e57806361267290146106dd57806368589dfa146106fc5780636c578c1d14610727578063715018a614610746575f80fd5b80635c975abb1461061a5780635ef7a94a146106315780635f77cf1d14610691575f80fd5b80633e001b661161026e5780633e001b66146105b4578063428868b5146105c95780634e8f1d67146105dc57806357e0af6c146105fb575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a14610595575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c610378366004614d1c565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de366004614d4e565b610b2c565b005b3480156103f0575f80fd5b506103e36103ff366004614dac565b610bfe565b34801561040f575f80fd5b5061038c61041e366004614d1c565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004614df4565b610f3a565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c610489366004614d1c565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004614e59565b611434565b3480156104c9575f80fd5b5061038c6104d8366004614d1c565b61181f565b3480156104e8575f80fd5b506103b66104f7366004614d1c565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b6610522366004614d1c565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d366004614d1c565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461057d906001600160a01b031681565b6040516001600160a01b039091168152602001610398565b3480156105a0575f80fd5b50609b5461057d906001600160a01b031681565b3480156105bf575f80fd5b506103b660aa5481565b6103e36105d7366004614e59565b61184d565b3480156105e7575f80fd5b506103e36105f6366004614eb9565b611c00565b348015610606575f80fd5b506103e3610615366004614d1c565b611fd4565b348015610625575f80fd5b5060655460ff1661038c565b34801561063c575f80fd5b5061067161064b366004614d1c565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b34801561069c575f80fd5b506106c47f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b3480156106e8575f80fd5b506103e36106f7366004614d1c565b61207f565b348015610707575f80fd5b506103b6610716366004614d1c565b60ab6020525f908152604090205481565b348015610732575f80fd5b506103e3610741366004614d4e565b61225a565b348015610751575f80fd5b506103e3612317565b348015610765575f80fd5b506103e3610774366004614f6a565b61232a565b348015610784575f80fd5b5060a65461038c9060ff1681565b34801561079d575f80fd5b506033546001600160a01b031661057d565b3480156107ba575f80fd5b5061081b6107c9366004614d1c565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b34801561086a575f80fd5b5061038c610879366004614d1c565b5f90815260a4602052604090206003015460ff1690565b34801561089b575f80fd5b506103e36108aa366004614d4e565b612633565b3480156108ba575f80fd5b5061038c6108c9366004614d4e565b609f6020525f908152604090205460ff1681565b3480156108e8575f80fd5b506103b660995481565b3480156108fd575f80fd5b506103e361090c366004614d1c565b612716565b34801561091c575f80fd5b506103b661092b366004614d4e565b60a56020525f908152604090205481565b348015610947575f80fd5b506103b660a85481565b34801561095c575f80fd5b506103e361096b366004614fc5565b6127c6565b34801561097b575f80fd5b506103e361098a366004614d4e565b612aca565b34801561099a575f80fd5b506103e36109a9366004614df4565b612b23565b3480156109b9575f80fd5b506103e36109c8366004614fc5565b612e80565b3480156109d8575f80fd5b506103e36109e7366004615039565b612f09565b3480156109f7575f80fd5b506103e3610a06366004614d1c565b613047565b6103e3610a1936600461506b565b6130ea565b348015610a29575f80fd5b506103b660985481565b348015610a3e575f80fd5b506103e3610a4d366004614d1c565b61367c565b348015610a5d575f80fd5b506103e3610a6c366004614d4e565b6137eb565b348015610a7c575f80fd5b506103b660ac5481565b348015610a91575f80fd5b5060975461057d906001600160a01b031681565b348015610ab0575f80fd5b5061038c610abf366004614d1c565b6138aa565b348015610acf575f80fd5b506103b6609a5481565b348015610ae4575f80fd5b506103e3610af3366004614d1c565b6138f4565b348015610b03575f80fd5b506103e3610b12366004614d4e565b613997565b348015610b22575f80fd5b506103b660a95481565b610b34613a24565b6001600160a01b0381165f908152609f602052604090205460ff1615610ba15760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c06613a24565b5f8111610c555760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b98565b5f80610c618585613a7e565b915091505f610c74836001015160c01c90565b5f81815260a160205260409020549091508214610cd35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f60a181610ce187856150c0565b81526020019081526020015f205414610d615760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b98565b609d548111610dd85760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b610de36001826150d3565b609e555b8315610f3257604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e2f816138aa565b15610e8a575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610e7a9084906150c0565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610eea575060a85481145b15610ef4575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610de7575b505050505050565b60a85415610f8a5760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b610f92613b17565b5f80610f9e8484613a7e565b915091505f610fb1836001015160c01c90565b5f81815260a1602052604090205490915082146110105760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6110198161181f565b6110655760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b61106e816138aa565b156110bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a4602052604090206003015460ff161561111c5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b98565b5f81815260a2602052604090206001015442101561117c5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b98565b605983015160a05f61118f6001856150d3565b81526020019081526020015f2054146111ea5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f81815260a06020526040902054156112455760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b98565b80609d54600101146112995760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b609d819055600160a35f6112ae866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556112fd6112f0846011015160c01c90565b600985015160c01c613b6a565b60a25f61130b6001846150d3565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061134490846150d3565b81526020019081526020015f205f905560ad5f60018361136491906150d3565b81526020019081526020015f205f905560a45f60018361138491906150d3565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611410866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c491906150e6565b6115105760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156115605760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b611568613b17565b5f49156115b75760405162461bcd60e51b815260206004820152601f60248201527f636f6d6d69745374617465206d757374206e6f7420636172727920626c6f62006044820152606401610b98565b5f6115cd6115c86020850185615101565b613a7e565b5090505f6115df826001015160c01c90565b6115ea9060016150c0565b5f81815260ad602052604090205490915061166d5760405162461bcd60e51b815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f59190615162565b6116ff91906150c0565b1015611767575f6117166080860160608701615179565b61ffff16116117675760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156117d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f99190615162565b905061181885858360ad5f8781526020019081526020015f2054613c27565b5050505050565b5f81815260a260205260408120541580159061184757505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156118b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118dd91906150e6565b6119295760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b60a854156119795760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b611981613b17565b5f6119926115c86020850185615101565b5090505f6119a4826001015160c01c90565b6119af9060016150c0565b5f81815260ad602052604090205490915015611a335760405162461bcd60e51b815260206004820152602860248201527f636f6d6d69744261746368207265717569726573206e6f2073746f726564206260448201527f6c6f6220686173680000000000000000000000000000000000000000000000006064820152608401610b98565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611a97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abb9190615162565b611ac591906150c0565b1015611b2d575f611adc6080860160608701615179565b61ffff1611611b2d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b6097545f906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611b9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615162565b90505f804915611bd0575f49611bf2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b9050610f3286868484613c27565b60a85415611c505760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b611c58613b17565b60ac54609e545f90815260a2602052604081205490914291611c7a91906150c0565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf69190615162565b611d0091906150c0565b10905081158015611d0e5750805b15611d75575f611d2460808a0160608b01615179565b61ffff1611611d755760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b98565b8180611d7e5750805b611dca5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b98565b5f611ddb6115c860208b018b615101565b5090505f611ded826001015160c01c90565b611df89060016150c0565b5f81815260ad60205260408120549192509015611e98575f4915611e845760405162461bcd60e51b815260206004820152602f60248201527f6d757374206e6f7420636172727920626c6f62207768656e207573696e67207360448201527f746f72656420626c6f62206861736800000000000000000000000000000000006064820152608401610b98565b505f81815260ad6020526040902054611ecb565b5f4915611ea6575f49611ec8565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b611ed78b8b5f84613c27565b5f80611ee38b8b613a7e565b915091505f611ef6836001015160c01c90565b905080609e5414611f495760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214611fa55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b5f81815260a26020526040902042600190910155611fc4838b8b6142a2565b5050505050505050505050505050565b611fdc613a24565b5f81118015611fed57506099548114155b6120395760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b98565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561209f57505f5460ff8083169116105b6121115760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff83161761010017905561212f5f5460ff1690565b60ff166002146121815760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b98565b816121f45760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b98565b609e545f90815260ab602052604090205461221d57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612073565b612262613a24565b6001600160a01b0381165f908152609f602052604090205460ff166122c95760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b98565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bf3565b61231f613a24565b6123285f614455565b565b5f54610100900460ff161580801561234857505f54600160ff909116105b806123615750303b15801561236157505f5460ff166001145b6123d35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805460ff1916600117905580156123f4575f805461ff0019166101001790555b6001600160a01b038616158061241157506001600160a01b038516155b15612448576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03871661249e5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b98565b6124a66144be565b6124ae614542565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561262a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61263b613a24565b6001600160a01b038116158015906126615750609c546001600160a01b03828116911614155b6126ad5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b98565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61271e613a24565b5f8111801561272e575060648111155b801561273c575060a9548114155b6127885760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b98565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101612073565b60a854156128165760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b61281e613b17565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561288a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae91906150e6565b6128fa5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b98565b5f806129068686613a7e565b915091505f612919836001015160c01c90565b5f81815260a1602052604090205490915082146129785760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b612981816138aa565b6129cd5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b98565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff191690556099546002909101544291612a09916150c0565b11612a7f575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612a7a918391906145c6565b61262a565b612a8a8386866142a2565b61262a81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614722565b612ad2613a24565b60aa80545f909155612ae482826147ee565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101612073565b612b2b613a24565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612ba25760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b98565b5f80612bae8484613a7e565b915091505f612bc1836001015160c01c90565b90508015612c115760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b98565b5f612c1d846079015190565b905080612c6c5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b98565b600984015160c01c15612cc15760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b98565b5f612ccd856019015190565b03612d1a5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b98565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d46856039015190565b14612d935760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b98565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80612e8c8686613a7e565b915091505f612e9f836001015160c01c90565b5f81815260a160205260409020549091508214612efe5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b61262a8386866142a2565b612f11613a24565b801561301557612f1f614899565b60a65460ff1615612fd45760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612f739084906150c0565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b61301d6148f3565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ff7565b50565b61304f613a24565b5f81118015613060575060ac548114155b6130ac5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b98565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101612073565b335f908152609f602052604090205460ff166131485760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79206368616c6c656e67657220616c6c6f7765640000000000000000006044820152606401610b98565b60a854156131985760405162461bcd60e51b815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610b98565b6131a0613b17565b60a65460ff16156131f35760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b98565b8167ffffffffffffffff16609d541061324e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a1602052604090205481146132b55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b98565b6132c88267ffffffffffffffff1661181f565b6133145760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b03161561338f5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b98565b67ffffffffffffffff82165f90815260a26020526040902060010154421061341f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b98565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561346f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134939190615162565b3410156134e25760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b98565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516135fa91815260200190565b60405180910390a35f609d54600161361291906150c0565b90505b609e54811161366a578267ffffffffffffffff168114613658576099545f82815260a26020526040812060010180549091906136529084906150c0565b90915550505b806136628161519a565b915050613615565b505060a6805460ff1916600117905550565b5f54600390610100900460ff1615801561369c57505f5460ff8083169116105b61370e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b98565b5f805461ffff191660ff8316176101001781558290036137705760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b98565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612073565b335f90815260a560205260408120549081900361384a5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b98565b335f90815260a5602052604081205561386382826147ee565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161389e91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906118475750505f90815260a46020526040902060030154610100900460ff161590565b6138fc613a24565b5f8111801561390d57506098548114155b6139595760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b98565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101612073565b61399f613a24565b6001600160a01b038116613a1b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b98565b61304481614455565b6033546001600160a01b031633146123285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b98565b5f805f613a8b858561492c565b90505f8160ff165f03613aac57613aa2868661499c565b9094509050613b09565b8160ff16600103613ac157613aa28686614a05565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b98565b808420925050509250929050565b60655460ff16156123285760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b98565b805f03613b75575050565b8082035f5b82811015613c2157610100818403811115613b9457508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613bf7575f80fd5b505af1158015613c09573d5f803e3d5ffd5b50505050610100830192505061010081019050613b7a565b50505050565b613c3460208501856151d1565b60ff161580613c525750613c4b60208501856151d1565b60ff166001145b613c9e5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b98565b6080840135613cef5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b98565b60a0840135613d405760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b98565b5f80613d526115c86020880188615101565b915091505f613d65836001015160c01c90565b90505f60a181613d768460016150c0565b81526020019081526020015f205414613dd15760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b98565b609e548114613e225760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b98565b5f81815260a160205260409020548214613e7e5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b98565b5f81815260ab6020526040902054608088013514613ede5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b98565b5f613eed846011015160c01c90565b90505f613f19613f0360608b0160408c016151f1565b613f1360808c0160608d01615179565b84614a58565b9050613f2b60808a0160608b01615179565b6001939093019261ffff1691909101908560f9613f4b60208c018c6151d1565b60ff16600103613f5a57506101015b604080518281019091529650613f7f87613f7760208e018e6151d1565b60ff16614a9c565b60c085901b6001880152613fad87613f9d60808e0160608f01615179565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b0135609988015261401187613ff260208d018d615101565b60405161400092919061520a565b604051809103902060b99190910152565b60d98701869052600161402760208d018d6151d1565b60ff1610614059576140598761404360608e0160408f016151f1565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff16156140c25760a7545f90815260a4602052604090206002015460995442916140b5916150c0565b6140bf91906150d3565b90505b604051806080016040528042815260200182609854426140e291906150c0565b6140ec91906150c0565b81526020018d604001602081019061410491906151f1565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e8790556097546001600160a01b031692506374fe27b791508b359061417e90614178908e018e615101565b5f614aa3565b5f61418c60408f018f615101565b6040518663ffffffff1660e01b81526004016141ac959493929190615260565b602060405180830381865afa1580156141c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141eb91906150e6565b61425d5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b98565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b806142ef5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b98565b5f6142fe846001015160c01c90565b90505f61430c856039015190565b90505f7f000000000000000000000000000000000000000000000000000000000000000061433b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a8486143fd885160f81c90565b858888866040518663ffffffff1660e01b81526004016144219594939291906152d3565b5f6040518083038186803b158015614437575f80fd5b505afa158015614449573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661453a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b612328614af7565b5f54610100900460ff166145be5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b612328614b7f565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af115801561464a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061466e9190615162565b5f86815260a4602052604090206001015490915061468d9082906150c0565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906146cc9084906150c0565b90915550506040516146df908490615304565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906147469084615330565b6147509190615347565b905061475c81836150d3565b60aa5f82825461476c91906150c0565b90915550506001600160a01b0384165f90815260a56020526040812080548392906147989084906150c0565b90915550506040516147ab908490615304565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614895575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461483d576040519150601f19603f3d011682016040523d82523d5f602084013e614842565b606091505b50509050806148935760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b98565b505b5050565b6148a1613b17565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586148d63390565b6040516001600160a01b03909116815260200160405180910390a1565b6148fb614c04565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336148d6565b5f8161497a5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b98565b82825f81811061498c5761498c61537f565b919091013560f81c949350505050565b5f8160f98110156149ef5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b98565b6040519150808483378082016040529250929050565b5f8161010181146149ef5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b98565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f918101614a8d8161ffff871686614c56565b82900390912095945050505050565b8082535050565b60605f80808080614ab6888a018a615499565b9550955095509550955050818710614ad4579450614af09350505050565b838710614ae8578295505050505050614af0565b509293505050505b9392505050565b5f54610100900460ff16614b735760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b6065805460ff19169055565b5f54610100900460ff16614bfb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b98565b61232833614455565b60655460ff166123285760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b98565b5f825f03614c65575082614af0565b609b546001600160a01b03165f5b84811015614d12576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614cd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614cfd9190615162565b87525060209095019460019384019301614c73565b5093949350505050565b5f60208284031215614d2c575f80fd5b5035919050565b80356001600160a01b0381168114614d49575f80fd5b919050565b5f60208284031215614d5e575f80fd5b614af082614d33565b5f8083601f840112614d77575f80fd5b50813567ffffffffffffffff811115614d8e575f80fd5b602083019150836020828501011115614da5575f80fd5b9250929050565b5f805f60408486031215614dbe575f80fd5b833567ffffffffffffffff811115614dd4575f80fd5b614de086828701614d67565b909790965060209590950135949350505050565b5f8060208385031215614e05575f80fd5b823567ffffffffffffffff811115614e1b575f80fd5b614e2785828601614d67565b90969095509350505050565b5f60e08284031215614e43575f80fd5b50919050565b5f60608284031215614e43575f80fd5b5f8060408385031215614e6a575f80fd5b823567ffffffffffffffff80821115614e81575f80fd5b614e8d86838701614e33565b93506020850135915080821115614ea2575f80fd5b50614eaf85828601614e49565b9150509250929050565b5f805f805f8060808789031215614ece575f80fd5b863567ffffffffffffffff80821115614ee5575f80fd5b614ef18a838b01614e33565b97506020890135915080821115614f06575f80fd5b614f128a838b01614e49565b96506040890135915080821115614f27575f80fd5b614f338a838b01614d67565b90965094506060890135915080821115614f4b575f80fd5b50614f5889828a01614d67565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614f7f575f80fd5b614f8887614d33565b9550614f9660208801614d33565b9450614fa460408801614d33565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614fd8575f80fd5b843567ffffffffffffffff80821115614fef575f80fd5b614ffb88838901614d67565b90965094506020870135915080821115615013575f80fd5b5061502087828801614d67565b95989497509550505050565b8015158114613044575f80fd5b5f60208284031215615049575f80fd5b8135614af08161502c565b803567ffffffffffffffff81168114614d49575f80fd5b5f806040838503121561507c575f80fd5b61508583615054565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561184757611847615093565b8181038181111561184757611847615093565b5f602082840312156150f6575f80fd5b8151614af08161502c565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615134575f80fd5b83018035915067ffffffffffffffff82111561514e575f80fd5b602001915036819003821315614da5575f80fd5b5f60208284031215615172575f80fd5b5051919050565b5f60208284031215615189575f80fd5b813561ffff81168114614af0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151ca576151ca615093565b5060010190565b5f602082840312156151e1575f80fd5b813560ff81168114614af0575f80fd5b5f60208284031215615201575f80fd5b614af082615054565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156152aa5784516001600160a01b031683529383019391830191600101615285565b505087604086015284810360608601526152c5818789615219565b9a9950505050505050505050565b858152846020820152608060408201525f6152f2608083018587615219565b90508260608301529695505050505050565b5f82515f5b818110156153235760208186018101518583015201615309565b505f920191825250919050565b808202811582820484141761184757611847615093565b5f8261537a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126153e8575f80fd5b8135602067ffffffffffffffff80831115615405576154056153ac565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615448576154486153ac565b6040529384526020818701810194908101925087851115615467575f80fd5b6020870191505b8482101561548e5761547f82614d33565b8352918301919083019061546e565b979650505050505050565b5f805f805f8060c087890312156154ae575f80fd5b86359550602087013567ffffffffffffffff808211156154cc575f80fd5b6154d88a838b016153d9565b96506040890135955060608901359150808211156154f4575f80fd5b6155008a838b016153d9565b94506080890135935060a089013591508082111561551c575f80fd5b5061552989828a016153d9565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 60cc8823d..926d6baf3 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610b1f578063e3fff1dd14610b34578063f2fde38b14610b53578063fb1e8b0414610b72575f80fd5b8063d8dc99d214610abf578063ddd8a3dc14610ad4578063de8b303514610b00575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a59578063ce5db8d614610a6c578063cf9a674514610a81578063d279c19114610aa0575f80fd5b8063b8d0a1b0146109fc578063bedb86fb14610a1b578063c555389214610a3a575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461098a578063b34844251461099f578063b35dac4e146109be578063b3e0a509146109dd575f80fd5b8063a479265d1461092b578063a4f209b014610940578063abc8d68d1461095f575f80fd5b80638f1d3776116101985780638f1d3776146107e3578063910129d4146108ad57806397fc007c146108de578063a415d8dc146108fd575f80fd5b8063728cdbca1461078157806388b1ea09146107a05780638da5cb5b146107b9575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e578063612672901461070457806368589dfa146107235780636c578c1d1461074e578063715018a61461076d575f80fd5b80635c975abb146106415780635ef7a94a146106585780635f77cf1d146106b8575f80fd5b80633e001b661161026e5780633e001b66146105db578063428868b5146105f05780634e8f1d671461060357806357e0af6c14610622575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a146105af575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c6103783660046159bb565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de3660046159fa565b610b87565b005b3480156103f0575f80fd5b506103e36103ff366004615a58565b610cab565b34801561040f575f80fd5b5061038c61041e3660046159bb565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004615aa0565b611097565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c6104893660046159bb565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004615b05565b6116b6565b3480156104c9575f80fd5b5061038c6104d83660046159bb565b611aea565b3480156104e8575f80fd5b506103b66104f73660046159bb565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b66105223660046159bb565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d3660046159bb565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610398565b3480156105ba575f80fd5b50609b5461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105e6575f80fd5b506103b660aa5481565b6103e36105fe366004615b05565b611b18565b34801561060e575f80fd5b506103e361061d366004615b65565b611e7b565b34801561062d575f80fd5b506103e361063c3660046159bb565b6121e7565b34801561064c575f80fd5b5060655460ff1661038c565b348015610663575f80fd5b506106986106723660046159bb565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b3480156106c3575f80fd5b506106eb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b34801561070f575f80fd5b506103e361071e3660046159bb565b6122ac565b34801561072e575f80fd5b506103b661073d3660046159bb565b60ab6020525f908152604090205481565b348015610759575f80fd5b506103e36107683660046159fa565b61250f565b348015610778575f80fd5b506103e361261e565b34801561078c575f80fd5b506103e361079b366004615c16565b612631565b3480156107ab575f80fd5b5060a65461038c9060ff1681565b3480156107c4575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661058a565b3480156107ee575f80fd5b5061085c6107fd3660046159bb565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b3480156108b8575f80fd5b5061038c6108c73660046159bb565b5f90815260a4602052604090206003015460ff1690565b3480156108e9575f80fd5b506103e36108f83660046159fa565b6129fa565b348015610908575f80fd5b5061038c6109173660046159fa565b609f6020525f908152604090205460ff1681565b348015610936575f80fd5b506103b660995481565b34801561094b575f80fd5b506103e361095a3660046159bb565b612b1e565b34801561096a575f80fd5b506103b66109793660046159fa565b60a56020525f908152604090205481565b348015610995575f80fd5b506103b660a85481565b3480156109aa575f80fd5b506103e36109b9366004615c71565b612be8565b3480156109c9575f80fd5b506103e36109d83660046159fa565b612fc7565b3480156109e8575f80fd5b506103e36109f7366004615aa0565b61302d565b348015610a07575f80fd5b506103e3610a16366004615c71565b613426565b348015610a26575f80fd5b506103e3610a35366004615ce5565b6134c9565b348015610a45575f80fd5b506103e3610a543660046159bb565b61365c565b6103e3610a67366004615d17565b613719565b348015610a77575f80fd5b506103b660985481565b348015610a8c575f80fd5b506103e3610a9b3660046159bb565b613e2e565b348015610aab575f80fd5b506103e3610aba3660046159fa565b61400b565b348015610aca575f80fd5b506103b660ac5481565b348015610adf575f80fd5b5060975461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610b0b575f80fd5b5061038c610b1a3660046159bb565b6140f1565b348015610b2a575f80fd5b506103b6609a5481565b348015610b3f575f80fd5b506103e3610b4e3660046159bb565b614148565b348015610b5e575f80fd5b506103e3610b6d3660046159fa565b614205565b348015610b7d575f80fd5b506103b660a95481565b610b8f6142b9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610cb36142b9565b5f8111610d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610c1a565b5f80610d28858561433a565b915091505f610d3b836001015160c01c90565b5f81815260a160205260409020549091508214610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b5f60a181610dc28785615d6c565b81526020019081526020015f205414610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b609d548111610eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b610ef8600182615d7f565b609e555b831561108f57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610f44816140f1565b15610fca575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f9c908490615d6c565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590611047575060a85481145b15611051575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610efc575b505050505050565b60a85415611101576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b6111096143ed565b5f80611115848461433a565b915091505f611128836001015160c01c90565b5f81815260a1602052604090205490915082146111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b6111aa81611aea565b611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610c1a565b611219816140f1565b15611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610c1a565b5f81815260a4602052604090206003015460ff16156112fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610c1a565b5f81815260a26020526040902060010154421015611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610c1a565b605983015160a05f611388600185615d7f565b81526020019081526020015f2054146113fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610c1a565b5f81815260a0602052604090205415611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610c1a565b80609d54600101146114e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610c1a565b609d819055600160a35f6114f5866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a06020526040902055611562611555846011015160c01c90565b600985015160c01c61445a565b60a25f611570600184615d7f565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906115a99084615d7f565b81526020019081526020015f205f905560ad5f6001836115c99190615d7f565b81526020019081526020015f205f905560a45f6001836115e99190615d7f565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611692866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561173c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117609190615d92565b6117c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b60a85415611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b6118386143ed565b5f61184e6118496020850185615dad565b61433a565b5090505f611860826001015160c01c90565b61186b906001615d6c565b5f81815260ad6020526040902054909150611908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611979573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199d9190615e0e565b6119a79190615d6c565b1015611a29575f6119be6080860160608701615e25565b61ffff1611611a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b6097545f9073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad59190615e0e565b9050611ae38585835f614524565b5050505050565b5f81815260a2602052604081205415801590611b1257505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611b9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc29190615d92565b611c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b60a85415611c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b611c9a6143ed565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611d0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2f9190615e0e565b611d399190615d6c565b1015611dbb575f611d506080840160608501615e25565b61ffff1611611dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b6097545f9073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611e43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e679190615e0e565b9050611e768383836001614524565b505050565b60a85415611ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b611eed6143ed565b60ac54609e545f90815260a2602052604081205490914291611f0f9190615d6c565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fa59190615e0e565b611faf9190615d6c565b10905081158015611fbd5750805b1561203e575f611fd360808a0160608b01615e25565b61ffff161161203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b81806120475750805b6120ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610c1a565b6120b988885f80614524565b5f806120c5888861433a565b915091505f6120d8836001015160c01c90565b905080609e5414612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610c1a565b5f81815260a1602052604090205482146121bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b5f81815260a260205260409020426001909101556121da838888614d56565b5050505050505050505050565b6121ef6142b9565b5f8111801561220057506099548114155b612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610c1a565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff161580156122cc57505f5460ff8083169116105b612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556123935f5460ff1690565b60ff166002146123ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610c1a565b8161248c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610c1a565b609e545f90815260ab60205260409020546124b557609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122a0565b6125176142b9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff166125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610c1a565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610ca0565b6126266142b9565b61262f5f614f30565b565b5f54610100900460ff161580801561264f57505f54600160ff909116105b806126685750303b15801561266857505f5460ff166001145b6126f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612750575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612787575073ffffffffffffffffffffffffffffffffffffffff8516155b156127be576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871661283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610c1a565b612843614fa6565b61284b615044565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156129f1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612a026142b9565b73ffffffffffffffffffffffffffffffffffffffff811615801590612a425750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610c1a565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612b266142b9565b5f81118015612b36575060648111155b8015612b44575060a9548114155b612baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610c1a565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016122a0565b60a85415612c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b612c5a6143ed565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612ce0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d049190615d92565b612d6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b5f80612d76868661433a565b915091505f612d89836001015160c01c90565b5f81815260a160205260409020549091508214612e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b612e0b816140f1565b612e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610c1a565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556099546002909101544291612ee891615d6c565b11612f7c575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612f77918391906150e2565b6129f1565b612f87838686614d56565b6129f181336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250615265565b612fcf6142b9565b60aa80545f909155612fe1828261534b565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016122a0565b6130356142b9565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156130c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610c1a565b5f806130d2848461433a565b915091505f6130e5836001015160c01c90565b9050801561314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610c1a565b5f61315b846079015190565b9050806131c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610c1a565b600984015160c01c15613233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610c1a565b5f61323f856019015190565b036132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610c1a565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146132d2856039015190565b14613339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610c1a565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f80613432868661433a565b915091505f613445836001015160c01c90565b5f81815260a1602052604090205490915082146134be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b6129f1838686614d56565b6134d16142b9565b801561362a576134df61541b565b60a65460ff16156135dc5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091613540908490615d6c565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b6136326154a0565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336135ff565b50565b6136646142b9565b5f81118015613675575060ac548114155b6136db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610c1a565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad191016122a0565b335f908152609f602052604090205460ff16613791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610c1a565b60a854156137fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610c1a565b6138036143ed565b60a65460ff1615613870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610c1a565b8167ffffffffffffffff16609d54106138e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a160205260409020548114613966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b6139798267ffffffffffffffff16611aea565b6139df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a260205260409020600101544210613b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610c1a565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bb99190615e0e565b341015613c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610c1a565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051613d8e91815260200190565b60405180910390a35f609d546001613da69190615d6c565b90505b609e548111613dfe578267ffffffffffffffff168114613dec576099545f82815260a2602052604081206001018054909190613de6908490615d6c565b90915550505b80613df681615e46565b915050613da9565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff16158015613e4e57505f5460ff8083169116105b613eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610c1a565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122a0565b335f90815260a5602052604081205490819003614084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610c1a565b335f90815260a5602052604081205561409d828261534b565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516140e591815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615801590611b125750505f90815260a46020526040902060030154610100900460ff161590565b6141506142b9565b5f8111801561416157506098548114155b6141c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610c1a565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016122a0565b61420d6142b9565b73ffffffffffffffffffffffffffffffffffffffff81166142b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c1a565b61365981614f30565b60335473ffffffffffffffffffffffffffffffffffffffff16331461262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c1a565b5f805f61434785856154f7565b90505f8160ff165f036143685761435e8686615581565b90945090506143df565b8160ff1660010361437d5761435e8686615604565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610c1a565b808420925050509250929050565b60655460ff161561262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610c1a565b805f03614465575050565b8082035f5b8281101561451e5761010081840381111561448457508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b1580156144f4575f80fd5b505af1158015614506573d5f803e3d5ffd5b5050505061010083019250506101008101905061446a565b50505050565b6145316020850185615e7d565b60ff16158061454f57506145486020850185615e7d565b60ff166001145b6145b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610c1a565b6080840135614620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610c1a565b60a084013561468b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610c1a565b5f8061469d6118496020880188615dad565b915091505f6146b0836001015160c01c90565b90505f60a1816146c1846001615d6c565b81526020019081526020015f205414614736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610c1a565b609e5481146147a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610c1a565b5f81815260a160205260409020548214614817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610c1a565b5f81815260ab6020526040902054608088013514614891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610c1a565b5f6148a0846011015160c01c90565b90505f6148cc6148b660608b0160408c01615e9d565b6148c660808c0160608d01615e25565b84615671565b90506148de60808a0160608b01615e25565b6001939093015f81815260ad6020526040902054909361ffff169290920191806149c9578615614996575f49614996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f626c6f62207265717569726564207768656e206e6f2073746f7265642068617360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b5f49156149a4575f496149c6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b60f96149d860208c018c615e7d565b60ff166001036149e757506101015b604080518281019091529650614a0c87614a0460208e018e615e7d565b60ff166156b5565b60c085901b6001880152614a3a87614a2a60808e0160608f01615e25565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b01356099880152614a9e87614a7f60208d018d615dad565b604051614a8d929190615eb6565b604051809103902060b99190910152565b60d987018690526001614ab460208d018d615e7d565b60ff1610614ae657614ae687614ad060608e0160408f01615e9d565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff1615614b4f5760a7545f90815260a460205260409020600201546099544291614b4291615d6c565b614b4c9190615d7f565b90505b60405180608001604052804281526020018260985442614b6f9190615d6c565b614b799190615d6c565b81526020018d6040016020810190614b919190615e9d565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508b3590614c1890614c12908e018e615dad565b5f6156bc565b5f614c2660408f018f615dad565b6040518663ffffffff1660e01b8152600401614c46959493929190615f0c565b602060405180830381865afa158015614c61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c859190615d92565b614d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b80614dbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610c1a565b5f614dcc846001015160c01c90565b90505f614dda856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000614e09876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614ed8885160f81c90565b858888866040518663ffffffff1660e01b8152600401614efc959493929190615f8c565b5f6040518083038186803b158015614f12575f80fd5b505afa158015614f24573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661503c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b61262f615710565b5f54610100900460ff166150da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b61262f6157d0565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015615173573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151979190615e0e565b5f86815260a460205260409020600101549091506151b6908290615d6c565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190615202908490615d6c565b9091555050604051615215908490615fbd565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906152899084615fe9565b6152939190616000565b905061529f8183615d7f565b60aa5f8282546152af9190615d6c565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a56020526040812080548392906152e8908490615d6c565b90915550506040516152fb908490615fbd565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015615417575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146153a7576040519150601f19603f3d011682016040523d82523d5f602084013e6153ac565b606091505b5050905080611e76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610c1a565b5050565b6154236143ed565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586154763390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6154a861586f565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615476565b5f8161555f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610c1a565b82825f81811061557157615571616038565b919091013560f81c949350505050565b5f8160f98110156155ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610c1a565b6040519150808483378082016040529250929050565b5f8161010181146155ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610c1a565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016156a68161ffff8716866158db565b82900390912095945050505050565b8082535050565b60605f808080806156cf888a018a616152565b95509550955095509550508187106156ed5794506157099350505050565b838710615701578295505050505050615709565b509293505050505b9392505050565b5f54610100900460ff166157a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b61262f33614f30565b60655460ff1661262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610c1a565b5f825f036158ea575082615709565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b848110156159b1576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061599c9190615e0e565b87525060209095019460019384019301615905565b5093949350505050565b5f602082840312156159cb575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146159f5575f80fd5b919050565b5f60208284031215615a0a575f80fd5b615709826159d2565b5f8083601f840112615a23575f80fd5b50813567ffffffffffffffff811115615a3a575f80fd5b602083019150836020828501011115615a51575f80fd5b9250929050565b5f805f60408486031215615a6a575f80fd5b833567ffffffffffffffff811115615a80575f80fd5b615a8c86828701615a13565b909790965060209590950135949350505050565b5f8060208385031215615ab1575f80fd5b823567ffffffffffffffff811115615ac7575f80fd5b615ad385828601615a13565b90969095509350505050565b5f60e08284031215615aef575f80fd5b50919050565b5f60608284031215615aef575f80fd5b5f8060408385031215615b16575f80fd5b823567ffffffffffffffff80821115615b2d575f80fd5b615b3986838701615adf565b93506020850135915080821115615b4e575f80fd5b50615b5b85828601615af5565b9150509250929050565b5f805f805f8060808789031215615b7a575f80fd5b863567ffffffffffffffff80821115615b91575f80fd5b615b9d8a838b01615adf565b97506020890135915080821115615bb2575f80fd5b615bbe8a838b01615af5565b96506040890135915080821115615bd3575f80fd5b615bdf8a838b01615a13565b90965094506060890135915080821115615bf7575f80fd5b50615c0489828a01615a13565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615c2b575f80fd5b615c34876159d2565b9550615c42602088016159d2565b9450615c50604088016159d2565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615c84575f80fd5b843567ffffffffffffffff80821115615c9b575f80fd5b615ca788838901615a13565b90965094506020870135915080821115615cbf575f80fd5b50615ccc87828801615a13565b95989497509550505050565b8015158114613659575f80fd5b5f60208284031215615cf5575f80fd5b813561570981615cd8565b803567ffffffffffffffff811681146159f5575f80fd5b5f8060408385031215615d28575f80fd5b615d3183615d00565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611b1257611b12615d3f565b81810381811115611b1257611b12615d3f565b5f60208284031215615da2575f80fd5b815161570981615cd8565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615de0575f80fd5b83018035915067ffffffffffffffff821115615dfa575f80fd5b602001915036819003821315615a51575f80fd5b5f60208284031215615e1e575f80fd5b5051919050565b5f60208284031215615e35575f80fd5b813561ffff81168114615709575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e7657615e76615d3f565b5060010190565b5f60208284031215615e8d575f80fd5b813560ff81168114615709575f80fd5b5f60208284031215615ead575f80fd5b61570982615d00565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615f6357845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615f31565b50508760408601528481036060860152615f7e818789615ec5565b9a9950505050505050505050565b858152846020820152608060408201525f615fab608083018587615ec5565b90508260608301529695505050505050565b5f82515f5b81811015615fdc5760208186018101518583015201615fc2565b505f920191825250919050565b8082028115828204841417611b1257611b12615d3f565b5f82616033577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126160a1575f80fd5b8135602067ffffffffffffffff808311156160be576160be616065565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561610157616101616065565b6040529384526020818701810194908101925087851115616120575f80fd5b6020870191505b8482101561614757616138826159d2565b83529183019190830190616127565b979650505050505050565b5f805f805f8060c08789031215616167575f80fd5b86359550602087013567ffffffffffffffff80821115616185575f80fd5b6161918a838b01616092565b96506040890135955060608901359150808211156161ad575f80fd5b6161b98a838b01616092565b94506080890135935060a08901359150808211156161d5575f80fd5b506161e289828a01616092565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610353575f3560e01c8063728cdbca116101bd578063b8d0a1b0116100f2578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610b1f578063e3fff1dd14610b34578063f2fde38b14610b53578063fb1e8b0414610b72575f80fd5b8063d8dc99d214610abf578063ddd8a3dc14610ad4578063de8b303514610b00575f80fd5b8063cd4edc69116100cd578063cd4edc6914610a59578063ce5db8d614610a6c578063cf9a674514610a81578063d279c19114610aa0575f80fd5b8063b8d0a1b0146109fc578063bedb86fb14610a1b578063c555389214610a3a575f80fd5b8063a479265d1161015d578063b31a77d311610138578063b31a77d31461098a578063b34844251461099f578063b35dac4e146109be578063b3e0a509146109dd575f80fd5b8063a479265d1461092b578063a4f209b014610940578063abc8d68d1461095f575f80fd5b80638f1d3776116101985780638f1d3776146107e3578063910129d4146108ad57806397fc007c146108de578063a415d8dc146108fd575f80fd5b8063728cdbca1461078157806388b1ea09146107a05780638da5cb5b146107b9575f80fd5b80632a213ba1116102935780635c975abb11610233578063612672901161020e578063612672901461070457806368589dfa146107235780636c578c1d1461074e578063715018a61461076d575f80fd5b80635c975abb146106415780635ef7a94a146106585780635f77cf1d146106b8575f80fd5b80633e001b661161026e5780633e001b66146105db578063428868b5146105f05780634e8f1d671461060357806357e0af6c14610622575f80fd5b80632a213ba1146105335780632b7ac3f31461055e5780633b70c18a146105af575f80fd5b806313361101116102fe5780631e8825be116102d95780631e8825be1461049f57806321e2f9e0146104be5780632362f03e146104dd5780632571098d14610508575f80fd5b8063133611011461043b57806318463fb01461045a57806318af3b2b1461046f575f80fd5b806310d445831161032e57806310d44583146103e5578063116a1f4214610404578063121dcd5014610426575f80fd5b806304d772151461035e578063059def61146103a15780630ceb6780146103c4575f80fd5b3661035a57005b5f80fd5b348015610369575f80fd5b5061038c610378366004615b74565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ac575f80fd5b506103b6609d5481565b604051908152602001610398565b3480156103cf575f80fd5b506103e36103de366004615bb3565b610b87565b005b3480156103f0575f80fd5b506103e36103ff366004615c11565b610cab565b34801561040f575f80fd5b5061038c61041e366004615b74565b609d54101590565b348015610431575f80fd5b506103b6609e5481565b348015610446575f80fd5b506103e3610455366004615c59565b611097565b348015610465575f80fd5b506103b660a75481565b34801561047a575f80fd5b5061038c610489366004615b74565b5f90815260a26020526040902060010154421090565b3480156104aa575f80fd5b506103e36104b9366004615cbe565b6116b6565b3480156104c9575f80fd5b5061038c6104d8366004615b74565b611b64565b3480156104e8575f80fd5b506103b66104f7366004615b74565b60a16020525f908152604090205481565b348015610513575f80fd5b506103b6610522366004615b74565b60a06020525f908152604090205481565b34801561053e575f80fd5b506103b661054d366004615b74565b60ad6020525f908152604090205481565b348015610569575f80fd5b50609c5461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610398565b3480156105ba575f80fd5b50609b5461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105e6575f80fd5b506103b660aa5481565b6103e36105fe366004615cbe565b611b92565b34801561060e575f80fd5b506103e361061d366004615d1e565b611fee565b34801561062d575f80fd5b506103e361063c366004615b74565b612478565b34801561064c575f80fd5b5060655460ff1661038c565b348015610663575f80fd5b50610698610672366004615b74565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610398565b3480156106c3575f80fd5b506106eb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610398565b34801561070f575f80fd5b506103e361071e366004615b74565b61253d565b34801561072e575f80fd5b506103b661073d366004615b74565b60ab6020525f908152604090205481565b348015610759575f80fd5b506103e3610768366004615bb3565b6127a0565b348015610778575f80fd5b506103e36128af565b34801561078c575f80fd5b506103e361079b366004615dcf565b6128c2565b3480156107ab575f80fd5b5060a65461038c9060ff1681565b3480156107c4575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661058a565b3480156107ee575f80fd5b5061085c6107fd366004615b74565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610398565b3480156108b8575f80fd5b5061038c6108c7366004615b74565b5f90815260a4602052604090206003015460ff1690565b3480156108e9575f80fd5b506103e36108f8366004615bb3565b612c8b565b348015610908575f80fd5b5061038c610917366004615bb3565b609f6020525f908152604090205460ff1681565b348015610936575f80fd5b506103b660995481565b34801561094b575f80fd5b506103e361095a366004615b74565b612daf565b34801561096a575f80fd5b506103b6610979366004615bb3565b60a56020525f908152604090205481565b348015610995575f80fd5b506103b660a85481565b3480156109aa575f80fd5b506103e36109b9366004615e2a565b612e79565b3480156109c9575f80fd5b506103e36109d8366004615bb3565b613258565b3480156109e8575f80fd5b506103e36109f7366004615c59565b6132be565b348015610a07575f80fd5b506103e3610a16366004615e2a565b6136b7565b348015610a26575f80fd5b506103e3610a35366004615e9e565b61375a565b348015610a45575f80fd5b506103e3610a54366004615b74565b6138ed565b6103e3610a67366004615ed0565b6139aa565b348015610a77575f80fd5b506103b660985481565b348015610a8c575f80fd5b506103e3610a9b366004615b74565b6140bf565b348015610aab575f80fd5b506103e3610aba366004615bb3565b61429c565b348015610aca575f80fd5b506103b660ac5481565b348015610adf575f80fd5b5060975461058a9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610b0b575f80fd5b5061038c610b1a366004615b74565b614382565b348015610b2a575f80fd5b506103b6609a5481565b348015610b3f575f80fd5b506103e3610b4e366004615b74565b6143d9565b348015610b5e575f80fd5b506103e3610b6d366004615bb3565b614496565b348015610b7d575f80fd5b506103b660a95481565b610b8f61454a565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610cb361454a565b5f8111610d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610c1a565b5f80610d2885856145cb565b915091505f610d3b836001015160c01c90565b5f81815260a160205260409020549091508214610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b5f60a181610dc28785615f25565b81526020019081526020015f205414610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b609d548111610eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b610ef8600182615f38565b609e555b831561108f57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610f4481614382565b15610fca575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f9c908490615f25565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590611047575060a85481145b15611051575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610efc575b505050505050565b60a85415611101576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610c1a565b61110961467e565b5f8061111584846145cb565b915091505f611128836001015160c01c90565b5f81815260a1602052604090205490915082146111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b6111aa81611b64565b611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610c1a565b61121981614382565b15611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610c1a565b5f81815260a4602052604090206003015460ff16156112fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610c1a565b5f81815260a26020526040902060010154421015611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610c1a565b605983015160a05f611388600185615f38565b81526020019081526020015f2054146113fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610c1a565b5f81815260a0602052604090205415611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610c1a565b80609d54600101146114e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610c1a565b609d819055600160a35f6114f5866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a06020526040902055611562611555846011015160c01c90565b600985015160c01c6146eb565b60a25f611570600184615f38565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906115a99084615f38565b81526020019081526020015f205f905560ad5f6001836115c99190615f38565b81526020019081526020015f205f905560a45f6001836115e99190615f38565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611692866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561173c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117609190615f4b565b6117c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b60a85415611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610c1a565b61183861467e565b5f49156118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f636f6d6d69745374617465206d757374206e6f7420636172727920626c6f62006044820152606401610c1a565b5f6118b76118b26020850185615f66565b6145cb565b5090505f6118c9826001015160c01c90565b6118d4906001615f25565b5f81815260ad6020526040902054909150611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f6e6f2073746f72656420626c6f62206861736820666f7220746869732062617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa1580156119e2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a069190615fc7565b611a109190615f25565b1015611a92575f611a276080860160608701615fde565b61ffff1611611a92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b6097545f9073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611b1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b3e9190615fc7565b9050611b5d85858360ad5f8781526020019081526020015f20546147b5565b5050505050565b5f81815260a2602052604081205415801590611b8c57505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611c18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3c9190615f4b565b611ca2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b60a85415611d0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610c1a565b611d1461467e565b5f611d256118b26020850185615f66565b5090505f611d37826001015160c01c90565b611d42906001615f25565b5f81815260ad602052604090205490915015611de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f636f6d6d69744261746368207265717569726573206e6f2073746f726564206260448201527f6c6f6220686173680000000000000000000000000000000000000000000000006064820152608401610c1a565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611e51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e759190615fc7565b611e7f9190615f25565b1015611f01575f611e966080860160608701615fde565b61ffff1611611f01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b6097545f9073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611f89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fad9190615fc7565b90505f804915611fbe575f49611fe0565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905061108f868684846147b5565b60a85415612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610c1a565b61206061467e565b60ac54609e545f90815260a26020526040812054909142916120829190615f25565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121189190615fc7565b6121229190615f25565b109050811580156121305750805b156121b1575f61214660808a0160608b01615fde565b61ffff16116121b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610c1a565b81806121ba5750805b612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610c1a565b5f6122316118b260208b018b615f66565b5090505f612243826001015160c01c90565b61224e906001615f25565b5f81815260ad60205260408120549192509015612308575f49156122f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f6d757374206e6f7420636172727920626c6f62207768656e207573696e67207360448201527f746f72656420626c6f62206861736800000000000000000000000000000000006064820152608401610c1a565b505f81815260ad602052604090205461233b565b5f4915612316575f49612338565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505b6123478b8b5f846147b5565b5f806123538b8b6145cb565b915091505f612366836001015160c01c90565b905080609e54146123d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610c1a565b5f81815260a160205260409020548214612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b5f81815260a26020526040902042600190910155612468838b8b614f0d565b5050505050505050505050505050565b61248061454a565b5f8111801561249157506099548114155b6124f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610c1a565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561255d57505f5460ff8083169116105b6125e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556126245f5460ff1690565b60ff16600214612690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610c1a565b8161271d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610c1a565b609e545f90815260ab602052604090205461274657609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612531565b6127a861454a565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610c1a565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610ca0565b6128b761454a565b6128c05f6150e7565b565b5f54610100900460ff16158080156128e057505f54600160ff909116105b806128f95750303b1580156128f957505f5460ff166001145b612985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156129e1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612a18575073ffffffffffffffffffffffffffffffffffffffff8516155b15612a4f576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716612acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610c1a565b612ad461515d565b612adc6151fb565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015612c82575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612c9361454a565b73ffffffffffffffffffffffffffffffffffffffff811615801590612cd35750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612d39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610c1a565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612db761454a565b5f81118015612dc7575060648111155b8015612dd5575060a9548114155b612e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610c1a565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101612531565b60a85415612ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610c1a565b612eeb61467e565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612f71573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f959190615f4b565b612ffb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610c1a565b5f8061300786866145cb565b915091505f61301a836001015160c01c90565b5f81815260a160205260409020549091508214613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b61309c81614382565b613102576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610c1a565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161317991615f25565b1161320d575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261320891839190615299565b612c82565b613218838686614f0d565b612c8281336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061541c565b61326061454a565b60aa80545f9091556132728282615502565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101612531565b6132c661454a565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610c1a565b5f8061336384846145cb565b915091505f613376836001015160c01c90565b905080156133e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610c1a565b5f6133ec846079015190565b905080613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610c1a565b600984015160c01c156134c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610c1a565b5f6134d0856019015190565b03613537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610c1a565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014613563856039015190565b146135ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610c1a565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a28652848720935184559151600184015551600283015551600390910155603987015160ad83528184205560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b5f806136c386866145cb565b915091505f6136d6836001015160c01c90565b5f81815260a16020526040902054909150821461374f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b612c82838686614f0d565b61376261454a565b80156138bb576137706155d4565b60a65460ff161561386d5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a590925282208054919290916137d1908490615f25565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b6138c3615659565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613890565b50565b6138f561454a565b5f81118015613906575060ac548114155b61396c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610c1a565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101612531565b335f908152609f602052604090205460ff16613a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6f6e6c79206368616c6c656e67657220616c6c6f7765640000000000000000006044820152606401610c1a565b60a85415613a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70656e64696e67207265766572742072657175657374000000000000000000006044820152606401610c1a565b613a9461467e565b60a65460ff1615613b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610c1a565b8167ffffffffffffffff16609d5410613b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a160205260409020548114613bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610c1a565b613c0a8267ffffffffffffffff16611b64565b613c70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613d12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610c1a565b67ffffffffffffffff82165f90815260a260205260409020600101544210613dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610c1a565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e4a9190615fc7565b341015613eb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610c1a565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161401f91815260200190565b60405180910390a35f609d5460016140379190615f25565b90505b609e54811161408f578267ffffffffffffffff16811461407d576099545f82815260a2602052604081206001018054909190614077908490615f25565b90915550505b8061408781615fff565b91505061403a565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff161580156140df57505f5460ff8083169116105b61416b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c1a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003614204576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610c1a565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612531565b335f90815260a5602052604081205490819003614315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610c1a565b335f90815260a5602052604081205561432e8282615502565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161437691815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615801590611b8c5750505f90815260a46020526040902060030154610100900460ff161590565b6143e161454a565b5f811180156143f257506098548114155b614458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610c1a565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101612531565b61449e61454a565b73ffffffffffffffffffffffffffffffffffffffff8116614541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c1a565b6138ea816150e7565b60335473ffffffffffffffffffffffffffffffffffffffff1633146128c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c1a565b5f805f6145d885856156b0565b90505f8160ff165f036145f9576145ef868661573a565b9094509050614670565b8160ff1660010361460e576145ef86866157bd565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610c1a565b808420925050509250929050565b60655460ff16156128c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610c1a565b805f036146f6575050565b8082035f5b828110156147af5761010081840381111561471557508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015614785575f80fd5b505af1158015614797573d5f803e3d5ffd5b505050506101008301925050610100810190506146fb565b50505050565b6147c26020850185616036565b60ff1615806147e057506147d96020850185616036565b60ff166001145b614846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610c1a565b60808401356148b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610c1a565b60a084013561491c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610c1a565b5f8061492e6118b26020880188615f66565b915091505f614941836001015160c01c90565b90505f60a181614952846001615f25565b81526020019081526020015f2054146149c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610c1a565b609e548114614a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610c1a565b5f81815260a160205260409020548214614aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610c1a565b5f81815260ab6020526040902054608088013514614b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610c1a565b5f614b31846011015160c01c90565b90505f614b5d614b4760608b0160408c01616056565b614b5760808c0160608d01615fde565b8461582a565b9050614b6f60808a0160608b01615fde565b6001939093019261ffff1691909101908560f9614b8f60208c018c616036565b60ff16600103614b9e57506101015b604080518281019091529650614bc387614bbb60208e018e616036565b60ff1661586e565b60c085901b6001880152614bf187614be160808e0160608f01615fde565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808c0135605989015260a08c013560798901528b01356099880152614c5587614c3660208d018d615f66565b604051614c4492919061606f565b604051809103902060b99190910152565b60d987018690526001614c6b60208d018d616036565b60ff1610614c9d57614c9d87614c8760608e0160408f01616056565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab815282822060a08f0135905560ad905290812083905560a65460ff1615614d065760a7545f90815260a460205260409020600201546099544291614cf991615f25565b614d039190615f38565b90505b60405180608001604052804281526020018260985442614d269190615f25565b614d309190615f25565b81526020018d6040016020810190614d489190616056565b67ffffffffffffffff16815260209081018c90525f88815260a2825260409081902083518155838301516001820155908301516002820155606090920151600390920191909155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508b3590614dcf90614dc9908e018e615f66565b5f615875565b5f614ddd60408f018f615f66565b6040518663ffffffff1660e01b8152600401614dfd9594939291906160c5565b602060405180830381865afa158015614e18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e3c9190615f4b565b614ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610c1a565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a350505050505050505050565b80614f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610c1a565b5f614f83846001015160c01c90565b90505f614f91856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000614fc0876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a84861508f885160f81c90565b858888866040518663ffffffff1660e01b81526004016150b3959493929190616145565b5f6040518083038186803b1580156150c9575f80fd5b505afa1580156150db573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166151f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b6128c06158c9565b5f54610100900460ff16615291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b6128c0615989565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af115801561532a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061534e9190615fc7565b5f86815260a4602052604090206001015490915061536d908290615f25565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a5909152812080549091906153b9908490615f25565b90915550506040516153cc908490616176565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a95490919060649061544090846161a2565b61544a91906161b9565b90506154568183615f38565b60aa5f8282546154669190615f25565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a560205260408120805483929061549f908490615f25565b90915550506040516154b2908490616176565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156155d0575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f811461555e576040519150601f19603f3d011682016040523d82523d5f602084013e615563565b606091505b50509050806155ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610c1a565b505b5050565b6155dc61467e565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861562f3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b615661615a28565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361562f565b5f81615718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610c1a565b82825f81811061572a5761572a6161f1565b919091013560f81c949350505050565b5f8160f98110156157a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610c1a565b6040519150808483378082016040529250929050565b5f8161010181146157a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610c1a565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161585f8161ffff871686615a94565b82900390912095945050505050565b8082535050565b60605f80808080615888888a018a61630b565b95509550955095509550508187106158a65794506158c29350505050565b8387106158ba5782955050505050506158c2565b509293505050505b9392505050565b5f54610100900460ff1661595f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c1a565b6128c0336150e7565b60655460ff166128c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610c1a565b5f825f03615aa35750826158c2565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b84811015615b6a576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615b31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615b559190615fc7565b87525060209095019460019384019301615abe565b5093949350505050565b5f60208284031215615b84575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114615bae575f80fd5b919050565b5f60208284031215615bc3575f80fd5b6158c282615b8b565b5f8083601f840112615bdc575f80fd5b50813567ffffffffffffffff811115615bf3575f80fd5b602083019150836020828501011115615c0a575f80fd5b9250929050565b5f805f60408486031215615c23575f80fd5b833567ffffffffffffffff811115615c39575f80fd5b615c4586828701615bcc565b909790965060209590950135949350505050565b5f8060208385031215615c6a575f80fd5b823567ffffffffffffffff811115615c80575f80fd5b615c8c85828601615bcc565b90969095509350505050565b5f60e08284031215615ca8575f80fd5b50919050565b5f60608284031215615ca8575f80fd5b5f8060408385031215615ccf575f80fd5b823567ffffffffffffffff80821115615ce6575f80fd5b615cf286838701615c98565b93506020850135915080821115615d07575f80fd5b50615d1485828601615cae565b9150509250929050565b5f805f805f8060808789031215615d33575f80fd5b863567ffffffffffffffff80821115615d4a575f80fd5b615d568a838b01615c98565b97506020890135915080821115615d6b575f80fd5b615d778a838b01615cae565b96506040890135915080821115615d8c575f80fd5b615d988a838b01615bcc565b90965094506060890135915080821115615db0575f80fd5b50615dbd89828a01615bcc565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615de4575f80fd5b615ded87615b8b565b9550615dfb60208801615b8b565b9450615e0960408801615b8b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615e3d575f80fd5b843567ffffffffffffffff80821115615e54575f80fd5b615e6088838901615bcc565b90965094506020870135915080821115615e78575f80fd5b50615e8587828801615bcc565b95989497509550505050565b80151581146138ea575f80fd5b5f60208284031215615eae575f80fd5b81356158c281615e91565b803567ffffffffffffffff81168114615bae575f80fd5b5f8060408385031215615ee1575f80fd5b615eea83615eb9565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611b8c57611b8c615ef8565b81810381811115611b8c57611b8c615ef8565b5f60208284031215615f5b575f80fd5b81516158c281615e91565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615f99575f80fd5b83018035915067ffffffffffffffff821115615fb3575f80fd5b602001915036819003821315615c0a575f80fd5b5f60208284031215615fd7575f80fd5b5051919050565b5f60208284031215615fee575f80fd5b813561ffff811681146158c2575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361602f5761602f615ef8565b5060010190565b5f60208284031215616046575f80fd5b813560ff811681146158c2575f80fd5b5f60208284031215616066575f80fd5b6158c282615eb9565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561611c57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016160ea565b5050876040860152848103606086015261613781878961607e565b9a9950505050505050505050565b858152846020820152608060408201525f61616460808301858761607e565b90508260608301529695505050505050565b5f82515f5b81811015616195576020818601810151858301520161617b565b505f920191825250919050565b8082028115828204841417611b8c57611b8c615ef8565b5f826161ec577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261625a575f80fd5b8135602067ffffffffffffffff808311156162775761627761621e565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156162ba576162ba61621e565b60405293845260208187018101949081019250878511156162d9575f80fd5b6020870191505b84821015616300576162f182615b8b565b835291830191908301906162e0565b979650505050505050565b5f805f805f8060c08789031215616320575f80fd5b86359550602087013567ffffffffffffffff8082111561633e575f80fd5b61634a8a838b0161624b565b9650604089013595506060890135915080821115616366575f80fd5b6163728a838b0161624b565b94506080890135935060a089013591508082111561638e575f80fd5b5061639b89828a0161624b565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index 5ae511a25..d361575f7 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -15,6 +15,25 @@ import {IL1Staking} from "../staking/IL1Staking.sol"; /// @title Rollup /// @notice This contract maintains data for the Morph rollup. +/// +/// Batch commit has three entry points and blob behavior. +/// +/// Truth table (stored = batchBlobVersionedHashes[batchIndex] != 0, blob_tx = blobhash(0) != 0): +/// +----------------------+--------+---------+--------+--------------------------------------------------+ +/// | Entry | stored | blob_tx | Result | Hash used / Revert message | +/// +----------------------+--------+---------+--------+--------------------------------------------------+ +/// | commitBatch | 0 | 0 | OK | ZERO_VERSIONED_HASH (no blob in tx) | +/// | commitBatch | 0 | 1 | OK | blobhash(0) | +/// | commitBatch | 1 | 0 | REVERT | "commitBatch requires no stored blob hash" (entry) | +/// | commitBatch | 1 | 1 | REVERT | "commitBatch requires no stored blob hash" (entry) | +/// | commitState | 0 | * | REVERT | "no stored blob hash for this batch" | +/// | commitState | 1 | 0 | OK | stored | +/// | commitState | 1 | 1 | REVERT | "commitState must not carry blob" (entry) | +/// | commitBatchWithProof | 0 | 0 | OK | ZERO_VERSIONED_HASH | +/// | commitBatchWithProof | 0 | 1 | OK | blobhash(0) | +/// | commitBatchWithProof | 1 | 0 | OK | stored | +/// | commitBatchWithProof | 1 | 1 | REVERT | "must not carry blob when using stored blob hash" | +/// +----------------------+--------+---------+--------+--------------------------------------------------+ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /************* * Constants * @@ -120,13 +139,13 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /// @notice Only challenger allowed. modifier onlyChallenger() { - require(isChallenger[_msgSender()], "caller challenger allowed"); + require(isChallenger[_msgSender()], "only challenger allowed"); _; } /// @notice Modifier to ensure that there is no pending revert request. modifier nonReqRevert() { - require(revertReqIndex == 0, "need revert"); + require(revertReqIndex == 0, "pending revert request"); _; } @@ -237,13 +256,18 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput ) external payable override onlyActiveStaker nonReqRevert whenNotPaused { + // check if the next batch has a stored blob hash + (uint256 _batchPtr, ) = _loadBatchHeader(batchDataInput.parentBatchHeader); + uint256 _nextBatchIndex = BatchHeaderCodecV0.getBatchIndex(_batchPtr) + 1; + require(batchBlobVersionedHashes[_nextBatchIndex] == bytes32(0), "commitBatch requires no stored blob hash"); if ( IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeriod < block.timestamp ) { require(batchDataInput.numL1Messages > 0, "l1msg delay"); } uint256 submitterBitmap = IL1Staking(l1StakingContract).getStakerBitmap(_msgSender()); - _commitBatchWithBatchData(batchDataInput, batchSignatureInput, submitterBitmap, true); + bytes32 _blobVersionedHash = (blobhash(0) == bytes32(0)) ? ZERO_VERSIONED_HASH : blobhash(0); + _commitBatchWithBatchData(batchDataInput, batchSignatureInput, submitterBitmap, _blobVersionedHash); } /// @inheritdoc IRollup @@ -252,7 +276,8 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput ) external override onlyActiveStaker nonReqRevert whenNotPaused { - (uint256 _batchPtr,) = _loadBatchHeader(batchDataInput.parentBatchHeader); + require(blobhash(0) == bytes32(0), "commitState must not carry blob"); + (uint256 _batchPtr, ) = _loadBatchHeader(batchDataInput.parentBatchHeader); uint256 _nextBatchIndex = BatchHeaderCodecV0.getBatchIndex(_batchPtr) + 1; require(batchBlobVersionedHashes[_nextBatchIndex] != bytes32(0), "no stored blob hash for this batch"); if ( @@ -261,14 +286,19 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { require(batchDataInput.numL1Messages > 0, "l1msg delay"); } uint256 submitterBitmap = IL1Staking(l1StakingContract).getStakerBitmap(_msgSender()); - _commitBatchWithBatchData(batchDataInput, batchSignatureInput, submitterBitmap, false); + _commitBatchWithBatchData( + batchDataInput, + batchSignatureInput, + submitterBitmap, + batchBlobVersionedHashes[_nextBatchIndex] + ); } function _commitBatchWithBatchData( BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput, uint256 submitterBitmap, - bool requireBlobWhenNoStoredHash + bytes32 blobVersionedHash ) internal { require(batchDataInput.version == 0 || batchDataInput.version == 1, "invalid version"); require(batchDataInput.prevStateRoot != bytes32(0), "previous state root is zero"); @@ -307,14 +337,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { assembly { _batchIndex := add(_batchIndex, 1) // increase batch index } - // Prefer stored blob hash; when empty: commitBatch requires blob tx, commitBatchWithProof/commitState allow no blob - bytes32 _blobVersionedHash = batchBlobVersionedHashes[_batchIndex]; - if (_blobVersionedHash == bytes32(0) ) { - if (requireBlobWhenNoStoredHash) { - require(blobhash(0) != bytes32(0), "blob required when no stored hash"); - } - _blobVersionedHash = (blobhash(0) == bytes32(0)) ? ZERO_VERSIONED_HASH : blobhash(0); - } + bytes32 _blobVersionedHash = blobVersionedHash; { uint256 _headerLength = BatchHeaderCodecV0.BATCH_HEADER_LENGTH; @@ -399,8 +422,17 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { require(batchDataInput.numL1Messages > 0, "l1msg delay"); } require(rollupDelay || l1MsgQueueDelayed, "invalid timing"); - - _commitBatchWithBatchData(batchDataInput, batchSignatureInput, 0, false); + // check if the next batch has a stored blob hash + (uint256 _batchPtr, ) = _loadBatchHeader(batchDataInput.parentBatchHeader); + uint256 _nextBatchIndex = BatchHeaderCodecV0.getBatchIndex(_batchPtr) + 1; + bytes32 _blobVersionedHash = bytes32(0); + if (batchBlobVersionedHashes[_nextBatchIndex] != bytes32(0)) { + require(blobhash(0) == bytes32(0), "must not carry blob when using stored blob hash"); + _blobVersionedHash = batchBlobVersionedHashes[_nextBatchIndex]; + } else { + _blobVersionedHash = (blobhash(0) == bytes32(0)) ? ZERO_VERSIONED_HASH : blobhash(0); + } + _commitBatchWithBatchData(batchDataInput, batchSignatureInput, 0, _blobVersionedHash); // get batch data from batch header (uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader); diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index 999a9da2d..7a1df035d 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -16,9 +16,6 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { bytes public batchHeader0; bytes32 public batchHash0; IRollup.BatchSignatureInput public batchSignatureInput; - - // Slot constants for storage manipulation (from forge inspect Rollup storageLayout) - uint256 constant ROLLUP_DELAY_PERIOD_SLOT = 172; // slot for rollupDelayPeriod function setUp() public virtual override { super.setUp(); @@ -61,19 +58,7 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { // Set rollupDelayPeriod (e.g., 1 hour) - no prank needed for hevm.store hevm.store(address(rollup), bytes32(ROLLUP_DELAY_PERIOD_SLOT), bytes32(uint256(3600))); } - - /// @dev Helper to compute dataHash for a batch with no L1 messages - /// dataHash = keccak256(lastBlockNumber || numL1Messages) - function _computeDataHash(uint64 lastBlockNumber, uint16 numL1Messages) internal pure returns (bytes32) { - // Construct the data: 8 bytes lastBlockNumber + 2 bytes numL1Messages - bytes memory data = new bytes(10); - assembly { - mstore(add(data, 0x20), shl(192, lastBlockNumber)) // 8 bytes - mstore(add(data, 0x28), shl(240, numL1Messages)) // 2 bytes at offset 8 - } - return keccak256(data); - } - + /// @dev Helper to compute sequencerSetVerifyHash from sequencerSets function _getSequencerSetVerifyHash() internal view returns (bytes32) { return keccak256(batchSignatureInput.sequencerSets); @@ -760,7 +745,8 @@ contract RollupCommitBatchTest is L1MessageBaseTest { abi.encodeCall(IL1Staking.getStakerBitmap, (address(0))), abi.encode(2) ); - _setStoredBlobHash(1); + _setupDelayAndWarpForProof(); + _mockVerifierForProof(); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); emit IRollup.CommitBatch(1, bytes32(0xc1862b08d265f073817a8ce0d7cbb426c16d58a86b93464244ab1d027318642e)); @@ -773,7 +759,7 @@ contract RollupCommitBatchTest is L1MessageBaseTest { bytesData1, bytesData3 ); - rollup.commitBatch(batchDataInput, batchSignatureInput); + rollup.commitBatchWithProof(batchDataInput, batchSignatureInput, batchHeader1, hex"deadbeef"); hevm.stopPrank(); assertFalse(rollup.isBatchFinalized(1)); @@ -832,7 +818,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { abi.encodeCall(IL1Staking.getStakerBitmap, (address(0))), abi.encode(2) ); - _setStoredBlobHash(2); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); emit IRollup.CommitBatch(2, bytes32(0x772132c2e12f21bfc5f2792838e480830f2c1dd2be0f3207b159905a9f321038)); @@ -846,7 +831,7 @@ contract RollupCommitBatchTest is L1MessageBaseTest { bytesData1, bytesData4 ); - rollup.commitBatch(batchDataInput, batchSignatureInput); + rollup.commitBatchWithProof(batchDataInput, batchSignatureInput, batchHeader2, hex"deadbeef"); hevm.stopPrank(); assertFalse(rollup.isBatchFinalized(2)); @@ -990,18 +975,36 @@ contract RollupTest is L1MessageBaseTest { rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); - // commit batch with one chunk, no tx, correctly - _setStoredBlobHash(1); + // commit batch with one chunk, no tx, correctly (commitBatch requires blob when no stored hash; use commitBatchWithProof) + _setupDelayAndWarpForProof(); + _mockVerifierForProof(); + bytes32 dataHash1 = _computeDataHash(1, 0); + bytes memory batchHeader1ForProof = _createBatchHeaderV0ForProof( + 1, + 0, + 0, + dataHash1, + stateRoot, + stateRoot, + getTreeRoot(), + keccak256(batchSignatureInput.sequencerSets), + rollup.committedBatches(0) + ); hevm.startPrank(alice); batchDataInput = IRollup.BatchDataInput(0, batchHeader0, 1, 0, stateRoot, stateRoot, getTreeRoot()); hevm.deal(address(0), 10 ether); - rollup.commitBatch(batchDataInput, batchSignatureInput); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1ForProof, + hex"deadbeef" + ); hevm.stopPrank(); assertGt(uint256(rollup.committedBatches(1)), 0); - // batch is already committed, revert + // batch is already committed, revert (commitBatch also reverts with "commitBatch requires no stored blob hash" when slot is set) hevm.startPrank(alice); - hevm.expectRevert("batch already committed"); + hevm.expectRevert("commitBatch requires no stored blob hash"); batchDataInput = IRollup.BatchDataInput(0, batchHeader0, 1, 0, stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); @@ -1028,13 +1031,34 @@ contract RollupTest is L1MessageBaseTest { rollup.importGenesisBatch(batchHeader0); bytes32 batchHash0 = rollup.committedBatches(0); - // commit one batch - _setStoredBlobHash(1); + // commit one batch (use commitBatchWithProof: commitBatch requires no stored hash and blob tx) + _setupDelayAndWarpForProof(); + _mockMessageQueueNotDelayedForProof(); + _mockVerifierForProof(); + bytes32 dataHash1 = _computeDataHash(1, 0); + bytes memory batchHeader1ForProof = _createBatchHeaderV0ForProof( + 1, + 0, + 0, + dataHash1, + stateRoot, + stateRoot, + bytes32(uint256(4)), + keccak256(batchSignatureInput.sequencerSets), + batchHash0 + ); hevm.startPrank(alice); batchDataInput = IRollup.BatchDataInput(0, batchHeader0, 1, 0, stateRoot, stateRoot, bytes32(uint256(4))); - rollup.commitBatch(batchDataInput, batchSignatureInput); // first chunk with too many txs + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1ForProof, + hex"deadbeef" + ); hevm.stopPrank(); assertEq(rollup.committedBatches(1), 0x25c3e4fee90e53de960c1092746c431ab570eacf8513011902fa65f10c814541); + // warp again so second commitBatchWithProof passes rollupDelay (batchDataStore[1].originTimestamp + period < block.timestamp) + hevm.warp(block.timestamp + 3601); bytes memory batchHeader1 = new bytes(249); assembly { mstore(add(batchHeader1, 0x20), 0) // version @@ -1054,12 +1078,27 @@ contract RollupTest is L1MessageBaseTest { mstore(add(batchHeader1, add(0x20, 249)), 0) // bitmap0 } - // commit another batch - _setStoredBlobHash(2); + // commit another batch (commitBatchWithProof) + bytes32 dataHash2 = _computeDataHash(1, 0); + bytes memory batchHeader2ForProof = _createBatchHeaderV0ForProof( + 2, + 0, + 0, + dataHash2, + stateRoot, + stateRoot, + bytes32(uint256(4)), + keccak256(batchSignatureInput.sequencerSets), + rollup.committedBatches(1) + ); hevm.startPrank(alice); batchDataInput = IRollup.BatchDataInput(0, batchHeader1, 1, 0, stateRoot, stateRoot, bytes32(uint256(4))); - - rollup.commitBatch(batchDataInput, batchSignatureInput); // first chunk with too many txs + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader2ForProof, + hex"deadbeef" + ); hevm.stopPrank(); hevm.startPrank(multisig); diff --git a/contracts/contracts/test/base/L1MessageBase.t.sol b/contracts/contracts/test/base/L1MessageBase.t.sol index 76b716f34..d2fa9db4e 100644 --- a/contracts/contracts/test/base/L1MessageBase.t.sol +++ b/contracts/contracts/test/base/L1MessageBase.t.sol @@ -10,6 +10,7 @@ import {L1MessageQueueWithGasPriceOracle} from "../../l1/rollup/L1MessageQueueWi import {L1Staking} from "../../l1/staking/L1Staking.sol"; import {Rollup} from "../../l1/rollup/Rollup.sol"; import {IRollup} from "../../l1/rollup/IRollup.sol"; +import {BatchHeaderCodecV0} from "../../libraries/codec/BatchHeaderCodecV0.sol"; import {MockZkEvmVerifier} from "../../mock/MockZkEvmVerifier.sol"; contract L1MessageBaseTest is CommonTest { @@ -48,14 +49,79 @@ contract L1MessageBaseTest is CommonTest { // Rollup storage slot for batchBlobVersionedHashes (forge inspect Rollup storage-layout) uint256 internal constant BATCH_BLOB_VERSIONED_HASHES_SLOT = 173; + uint256 internal constant ROLLUP_DELAY_PERIOD_SLOT = 172; bytes32 internal constant ZERO_VERSIONED_HASH = 0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014; - /// @dev Sets batchBlobVersionedHashes[batchIndex] so commitBatch can succeed without a blob tx in tests. + /// @dev Sets batchBlobVersionedHashes[batchIndex] so commitState/commitBatchWithProof can use stored hash in tests. function _setStoredBlobHash(uint256 batchIndex) internal { bytes32 slot = keccak256(abi.encode(batchIndex, BATCH_BLOB_VERSIONED_HASHES_SLOT)); hevm.store(address(rollup), slot, ZERO_VERSIONED_HASH); } + /// @dev Data hash for batch when numL1Messages=0: keccak256(8 bytes lastBlockNumber || 2 bytes numL1Messages). + function _computeDataHash(uint64 lastBlockNumber, uint16 numL1Messages) internal pure returns (bytes32) { + bytes memory data = new bytes(10); + assembly { + mstore(add(data, 0x20), shl(192, lastBlockNumber)) + mstore(add(data, 0x28), shl(240, numL1Messages)) + } + return keccak256(data); + } + + /// @dev Setup rollup delay and warp so commitBatchWithProof timing passes. + function _setupDelayAndWarpForProof() internal { + hevm.store(address(rollup), bytes32(ROLLUP_DELAY_PERIOD_SLOT), bytes32(uint256(3600))); + hevm.warp(block.timestamp + 3601); + } + + /// @dev Mock L1 message queue so getFirstUnfinalizedMessageEnqueueTime is not delayed (avoids "l1msg delay" when rollupDelay is used). + function _mockMessageQueueNotDelayedForProof() internal { + hevm.mockCall( + address(l1MessageQueueWithGasPriceOracle), + abi.encodeWithSignature("getFirstUnfinalizedMessageEnqueueTime()"), + abi.encode(block.timestamp) + ); + } + + /// @dev Mock verifier for commitBatchWithProof. + function _mockVerifierForProof() internal { + hevm.mockCall( + rollup.verifier(), + abi.encodeWithSignature("verifyAggregateProof(uint256,uint256,bytes,bytes32)"), + abi.encode() + ); + } + + /// @dev Build V0 batch header for commitBatchWithProof (blob = ZERO_VERSIONED_HASH). + function _createBatchHeaderV0ForProof( + uint256 batchIndex, + uint64 l1MessagePopped, + uint64 totalL1MessagePopped, + bytes32 dataHash, + bytes32 prevStateRoot, + bytes32 postStateRoot, + bytes32 withdrawalRoot, + bytes32 sequencerSetVerifyHash, + bytes32 parentBatchHash + ) internal pure returns (bytes memory batchHeader) { + batchHeader = new bytes(BatchHeaderCodecV0.BATCH_HEADER_LENGTH); + bytes32 blobHash = ZERO_VERSIONED_HASH; + assembly { + let p := add(batchHeader, 0x20) + mstore(p, 0) + mstore(add(p, 1), shl(192, batchIndex)) + mstore(add(p, 9), shl(192, l1MessagePopped)) + mstore(add(p, 17), shl(192, totalL1MessagePopped)) + mstore(add(p, 25), dataHash) + mstore(add(p, 57), blobHash) + mstore(add(p, 89), prevStateRoot) + mstore(add(p, 121), postStateRoot) + mstore(add(p, 153), withdrawalRoot) + mstore(add(p, 185), sequencerSetVerifyHash) + mstore(add(p, 217), parentBatchHash) + } + } + function setUp() public virtual override { super.setUp(); hevm.startPrank(multisig); From 275416039c5d0b31ef9e22d817b74387f034b2c8 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Mon, 16 Mar 2026 14:39:41 +0800 Subject: [PATCH 5/5] clean unused code --- contracts/contracts/l1/rollup/Rollup.sol | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index d361575f7..027504664 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -15,24 +15,6 @@ import {IL1Staking} from "../staking/IL1Staking.sol"; /// @title Rollup /// @notice This contract maintains data for the Morph rollup. -/// -/// Batch commit has three entry points and blob behavior. -/// -/// Truth table (stored = batchBlobVersionedHashes[batchIndex] != 0, blob_tx = blobhash(0) != 0): -/// +----------------------+--------+---------+--------+--------------------------------------------------+ -/// | Entry | stored | blob_tx | Result | Hash used / Revert message | -/// +----------------------+--------+---------+--------+--------------------------------------------------+ -/// | commitBatch | 0 | 0 | OK | ZERO_VERSIONED_HASH (no blob in tx) | -/// | commitBatch | 0 | 1 | OK | blobhash(0) | -/// | commitBatch | 1 | 0 | REVERT | "commitBatch requires no stored blob hash" (entry) | -/// | commitBatch | 1 | 1 | REVERT | "commitBatch requires no stored blob hash" (entry) | -/// | commitState | 0 | * | REVERT | "no stored blob hash for this batch" | -/// | commitState | 1 | 0 | OK | stored | -/// | commitState | 1 | 1 | REVERT | "commitState must not carry blob" (entry) | -/// | commitBatchWithProof | 0 | 0 | OK | ZERO_VERSIONED_HASH | -/// | commitBatchWithProof | 0 | 1 | OK | blobhash(0) | -/// | commitBatchWithProof | 1 | 0 | OK | stored | -/// | commitBatchWithProof | 1 | 1 | REVERT | "must not carry blob when using stored blob hash" | /// +----------------------+--------+---------+--------+--------------------------------------------------+ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /*************