@mantleio/contracts
Version:
[Mantle] L1 and L2 smart contracts for Mantle
1,071 lines • 138 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Rollup",
"sourceName": "contracts/L1/fraud-proof/Rollup.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AssertionAlreadyResolved",
"type": "error"
},
{
"inputs": [],
"name": "AssertionOutOfRange",
"type": "error"
},
{
"inputs": [],
"name": "ChallengePeriodPending",
"type": "error"
},
{
"inputs": [],
"name": "ChallengedStaker",
"type": "error"
},
{
"inputs": [],
"name": "DifferentParent",
"type": "error"
},
{
"inputs": [],
"name": "EmptyAssertion",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker1Challenge",
"type": "address"
},
{
"internalType": "address",
"name": "staker2Challenge",
"type": "address"
}
],
"name": "InDifferentChallenge",
"type": "error"
},
{
"inputs": [],
"name": "InboxReadLimitExceeded",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientStake",
"type": "error"
},
{
"inputs": [],
"name": "InvalidParent",
"type": "error"
},
{
"inputs": [],
"name": "MinimumAssertionPeriodNotPassed",
"type": "error"
},
{
"inputs": [],
"name": "NoStaker",
"type": "error"
},
{
"inputs": [],
"name": "NoUnresolvedAssertion",
"type": "error"
},
{
"inputs": [],
"name": "NotAllStaked",
"type": "error"
},
{
"inputs": [],
"name": "NotInChallenge",
"type": "error"
},
{
"inputs": [],
"name": "NotStaked",
"type": "error"
},
{
"inputs": [],
"name": "ParentAssertionUnstaked",
"type": "error"
},
{
"inputs": [],
"name": "PreviousStateHash",
"type": "error"
},
{
"inputs": [],
"name": "RedundantInitialized",
"type": "error"
},
{
"inputs": [],
"name": "StakedOnUnconfirmedAssertion",
"type": "error"
},
{
"inputs": [],
"name": "StakerStakedOnTarget",
"type": "error"
},
{
"inputs": [],
"name": "StakersPresent",
"type": "error"
},
{
"inputs": [],
"name": "TransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "UnproposedAssertion",
"type": "error"
},
{
"inputs": [],
"name": "WrongOrder",
"type": "error"
},
{
"inputs": [],
"name": "ZeroAddress",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "challengeAddr",
"type": "address"
}
],
"name": "AssertionChallenged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "AssertionConfirmed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "asserterAddr",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "vmHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "inboxSize",
"type": "uint256"
}
],
"name": "AssertionCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "AssertionRejected",
"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": "stakerAddr",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "StakerStaked",
"type": "event"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toAddAddresses",
"type": "address[]"
}
],
"name": "addToOperatorWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toAddAddresses",
"type": "address[]"
}
],
"name": "addToStakerWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "advanceStake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "assertions",
"outputs": [
{
"internalType": "contract AssertionMap",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "baseStakeAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[2]",
"name": "players",
"type": "address[2]"
},
{
"internalType": "uint256[2]",
"name": "assertionIDs",
"type": "uint256[2]"
}
],
"name": "challengeAssertion",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "challengeCtx",
"outputs": [
{
"internalType": "bool",
"name": "completed",
"type": "bool"
},
{
"internalType": "address",
"name": "challengeAddress",
"type": "address"
},
{
"internalType": "address",
"name": "defenderAddress",
"type": "address"
},
{
"internalType": "address",
"name": "challengerAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "defenderAssertionID",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "challengerAssertionID",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "winner",
"type": "address"
},
{
"internalType": "address",
"name": "loser",
"type": "address"
}
],
"name": "completeChallenge",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "confirmFirstUnresolvedAssertion",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "confirmedInboxSize",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "vmHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "inboxSize",
"type": "uint256"
}
],
"name": "createAssertion",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "vmHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "inboxSize",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "_batch",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "_shouldStartAtElement",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_signature",
"type": "bytes"
}
],
"name": "createAssertionWithStateBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "currentRequiredStake",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "address",
"name": "_verifier",
"type": "address"
},
{
"internalType": "address",
"name": "_stakeToken",
"type": "address"
},
{
"internalType": "address",
"name": "_libAddressManager",
"type": "address"
},
{
"internalType": "address",
"name": "_assertionMap",
"type": "address"
},
{
"internalType": "uint256",
"name": "_minimumAssertionPeriod",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_baseStakeAmount",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "_initialVMhash",
"type": "bytes32"
},
{
"internalType": "address[]",
"name": "stakerWhitelists",
"type": "address[]"
},
{
"internalType": "address[]",
"name": "operatorWhitelists",
"type": "address[]"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "isStaked",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastConfirmedAssertionID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastCreatedAssertionID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastResolvedAssertionID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "libAddressManager",
"outputs": [
{
"internalType": "contract Lib_AddressManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "minimumAssertionPeriod",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "numStakers",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "operatorWhitelist",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "operatorslist",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "registers",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rejectFirstUnresolvedAssertion",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "batchIndex",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "batchRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "batchSize",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "prevTotalElements",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"internalType": "struct Lib_BVMCodec.ChainBatchHeader",
"name": "_batchHeader",
"type": "tuple"
}
],
"name": "rejectLatestCreatedAssertionWithBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toRemoveAddresses",
"type": "address[]"
}
],
"name": "removeFromOperatorWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toRemoveAddresses",
"type": "address[]"
}
],
"name": "removeFromStakerWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "removeOldZombies",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "stakerAddress",
"type": "address"
}
],
"name": "removeStake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
}
],
"name": "resolve",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_shouldRollBack",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_shouldStartAtElement",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_signature",
"type": "bytes"
}
],
"name": "rollbackL2Chain",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "stakeAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "stake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "stakeToken",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "stakerWhitelist",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "stakers",
"outputs": [
{
"internalType": "bool",
"name": "isStaked",
"type": "bool"
},
{
"internalType": "uint256",
"name": "amountStaked",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "currentChallenge",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "stakerslist",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "stakeAmount",
"type": "uint256"
}
],
"name": "unstake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "verifier",
"outputs": [
{
"internalType": "contract IVerifierEntry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "withdrawableFunds",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "zombies",
"outputs": [
{
"internalType": "address",
"name": "stakerAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "lastAssertionID",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b50600080546001600160a01b03191690556200002c62000032565b62000101565b600054600160a81b900460ff1615620000a15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff600160a01b90910481161015620000ff576000805460ff60a01b191660ff60a01b17905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b616f8980620001116000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80636aabc35011610191578063b553ee84116100e3578063cfc5901d11610097578063f2fde38b11610071578063f2fde38b14610707578063fa7803e61461071a578063fe2ba8481461072d57600080fd5b8063cfc5901d146106c1578063de574efc146106d4578063e03c8632146106e757600080fd5b8063c8525c3e116100c8578063c8525c3e14610693578063c94b5847146106a6578063c97a5919146106ae57600080fd5b8063b553ee8414610677578063b6da898f1461068057600080fd5b80638c669739116101455780639efbea231161011f5780639efbea2314610648578063a56ba93b1461065b578063aca9a5181461066457600080fd5b80638c669739146105aa5780638da5cb5b146105b25780639168ae72146105c557600080fd5b80637112955911610176578063711295591461057b5780637acb7757146105845780638821b2ae1461059757600080fd5b80636aabc350146105495780636c8b052a1461057257600080fd5b806330b260751161024a578063461a4478116101fe57806351ed6a30116101d857806351ed6a30146104e75780636177fd18146104fa5780636a3685611461053657600080fd5b8063461a4478146104b957806349cd3004146104cc5780634d26732d146104df57600080fd5b80633ccfd60b1161022f5780633ccfd60b1461049557806340d9224b1461049d57806345e38b64146104b057600080fd5b806330b260751461047a57806337d1fbdd1461048257600080fd5b80632aa234f6116102ac5780632f06d1b0116102865780632f06d1b0146104275780632f30cabd1461043a578063300a71611461045a57600080fd5b80632aa234f6146103ee5780632b7ac3f3146104015780632e17de781461041457600080fd5b80632052465e116102dd5780632052465e146103875780632906040e146103b9578063299ca478146103c357600080fd5b80630e456acf146102f9578063107035a414610370575b600080fd5b607754607854607954607a54607b5461032c9460ff8116946001600160a01b036101009092048216949082169391169186565b6040805196151587526001600160a01b0395861660208801529385169386019390935292166060840152608083019190915260a082015260c0015b60405180910390f35b61037960715481565b604051908152602001610367565b61039a610395366004614842565b610740565b604080516001600160a01b039093168352602083019190915201610367565b6103c1610778565b005b6000546103d6906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b6103d66103fc366004614842565b610aba565b6005546103d6906001600160a01b031681565b6103c1610422366004614842565b610ae4565b6103d661043536600461486c565b610cb9565b6103796104483660046148c6565b60756020526000908152604090205481565b6103796104683660046148c6565b60396020526000908152604090205481565b6103c161146c565b6103d6610490366004614842565b61186a565b6103c161187a565b6004546103d6906001600160a01b031681565b61037960015481565b6103d66104c73660046149b8565b6119e3565b6103c16104da366004614a55565b611a7d565b600254610379565b6003546103d6906001600160a01b031681565b6105266105083660046148c6565b6001600160a01b031660009081526073602052604090205460ff1690565b6040519015158152602001610367565b6103c1610544366004614b0f565b611d3e565b6103d66105573660046148c6565b6074602052600090815260409020546001600160a01b031681565b61037960725481565b61037960025481565b6103c1610592366004614b51565b611e80565b6103c16105a5366004614842565b612318565b6103c16124f9565b6038546103d6906001600160a01b031681565b6106126105d33660046148c6565b6073602052600090815260409020805460018201546002830154600384015460049094015460ff90931693919290916001600160a01b03908116911685565b6040805195151586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a001610367565b6103c1610656366004614b0f565b61256c565b61037960705481565b6103c1610672366004614b0f565b6127ae565b610379606f5481565b6103c161068e366004614b81565b6129f0565b6103c16106a1366004614b0f565b612e46565b610379612f82565b6103c16106bc366004614ba3565b613020565b6103c16106cf366004614cb1565b613545565b6103c16106e2366004614d01565b6136f8565b6103796106f53660046148c6565b603b6020526000908152604090205481565b6103c16107153660046148c6565b613c2f565b6103c1610728366004614dba565b613d0e565b6103c161073b3660046148c6565b613fdf565b6076818154811061075057600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b336000908152607460205260409020546001600160a01b03166107e25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064015b60405180910390fd5b607154606f54106108355760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000607254116108875760405162461bcd60e51b815260206004820152600860248201527f4e6f5374616b657200000000000000000000000000000000000000000000000060448201526064016107d9565b6000606f5460016108989190614e17565b600480546040517f828622750000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916382862275916108e59185910190815260200190565b60206040518083038186803b1580156108fd57600080fd5b505afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109359190614e2f565b4210156109845760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b607054600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b0316906330b947709060240160206040518083038186803b1580156109e257600080fd5b505afa1580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190614e2f565b14610a675760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964506172656e740000000000000000000000000000000000000060448201526064016107d9565b606f8054906000610a7783614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150565b603a8181548110610aca57600080fd5b6000918252602090912001546001600160a01b0316905081565b610aed336141a9565b33600090815260736020526040902060705460028201541115610b525760405162461bcd60e51b815260206004820152601c60248201527f5374616b65644f6e556e636f6e6669726d6564417373657274696f6e0000000060448201526064016107d9565b6002548160010154610b649190614e81565b821115610bb35760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b81816001016000828254610bc79190614e81565b90915550506003546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c3157600080fd5b505af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614e98565b610cb55760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b5050565b336000908152607460205260408120546001600160a01b0316610d1e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b81356020830135808210610d745760405162461bcd60e51b815260206004820152600a60248201527f57726f6e674f726465720000000000000000000000000000000000000000000060448201526064016107d9565b607154811115610dc65760405162461bcd60e51b815260206004820152601360248201527f556e70726f706f736564417373657274696f6e0000000000000000000000000060448201526064016107d9565b8160705410610e175760405162461bcd60e51b815260206004820152601860248201527f417373657274696f6e416c72656164795265736f6c766564000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526000916001600160a01b03909116906330b947709060240160206040518083038186803b158015610e7757600080fd5b505afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf9190614e2f565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916330b9477091610efc9186910190815260200190565b60206040518083038186803b158015610f1457600080fd5b505afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614e2f565b8114610f9a5760405162461bcd60e51b815260206004820152600f60248201527f446966666572656e74506172656e74000000000000000000000000000000000060448201526064016107d9565b6000610fa960208801886148c6565b90506000610fbd6040890160208a016148c6565b9050806001600160a01b0316826001600160a01b031614156110475760405162461bcd60e51b815260206004820152602560248201527f646566656e64657220616e64206368616c6c656e6765206d757374206e6f742060448201527f657175616c00000000000000000000000000000000000000000000000000000060648201526084016107d9565b6001600160a01b03808316600090815260746020526040808220548484168352912054908216911661107882614211565b61108181614211565b600060405161108f906147d7565b604051809103906000f0801580156110ab573d6000803e3d6000fd5b506001600160a01b038084166000908152607360209081526040808320600490810180548688167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092558a871686528386209092018054831682179055825160c0810184529485529284018390528a8516848301819052948a1660608501819052608085018f905260a09094018d905260778054610100949094027fffffffffffffffffffffff00000000000000000000000000000000000000000090941693909317909255607880548316909417909355607980549091169091179055607a8a9055607b8990555190915081907fd0ebe74b4f7d89a9b0fdc9d95f887a7b925c6c7300b5c4b2c3304d97925840fa906111e0908b9084909182526001600160a01b0316602082015260400190565b60405180910390a1600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018990526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b15801561124857600080fd5b505afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018b90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b1580156112e157600080fd5b505afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018e90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b15801561137a57600080fd5b505afa15801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190614e2f565b6005546040517fabf480130000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b8116602483015291821660448201523060648201526084810186905260a4810185905260c4810183905291925086169063abf480139060e401600060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b50959e5050505050505050505050505050505b92915050565b336000908152607460205260409020546001600160a01b03166114d15760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b607154606f54106115245760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000606f5460016115359190614e17565b607054600480546040517f30b9477000000000000000000000000000000000000000000000000000000000815291820184905292935090916001600160a01b0316906330b947709060240160206040518083038186803b15801561159857600080fd5b505afa1580156115ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d09190614e2f565b14156117a157600480546040517f828622750000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b03169063828622759060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190614e2f565b4210156116b85760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b6116c181614285565b600480546040517f366b2b690000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b03169063366b2b699060240160206040518083038186803b15801561171c57600080fd5b505afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117549190614e2f565b146117a15760405162461bcd60e51b815260206004820152600e60248201527f5374616b65727350726573656e7400000000000000000000000000000000000060448201526064016107d9565b606f80549060006117b183614e48565b91905055507f5b24ab8ceb442373727ac5c559a027521cb52db451c74710ebed9faa5fe15a7c606f546040516117e991815260200190565b60405180910390a160048054606f546040517fd8a4e5af000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063d8a4e5af90602401600060405180830381600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b5050505050565b603c8181548110610aca57600080fd5b336000908152607460205260409020546001600160a01b03166118df5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b33600081815260756020526040808220805492905560035490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101939093526024830182905290916001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561195c57600080fd5b505af1158015611970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119949190614e98565b6119e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b50565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac190611a2d908590600401614f41565b60206040518083038186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614f54565b336000908152607460205260409020546001600160a01b0316611ae25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b611b206040518060400160405280600c81526020017f42564d5f526f6c6c7570657200000000000000000000000000000000000000008152506119e3565b6001600160a01b0316336001600160a01b031614611ba65760405162461bcd60e51b815260206004820152603560248201527f6d73672e73656e646572206973206e6f7420726f6c6c75702070726f706f736560448201527f722c2063616e277420617070656e64206261746368000000000000000000000060648201526084016107d9565b611bb087876129f0565b6000611bf06040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b90506000816001600160a01b03168787878787604051602401611c17959493929190614f71565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2169f79f0000000000000000000000000000000000000000000000000000000017905251611c7a9190614ffa565b6000604051808303816000865af19150503d8060008114611cb7576040519150601f19603f3d011682016040523d82523d6000602084013e611cbc565b606091505b5050905080611d335760405162461bcd60e51b815260206004820152602960248201527f73636320617070656e64207374617465206261746368206661696c65642c207260448201527f657665727420616c6c000000000000000000000000000000000000000000000060648201526084016107d9565b505050505050505050565b6038546001600160a01b03163314611d985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603a5460005b82811015611e7a57611db08183614e17565b60396000868685818110611dc657611dc6614eba565b9050602002016020810190611ddb91906148c6565b6001600160a01b03168152602081019190915260400160002055603a848483818110611e0957611e09614eba565b9050602002016020810190611e1e91906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580611e7281614e48565b915050611d9e565b50505050565b33600081815260396020526040902054603a80548392908110611ea557611ea5614eba565b6000918252602090912001546001600160a01b031614611f075760405162461bcd60e51b815260206004820152601760248201527f4e4f545f494e5f5354414b45525f57484954454c49535400000000000000000060448201526064016107d9565b6001600160a01b0382166000818152603b6020526040902054603c8054859392908110611f3657611f36614eba565b6000918252602090912001546001600160a01b031614611f985760405162461bcd60e51b815260206004820152601960248201527f4e4f545f494e5f4f50455241544f525f57484954454c4953540000000000000060448201526064016107d9565b6003546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561200357600080fd5b505af1158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190614e98565b6120875760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b3360009081526073602052604090205460ff161561215f57336000908152607360205260409020600301546001600160a01b038481169116146121325760405162461bcd60e51b815260206004820152602560248201527f7374616b6572203d3e206f70657261746f72206d617070696e67206e6f74207560448201527f6e6971756500000000000000000000000000000000000000000000000000000060648201526084016107d9565b3360009081526073602052604081206001018054869290612154908490614e17565b90915550611e7a9050565b6001600160a01b0383811660009081526074602052604090205416156121c75760405162461bcd60e51b815260206004820152601460248201527f6f70657261746f72206973206f6363757069656400000000000000000000000060448201526064016107d9565b6002548410156122195760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b6040805160a0810182526001808252602080830188815260008486018181526001600160a01b03808b16606088018181526080890185815233808752607389528b87209a518b549015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116178b559651988a01989098559251600289015591516003880180549183167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055955160049097018054979091169686169690961790955593845260749091529282208054909116909217909155607280549161230783614e48565b9190505550611e7a33607054614391565b336000908152607460205260409020546001600160a01b031661237d5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b031680845260739092529091206002810154831115806123b8575060715483115b156124055760405162461bcd60e51b815260206004820152601360248201527f417373657274696f6e4f75744f6652616e67650000000000000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018590526001600160a01b0316906330b947709060240160206040518083038186803b15801561246057600080fd5b505afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190614e2f565b8160020154146124ea5760405162461bcd60e51b815260206004820152601760248201527f506172656e74417373657274696f6e556e7374616b656400000000000000000060448201526064016107d9565b6124f48284614391565b505050565b336000908152607460205260409020546001600160a01b031661255e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b61256a607660006147e4565b565b6038546001600160a01b031633146125c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f4576000603b60008585858181106125e9576125e9614eba565b90506020020160208101906125fe91906148c6565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080603b6000603c6001603c8054905061263a9190614e81565b8154811061264a5761264a614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603c805461267f90600190614e81565b8154811061268f5761268f614eba565b600091825260209091200154603c80546001600160a01b0390921691839081106126bb576126bb614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603c8054806126fa576126fa615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155603b9085858581811061276a5761276a614eba565b905060200201602081019061277f91906148c6565b6001600160a01b03168152602081019190915260400160009081205550806127a681614e48565b9150506125c9565b6038546001600160a01b031633146128085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f45760006039600085858581811061282b5761282b614eba565b905060200201602081019061284091906148c6565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508060396000603a6001603a8054905061287c9190614e81565b8154811061288c5761288c614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603a80546128c190600190614e81565b815481106128d1576128d1614eba565b600091825260209091200154603a80546001600160a01b0390921691839081106128fd576128fd614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603a80548061293c5761293c615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559091019091556039908585858181106129ac576129ac614eba565b90506020020160208101906129c191906148c6565b6001600160a01b03168152602081019190915260400160009081205550806129e881614e48565b91505061280b565b336000908152607460205260409020546001600160a01b0316612a555760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b03908116808552607390935292206004015490911615612af75760405162461bcd60e51b815260206004820152603160248201527f63616e206e6f742063726561746520617373657274696f6e207768656e20737460448201527f616b657220696e206368616c6c656e676500000000000000000000000000000060648201526084016107d9565b6001600160a01b0381811660009081526073602052604090819020600201546001546004805493517f4e04886d000000000000000000000000000000000000000000000000000000008152908101839052919390921690634e04886d9060240160206040518083038186803b158015612b6f57600080fd5b505afa158015612b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba79190614e2f565b612bb19043614e81565b1015612bff5760405162461bcd60e51b815260206004820152601f60248201527f4d696e696d756d417373657274696f6e506572696f644e6f745061737365640060448201526064016107d9565b600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b031690632b27e93b9060240160206040518083038186803b158015612c5a57600080fd5b505afa158015612c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c929190614e2f565b8311612ce05760405162461bcd60e51b815260206004820152600e60248201527f456d707479417373657274696f6e00000000000000000000000000000000000060448201526064016107d9565b60718054906000612cf083614e48565b9091555050607154604080519182523360208301528101859052606081018490527f5c610f28399ecc14b66149012a0197a5e3257a8c397125afee95d1cf4b9507349060800160405180910390a16004546071546001600160a01b0390911690634228158490868685612d6161446f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b50505050612df082607154614391565b606f8054906000612e0083614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150505050565b6038546001600160a01b03163314612ea05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603c5460005b82811015611e7a57612eb88183614e17565b603b6000868685818110612ece57612ece614eba565b9050602002016020810190612ee391906148c6565b6001600160a01b03168152602081019190915260400160002055603c848483818110612f1157612f11614eba565b9050602002016020810190612f2691906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580612f7a81614e48565b915050612ea6565b600480546070546040517f2b27e93b000000000000000000000000000000000000000000000000000000008152928301526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b158015612fe357600080fd5b505afa158015612ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301b9190614e2f565b905090565b6000547501000000000000000000000000000000000000000000900460ff161580801561306b575060005460017401000000000000000000000000000000000000000090910460ff16105b8061309d5750303b15801561309d575060005474010000000000000000000000000000000000000000900460ff166001145b61310f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d9565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561319557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6001600160a01b038d1615806131b257506001600160a01b038c16155b156131ff5760405162461bcd60e51b815260206004820152600b60248201527f5a65726f4164647265737300000000000000000000000000000000000000000060448201526064016107d9565b8c603860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b600560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060006001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b0316146132e95760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c81169190911790915560045416156133725760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b16908117825560018a905560028990556040517f07663706000000000000000000000000000000000000000000000000000000008152309281019290925290630766370690602401600060405180830381600087803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b50506000606f81905560708190556071819055600480546040517f42281584000000000000000000000000000000000000000000000000000000008152918201