0 txs
126.4k calls
constructor
No constructor.
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
delay
viewfunction delay() view returns (uint64)
disableCcSend
viewfunction disableCcSend() view returns (bool)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
etNextDelay
viewfunction etNextDelay() view returns (uint64)
etNextFallbackFeed
viewfunction etNextFallbackFeed() view returns (uint64)
etNextMessager
viewfunction etNextMessager() view returns (uint64)
etNextOperator
viewfunction etNextOperator() view returns (uint64)
etNextReserveFeed
viewfunction etNextReserveFeed() view returns (uint64)
etNextRevoker
viewfunction etNextRevoker() view returns (uint64)
etNextUpgradeToAndCall
viewfunction etNextUpgradeToAndCall() view returns (uint64)
fallbackFeed
viewfunction fallbackFeed() view returns (address)
isBlocked
viewfunction isBlocked(address) view returns (bool)
messager
viewfunction messager() view returns (address)
mintBudget
viewfunction mintBudget() view returns (uint112)
msgOfCcSendMintBudget
viewfunction msgOfCcSendMintBudget(uint112 value) view returns (bytes message)
msgOfCcSendToken
viewfunction msgOfCcSendToken(address sender, address receiver, uint256 value) view returns (bytes message)
name
viewfunction name() view returns (string)
nextDelay
viewfunction nextDelay() view returns (uint64)
nextFallbackFeed
viewfunction nextFallbackFeed() view returns (address)
nextImplementation
viewfunction nextImplementation() view returns (address)
nextMessager
viewfunction nextMessager() view returns (address)
nextOperator
viewfunction nextOperator() view returns (address)
nextReserveFeed
viewfunction nextReserveFeed() view returns (address)
nextRevoker
viewfunction nextRevoker() view returns (address)
nextUpgradeToAndCallDataHash
viewfunction nextUpgradeToAndCallDataHash() view returns (bytes32)
nftContract
viewfunction nftContract() view returns (address)
nonces
viewfunction nonces(address owner) view returns (uint256)
operator
viewfunction operator() view returns (address)
owner
viewfunction owner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
requestMap
viewfunction requestMap(bytes32 requestHash) view returns (uint256 effectiveTime)
reserveFeed
viewfunction reserveFeed() view returns (address)
revoker
viewfunction revoker() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usedReserve
viewfunction usedReserve() view returns (uint112)
addToBlockedList
nonpayablefunction addToBlockedList(address _user)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
ccReceive
nonpayablefunction ccReceive(bytes message)
ccSendMintBudget
nonpayablefunction ccSendMintBudget(uint112 value) returns (bytes message)
ccSendToken
nonpayablefunction ccSendToken(address sender, address receiver, uint256 value) returns (bytes message)
initialize
nonpayablefunction initialize(string name, string symbol, address _owner, address _operator)
mintTo
nonpayablefunction mintTo(address receiver, uint256 amount, uint256 nonce) returns (bool)
multiTransfer
nonpayablefunction multiTransfer(address[] _recipients, uint256[] _values)
pack
nonpayablefunction pack(address tokenOwner, uint256 amount)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
redeem
nonpayablefunction redeem(uint256 amount, address customer, bytes data)
removeFromBlockedList
nonpayablefunction removeFromBlockedList(address _user)
renounceOwnership
nonpayablefunction renounceOwnership()
requestUpgradeToAndCall
nonpayablefunction requestUpgradeToAndCall(address _newImplementation, bytes _data)
revokeNextDelay
nonpayablefunction revokeNextDelay()
revokeNextMessager
nonpayablefunction revokeNextMessager()
revokeNextOperator
nonpayablefunction revokeNextOperator()
revokeNextRevoker
nonpayablefunction revokeNextRevoker()
revokeNextUpgrade
nonpayablefunction revokeNextUpgrade()
revokeRequest
nonpayablefunction revokeRequest(bytes32 req)
setDelay
nonpayablefunction setDelay(uint64 _delay)
setDisableCcSend
nonpayablefunction setDisableCcSend(bool b)
setMessager
nonpayablefunction setMessager(address _messager)
setNFTContract
nonpayablefunction setNFTContract(address _nftContract)
setOperator
nonpayablefunction setOperator(address _operator)
setRevoker
nonpayablefunction setRevoker(address _revoker)
transfer
nonpayablefunction transfer(address _recipient, uint256 _amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address _sender, address _recipient, uint256 _amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpack
nonpayablefunction unpack(address tokenOwner, uint256 amount)
upgradeToAndCall
payablefunction upgradeToAndCall(address _newImplementation, bytes _data) payable
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BlockPlaced
event BlockPlaced(address indexed _user)
BlockReleased
event BlockReleased(address indexed _user)
CCReceiveMintBudget
event CCReceiveMintBudget(uint112 value)
CCReceiveToken
event CCReceiveToken(address indexed sender, address indexed receiver, uint256 value)
CCSendMintBudget
event CCSendMintBudget(uint112 value)
CCSendToken
event CCSendToken(address indexed sender, address indexed receiver, uint256 value)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
MintRequest
event MintRequest(address indexed receiver, uint256 amount, uint256 nonce)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Redeem
event Redeem(address indexed customer, uint256 amount, bytes data)
RequestRevoked
event RequestRevoked(bytes32 indexed req)
SetDelayEffected
event SetDelayEffected(uint64 newDelay)
SetDelayRequest
event SetDelayRequest(uint64 oldDelay, uint64 newDelay, uint64 et)
SetMessagerEffected
event SetMessagerEffected(address newAddr)
SetMessagerRequest
event SetMessagerRequest(address oldAddr, address newAddr, uint64 et)
SetOperatorEffected
event SetOperatorEffected(address newAddr)
SetOperatorRequest
event SetOperatorRequest(address oldAddr, address newAddr, uint64 et)
SetRevokerEffected
event SetRevokerEffected(address newAddr)
SetRevokerRequest
event SetRevokerRequest(address oldAddr, address newAddr, uint64 et)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Upgraded
event Upgraded(address indexed implementation)
UpgradeToAndCallRequest
event UpgradeToAndCallRequest(address newImplementation, bytes data)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ArgsMismatch
error ArgsMismatch()
BlockedAccount
error BlockedAccount(address)
CcSendDisabled
error CcSendDisabled()
DelayTooSmall
error DelayTooSmall()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
FailedInnerCall
error FailedInnerCall()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
InvalidMsg
error InvalidMsg(uint256 tag)
InvalidUpgradeToAndCallData
error InvalidUpgradeToAndCallData()
InvalidUpgradeToAndCallImpl
error InvalidUpgradeToAndCallImpl()
MintBudgetNotEnough
error MintBudgetNotEnough(uint256 budget, uint256 amount)
NotInitializing
error NotInitializing()
NotMessager
error NotMessager(address)
NotNftContract
error NotNftContract(address)
NotOperator
error NotOperator(address)
NotOperatorNorNft
error NotOperatorNorNft(address)
NotRevoker
error NotRevoker(address)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
TooEarlyToExecute
error TooEarlyToExecute(address receiver, uint256 amount, uint256 nonce)
TooEarlyToUpgradeToAndCall
error TooEarlyToUpgradeToAndCall()
TransferToContract
error TransferToContract()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x60a06040523060805234801561001457600080fd5b5060805161431b61003e6000396000818161292a0152818161295301526129fc015261431b6000f3fe60806040526004361061049b5760003560e01c80637ecebe001161025e578063ad3cb1cc11610143578063d4ecba4f116100bb578063dd62ed3e1161008a578063f2fde38b1161006f578063f2fde38b14610e2a578063f6ec1c4d14610e4a578063fbac395114610e6a57600080fd5b8063dd62ed3e14610d9d578063e1420eb214610e0257600080fd5b8063d4ecba4f14610d10578063d505accf14610d3d578063d56d229d14610d5d578063d855ef7814610d7d57600080fd5b8063b85764f511610112578063c317e8a6116100f7578063c317e8a614610cae578063cc9df18414610cce578063d3c3bbd014610ce857600080fd5b8063b85764f514610c6e578063c107330214610c8e57600080fd5b8063ad3cb1cc14610bc8578063ae8bd78414610c11578063b280e6a614610c39578063b3ab15fb14610c4e57600080fd5b806393270c5c116101d6578063a0941d0c116101a5578063a7ccabdf1161018a578063a7ccabdf14610b68578063a86b06e514610b88578063a9059cbb14610ba857600080fd5b8063a0941d0c14610b33578063a2ae87fa14610b4857600080fd5b806393270c5c14610ac1578063950e61c614610ad657806395d89b4114610af7578063963f77ca14610b0c57600080fd5b80638781352d1161022d5780638da5cb5b116102125780638da5cb5b14610a445780638f15b41414610a815780639083dd9d14610aa157600080fd5b80638781352d146109fc578063881fe05414610a2457600080fd5b80637ecebe00146109745780637f2bbc0e1461099457806382641e7f146109b457806384b0196e146109d457600080fd5b8063323ec0b8116103845780634f1ef286116102fc5780636a42b8f8116102cb57806370a08231116102b057806370a082311461091e578063715018a61461093e5780637478015c1461095357600080fd5b80636a42b8f8146108e15780636ab8fc181461090957600080fd5b80634f1ef2861461087957806352d1902d1461088c578063570ca735146108a157806359ed0813146108c157600080fd5b80633c7c9b90116103535780633d093a9f116103385780633d093a9f146108195780634a506553146108395780634e782eed1461085957600080fd5b80633c7c9b90146107d95780633cbae777146107f957600080fd5b8063323ec0b81461075c57806332f275841461078457806335dec5d1146107a45780633644e515146107c457600080fd5b80631a14f449116104175780632a22862b116103e65780632c78311c116103cb5780632c78311c1461070b578063313ce5671461072b57806331c3fa8a1461074757600080fd5b80632a22862b146106ae5780632baf2acb146106eb57600080fd5b80631a14f4491461060d5780631e89d5451461062d57806323b872dd1461064d57806325e6a8ee1461066d57600080fd5b80630b8d22511161046e57806311857106116104535780631185710614610599578063149668e0146105b957806318160ddd146105d957600080fd5b80630b8d22511461055557806311532e771461057557600080fd5b8063022a3268146104a057806306fdde03146104c2578063095ea7b3146104ed57806309ff18f01461051d575b600080fd5b3480156104ac57600080fd5b506104c06104bb3660046138b4565b610e9a565b005b3480156104ce57600080fd5b506104d7610edb565b6040516104e49190613930565b60405180910390f35b3480156104f957600080fd5b5061050d6105083660046138b4565b610f96565b60405190151581526020016104e4565b34801561052957600080fd5b5060005461053d906001600160a01b031681565b6040516001600160a01b0390911681526020016104e4565b34801561056157600080fd5b5060095461053d906001600160a01b031681565b34801561058157600080fd5b5061058b60015481565b6040519081526020016104e4565b3480156105a557600080fd5b50600e5461053d906001600160a01b031681565b3480156105c557600080fd5b5060105461053d906001600160a01b031681565b3480156105e557600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025461058b565b34801561061957600080fd5b506104c0610628366004613943565b610fb0565b34801561063957600080fd5b506104c0610648366004613a3a565b611002565b34801561065957600080fd5b5061050d610668366004613afc565b61109c565b34801561067957600080fd5b5060095461069590600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016104e4565b3480156106ba57600080fd5b50600d546106d39061010090046001600160701b031681565b6040516001600160701b0390911681526020016104e4565b3480156106f757600080fd5b5061050d610706366004613b3d565b6110ee565b34801561071757600080fd5b5060085461053d906001600160a01b031681565b34801561073757600080fd5b50604051601281526020016104e4565b34801561075357600080fd5b506104c06112d8565b34801561076857600080fd5b50600f5461069590600160a01b900467ffffffffffffffff1681565b34801561079057600080fd5b5060115461053d906001600160a01b031681565b3480156107b057600080fd5b5060065461053d906001600160a01b031681565b3480156107d057600080fd5b5061058b61131b565b3480156107e557600080fd5b506104c06107f4366004613943565b61132a565b34801561080557600080fd5b506104c0610814366004613b72565b61137f565b34801561082557600080fd5b506104c06108343660046138b4565b61139a565b34801561084557600080fd5b506104c0610854366004613c04565b6113d2565b34801561086557600080fd5b506104c0610874366004613943565b61147d565b6104c0610887366004613c04565b6115e8565b34801561089857600080fd5b5061058b6116dc565b3480156108ad57600080fd5b5060045461053d906001600160a01b031681565b3480156108cd57600080fd5b506104c06108dc366004613c4a565b61170b565b3480156108ed57600080fd5b5060025461069590600160b01b900467ffffffffffffffff1681565b34801561091557600080fd5b506104c0611773565b34801561092a57600080fd5b5061058b610939366004613943565b6117b6565b34801561094a57600080fd5b506104c06117fb565b34801561095f57600080fd5b506003546106959067ffffffffffffffff1681565b34801561098057600080fd5b5061058b61098f366004613943565b61180f565b3480156109a057600080fd5b506104d76109af366004613c78565b61181a565b3480156109c057600080fd5b5060075461053d906001600160a01b031681565b3480156109e057600080fd5b506109e9611879565b6040516104e49796959493929190613c95565b348015610a0857600080fd5b5060055461069590600160a01b900467ffffffffffffffff1681565b348015610a3057600080fd5b506104d7610a3f366004613afc565b611975565b348015610a5057600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661053d565b348015610a8d57600080fd5b506104c0610a9c366004613d4a565b6119e3565b348015610aad57600080fd5b506104c0610abc366004613943565b611b1c565b348015610acd57600080fd5b506104c0611c87565b348015610ae257600080fd5b506002546106959067ffffffffffffffff1681565b348015610b0357600080fd5b506104d7611cca565b348015610b1857600080fd5b506002546106d390600160401b90046001600160701b031681565b348015610b3f57600080fd5b506104c0611d1b565b348015610b5457600080fd5b506104d7610b63366004613c78565b611d5b565b348015610b7457600080fd5b506104c0610b83366004613943565b611e44565b348015610b9457600080fd5b5060055461053d906001600160a01b031681565b348015610bb457600080fd5b5061050d610bc33660046138b4565b611e84565b348015610bd457600080fd5b506104d76040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610c1d57600080fd5b5060035461069590600160401b900467ffffffffffffffff1681565b348015610c4557600080fd5b506104c0611ec2565b348015610c5a57600080fd5b506104c0610c69366004613943565b611f0a565b348015610c7a57600080fd5b506104d7610c89366004613afc565b612075565b348015610c9a57600080fd5b506104c0610ca9366004613dd3565b61214d565b348015610cba57600080fd5b50600f5461053d906001600160a01b031681565b348015610cda57600080fd5b50600d5461050d9060ff1681565b348015610cf457600080fd5b5060075461069590600160a01b900467ffffffffffffffff1681565b348015610d1c57600080fd5b5061058b610d2b366004613c4a565b600a6020526000908152604090205481565b348015610d4957600080fd5b506104c0610d58366004613dfd565b612313565b348015610d6957600080fd5b50600b5461053d906001600160a01b031681565b348015610d8957600080fd5b506104c0610d98366004613ebd565b61249e565b348015610da957600080fd5b5061058b610db8366004613f19565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b348015610e0e57600080fd5b5060115461069590600160a01b900467ffffffffffffffff1681565b348015610e3657600080fd5b506104c0610e45366004613943565b61258d565b348015610e5657600080fd5b506104c0610e65366004613f52565b6125e1565b348015610e7657600080fd5b5061050d610e85366004613943565b600c6020526000908152604090205460ff1681565b600b546001600160a01b03163314610ecc5760405163bd3ed21560e01b81523360048201526024015b60405180910390fd5b610ed7338383612683565b5050565b606060007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b9050806003018054610f1290613f94565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3e90613f94565b8015610f8b5780601f10610f6057610100808354040283529160200191610f8b565b820191906000526020600020905b815481529060010190602001808311610f6e57829003601f168201915b505050505091505090565b600033610fa48185856126e2565b60019150505b92915050565b610fb9336126ef565b6001600160a01b0381166000818152600c6020526040808220805460ff19169055517f665918c9e02eb2fd85acca3969cb054fc84c138e60ec4af22ab6ef2fd4c93c279190a250565b61100b33612741565b8051825114611046576040517fe551559700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156110975761108e83828151811061106757611067613fce565b602002602001015183838151811061108157611081613fce565b6020026020010151611e84565b50600101611049565b505050565b60006110a733612741565b306001600160a01b038416036110d057604051630e927f5760e21b815260040160405180910390fd5b6110d984612741565b6110e484848461279f565b90505b9392505050565b6004546000906001600160a01b031633148015906111175750600b546001600160a01b03163314155b1561113757604051639e35d65360e01b8152336004820152602401610ec3565b604080516001600160a01b03861660208201529081018490526060810183905260009060800160408051601f1981840301815291815281516020928301206000818152600a909352908220549092509081900361120e576002546111ac90600160b01b900467ffffffffffffffff1642613ffa565b6000838152600a60209081526040918290209290925580518781529182018690526001600160a01b038816917f5b5758388c63ddbb027c1c831a65b27d9c8f0cb94b3d4452b9061e541a7a14b3910160405180910390a26000925050506110e7565b4281101561122a576000828152600a6020526040812055611275565b6040517f8cb39b490000000000000000000000000000000000000000000000000000000081526001600160a01b03871660048201526024810186905260448101859052606401610ec3565b61127e856127c3565b60025461129c908690600160401b90046001600160701b031661400d565b600260086101000a8154816001600160701b0302191690836001600160701b031602179055506112cc868661282b565b50600195945050505050565b6006546001600160a01b0316331461130557604051635a4c7a3b60e01b8152336004820152602401610ec3565b6005805467ffffffffffffffff60a01b19169055565b6000611325612861565b905090565b611333336126ef565b6001600160a01b0381166000818152600c6020526040808220805460ff19166001179055517f406bbf2d8d145125adf1198d2cf8a67c66cc4bb0ab01c37dccd4f7c0aae1e7c79190a250565b61138761286b565b600d805460ff1916911515919091179055565b600b546001600160a01b031633146113c75760405163bd3ed21560e01b8152336004820152602401610ec3565b610ed7823383612683565b6113da61286b565b600080546001600160a01b0319166001600160a01b03841617905580516020820120600155600254600160b01b900467ffffffffffffffff1661141d9042614020565b6002805467ffffffffffffffff191667ffffffffffffffff929092169190911790556040517fcc54b42f78b332711d2d2b40bd7edb325a1fef0124753b0689728b7209ca1e2e906114719084908490614048565b60405180910390a15050565b61148561286b565b61148e816128df565b60095467ffffffffffffffff600160a01b820416906001600160a01b0383811691161480156114c6575067ffffffffffffffff811615155b80156114db5750428167ffffffffffffffff16105b1561152e57600880546001600160a01b0319166001600160a01b0384169081179091556040519081527f1b9d0b5a70b97dc78ad9716939a19d2f6a4637b72a7f24163d84819f662d2d1390602001611471565b600980546001600160a01b0319166001600160a01b03841617905560025461156790600160b01b900467ffffffffffffffff1642614020565b6009805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff93841681029190911791829055600854604080516001600160a01b039283168152918716602083015291909204909216918101919091527fc324e1d0260022c1c28b6831261f1a9ef8986e0bd3b125ce9c93146762cf9c7290606001611471565b6115f061291f565b6000546001600160a01b03838116911614611637576040517f9ab1811500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001548151602083012014611678576040517fefac8be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025467ffffffffffffffff1680158061169b5750428167ffffffffffffffff16115b156116d2576040517f260343ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61109783836129d6565b60006116e66129f1565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6006546001600160a01b0316331461173857604051635a4c7a3b60e01b8152336004820152602401610ec3565b6000818152600a60205260408082208290555182917f806dc0290fcdd417bbb174a9f100caca0a3a138dde7f3031430dbf5f80cd51d791a250565b6006546001600160a01b031633146117a057604051635a4c7a3b60e01b8152336004820152602401610ec3565b6007805467ffffffffffffffff60a01b19169055565b6000807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b6001600160a01b0390931660009081526020939093525050604090205490565b61180361286b565b61180d6000612a3a565b565b6000610faa82612aab565b606061182e826001600160701b03166127c3565b604080516001600160701b03841660208201526003910160408051601f1981840301815290829052611863929160200161406a565b6040516020818303038152906040529050919050565b600060608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10080549091501580156118b857506001810154155b61191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610ec3565b611926612ad4565b61192e612b25565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b606061198084612741565b61198983612741565b604080516001600160a01b038681166020830152851681830152606080820185905282518083039091018152608082019092526119cb9160029160a00161406a565b60405160208183030381529060405290509392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015611a295750825b905060008267ffffffffffffffff166001148015611a465750303b155b905081158015611a54575080155b15611a8b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611aba57845468ff00000000000000001916600160401b1785555b611ac689898989612b4f565b8315611b1157845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b611b2461286b565b611b2d816128df565b60075467ffffffffffffffff600160a01b820416906001600160a01b038381169116148015611b65575067ffffffffffffffff811615155b8015611b7a5750428167ffffffffffffffff16105b15611bcd57600680546001600160a01b0319166001600160a01b0384169081179091556040519081527fc1f235bba1c838187a7f50f73c2940cd988836882c74b7dfc478d28a37d79d5890602001611471565b600780546001600160a01b0319166001600160a01b038416179055600254611c0690600160b01b900467ffffffffffffffff1642614020565b6007805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff93841681029190911791829055600654604080516001600160a01b039283168152918716602083015291909204909216918101919091527f8a674bc274bfa5b54e4ea4c4831280b18b2ccbb2aadfc7075f9cec0eecd0fb6490606001611471565b6006546001600160a01b03163314611cb457604051635a4c7a3b60e01b8152336004820152602401610ec3565b6009805467ffffffffffffffff60a01b19169055565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610f1290613f94565b6006546001600160a01b03163314611d4857604051635a4c7a3b60e01b8152336004820152602401610ec3565b6002805467ffffffffffffffff19169055565b6008546060906001600160a01b03163314611d8b57604051634de6681960e11b8152336004820152602401610ec3565b611d94326126ef565b611da6826001600160701b0316612bd7565b611daf8261181a565b905081600260088282829054906101000a90046001600160701b0316611dd59190614083565b92506101000a8154816001600160701b0302191690836001600160701b031602179055507fae1020cbcb1cc75501477d72d538582a5e4db035ee16ffce5c13c67115b081aa82604051611e3791906001600160701b0391909116815260200190565b60405180910390a1919050565b611e4c61286b565b611e55816128df565b600b546001600160a01b0316611e8157600b80546001600160a01b0319166001600160a01b0383161790555b50565b6000611e8f33612741565b306001600160a01b03841603611eb857604051630e927f5760e21b815260040160405180910390fd5b6110e78383612c11565b6006546001600160a01b03163314611eef57604051635a4c7a3b60e01b8152336004820152602401610ec3565b600380546fffffffffffffffff000000000000000019169055565b611f1261286b565b611f1b816128df565b60055467ffffffffffffffff600160a01b820416906001600160a01b038381169116148015611f53575067ffffffffffffffff811615155b8015611f685750428167ffffffffffffffff16105b15611fbb57600480546001600160a01b0319166001600160a01b0384169081179091556040519081527f1fac8e1a48aa1912f53ebcb6e8d81f4f8cdf744982c7aa4aaf0152a30c02696e90602001611471565b600580546001600160a01b0319166001600160a01b038416179055600254611ff490600160b01b900467ffffffffffffffff1642614020565b6005805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff93841681029190911791829055600454604080516001600160a01b039283168152918716602083015291909204909216918101919091527f12b711c994caeaba10a597eb355ca2db4a74639902e3d300f9370caee0da4b0b90606001611471565b6008546060906001600160a01b031633146120a557604051634de6681960e11b8152336004820152602401610ec3565b600d5460ff16156120e2576040517fb73765ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120eb82612bd7565b6120f58483612c1f565b826001600160a01b0316846001600160a01b03167f7d94a9cf19d78c7fb8171e81798d5ceab7d3ef3a27d79ae4ead2a51460bacedc8460405161213a91815260200190565b60405180910390a36110e4848484611975565b61215561286b565b610e1067ffffffffffffffff8216101561219b576040517fed75f3c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035467ffffffffffffffff600160401b820481169183821691161480156121cc575067ffffffffffffffff811615155b80156121e15750428167ffffffffffffffff16105b1561225657600280547fffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff16600160b01b67ffffffffffffffff8516908102919091179091556040519081527f0ed594aee59a2d00c8a1183779743ed2c0f8e413f761a48b181a72cb86e1a05a90602001611471565b6003805467ffffffffffffffff191667ffffffffffffffff8481169190911790915560025461228e91600160b01b9091041642614020565b600380546fffffffffffffffff00000000000000001916600160401b67ffffffffffffffff9384168102919091179182905560025460408051600160b01b90920485168252868516602083015291909204909216918101919091527f8189ce093e30309b5e2dffeabdf7adf977853585d6b56995e8c8098342f6546f90606001611471565b83421115612350576040517f6279130200000000000000000000000000000000000000000000000000000000815260048101859052602401610ec3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886123bc8c6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061241782612c55565b9050600061242782878787612c9d565b9050896001600160a01b0316816001600160a01b031614612487576040517f4b800e460000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301528b166024820152604401610ec3565b6124928a8a8a6126e2565b50505050505050505050565b6004546001600160a01b031633148015906124c45750600b546001600160a01b03163314155b156124e457604051639e35d65360e01b8152336004820152602401610ec3565b6004546124fa906001600160a01b031685612c1f565b826001600160a01b03167faa42d7f17938b1f871b578d29e9906d689168f23d73e6f3d6ebfae27bb652159858484604051612537939291906140a3565b60405180910390a283600260088282829054906101000a90046001600160701b031661256391906140d9565b92506101000a8154816001600160701b0302191690836001600160701b0316021790555050505050565b61259561286b565b6001600160a01b0381166125d8576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610ec3565b611e8181612a3a565b6008546001600160a01b0316331461260e57604051634de6681960e11b8152336004820152602401610ec3565b60008061261d838501856140f9565b91509150600282036126375761263281612ccb565b61267d565b600382036126485761263281612d47565b6040517f0c46eb1400000000000000000000000000000000000000000000000000000000815260048101839052602401610ec3565b50505050565b6001600160a01b0383166126ad57604051634b637e8f60e11b815260006004820152602401610ec3565b6001600160a01b0382166126d75760405163ec442f0560e01b815260006004820152602401610ec3565b611097838383612de5565b6110978383836001612f40565b6004546001600160a01b03828116911614611e81576040517f76c6c93a0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610ec3565b6001600160a01b0381166000908152600c602052604090205460ff1615611e81576040517f863248950000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610ec3565b6000336127ad85828561306c565b6127b8858585612683565b506001949350505050565b600254600160401b90046001600160701b0316811115611e81576002546040517f75f28f1d000000000000000000000000000000000000000000000000000000008152600160401b9091046001600160701b0316600482015260248101829052604401610ec3565b6001600160a01b0382166128555760405163ec442f0560e01b815260006004820152602401610ec3565b610ed760008383612de5565b600061132561311c565b3361289d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461180d576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ec3565b6001600160a01b038116611e81576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806129b857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166129ac7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561180d5760405163703e46dd60e11b815260040160405180910390fd5b6129de61291f565b6129e782613190565b610ed78282613198565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461180d5760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006117db565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091610f1290613f94565b606060007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100610f01565b612b57613280565b612b6184846132e2565b612ba0836040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250613345565b612ba9836133b8565b612bb2826133c0565b600480546001600160a01b0319166001600160a01b0392909216919091179055505050565b80600003611e81576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600033610fa4818585612683565b6001600160a01b038216612c4957604051634b637e8f60e11b815260006004820152602401610ec3565b610ed782600083612de5565b6000610faa612c62612861565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080612caf888888886133c8565b925092509250612cbf8282613497565b50909695505050505050565b600080600083806020019051810190612ce4919061412a565b925092509250612cf4828261282b565b816001600160a01b0316836001600160a01b03167f5025925f8cc34cc32bd4855d8e230b0d1c7297da7cad970f3ff7e51cd1b448f683604051612d3991815260200190565b60405180910390a350505050565b600081806020019051810190612d5d919061416d565b905080600260088282829054906101000a90046001600160701b0316612d8391906140d9565b92506101000a8154816001600160701b0302191690836001600160701b031602179055507f0777cf903e54435115c01edfd1a21759c8a36b3db942df3f306a9449227977558160405161147191906001600160701b0391909116815260200190565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416612e335781816002016000828254612e289190613ffa565b90915550612ebe9050565b6001600160a01b03841660009081526020829052604090205482811015612e9f576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610ec3565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316612edc576002810180548390039055612efb565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d3991815260200190565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516612fa4576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610ec3565b6001600160a01b038416612fe7576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610ec3565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561306557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161305c91815260200190565b60405180910390a35b5050505050565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093861683529290522054600019811461267d578181101561310d576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610ec3565b61267d84848484036000612f40565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61314761359b565b61314f613617565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611e8161286b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156131f2575060408051601f3d908101601f191682019092526131ef9181019061418a565b60015b61321a57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610ec3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613276576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ec3565b611097838361366d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661180d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132ea613280565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361333684826141f3565b506004810161267d83826141f3565b61334d613280565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10261339984826141f3565b50600381016133a883826141f3565b5060008082556001909101555050565b611e81613280565b612595613280565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613403575060009150600390508261348d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613457573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166134835750600092506001915082905061348d565b9250600091508190505b9450945094915050565b60008260038111156134ab576134ab6142b3565b036134b4575050565b60018260038111156134c8576134c86142b3565b036134ff576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115613513576135136142b3565b0361354d576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610ec3565b6003826003811115613561576135616142b3565b03610ed7576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610ec3565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816135c7612ad4565b8051909150156135df57805160209091012092915050565b815480156135ee579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10081613643612b25565b80519091501561365b57805160209091012092915050565b600182015480156135ee579392505050565b613676826136c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156136bb57611097828261373a565b610ed76137b0565b806001600160a01b03163b6000036136f957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610ec3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161375791906142c9565b600060405180830381855af49150503d8060008114613792576040519150601f19603f3d011682016040523d82523d6000602084013e613797565b606091505b50915091506137a78583836137e8565b95945050505050565b341561180d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826137fd576137f88261385d565b6110e7565b815115801561381457506001600160a01b0384163b155b15613856576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ec3565b50806110e7565b80511561386d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381168114611e8157600080fd5b600080604083850312156138c757600080fd5b82356138d28161389f565b946020939093013593505050565b60005b838110156138fb5781810151838201526020016138e3565b50506000910152565b6000815180845261391c8160208601602086016138e0565b601f01601f19169290920160200192915050565b6020815260006110e76020830184613904565b60006020828403121561395557600080fd5b81356110e78161389f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561399f5761399f613960565b604052919050565b600067ffffffffffffffff8211156139c1576139c1613960565b5060051b60200190565b600082601f8301126139dc57600080fd5b813560206139f16139ec836139a7565b613976565b8083825260208201915060208460051b870101935086841115613a1357600080fd5b602086015b84811015613a2f5780358352918301918301613a18565b509695505050505050565b60008060408385031215613a4d57600080fd5b823567ffffffffffffffff80821115613a6557600080fd5b818501915085601f830112613a7957600080fd5b81356020613a896139ec836139a7565b82815260059290921b84018101918181019089841115613aa857600080fd5b948201945b83861015613acf578535613ac08161389f565b82529482019490820190613aad565b96505086013592505080821115613ae557600080fd5b50613af2858286016139cb565b9150509250929050565b600080600060608486031215613b1157600080fd5b8335613b1c8161389f565b92506020840135613b2c8161389f565b929592945050506040919091013590565b600080600060608486031215613b5257600080fd5b8335613b5d8161389f565b95602085013595506040909401359392505050565b600060208284031215613b8457600080fd5b813580151581146110e757600080fd5b600082601f830112613ba557600080fd5b813567ffffffffffffffff811115613bbf57613bbf613960565b613bd2601f8201601f1916602001613976565b818152846020838601011115613be757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613c1757600080fd5b8235613c228161389f565b9150602083013567ffffffffffffffff811115613c3e57600080fd5b613af285828601613b94565b600060208284031215613c5c57600080fd5b5035919050565b6001600160701b0381168114611e8157600080fd5b600060208284031215613c8a57600080fd5b81356110e781613c63565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613cd260e084018a613904565b8381036040850152613ce4818a613904565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d3857835183529284019291840191600101613d1c565b50909c9b505050505050505050505050565b60008060008060808587031215613d6057600080fd5b843567ffffffffffffffff80821115613d7857600080fd5b613d8488838901613b94565b95506020870135915080821115613d9a57600080fd5b50613da787828801613b94565b9350506040850135613db88161389f565b91506060850135613dc88161389f565b939692955090935050565b600060208284031215613de557600080fd5b813567ffffffffffffffff811681146110e757600080fd5b600080600080600080600060e0888a031215613e1857600080fd5b8735613e238161389f565b96506020880135613e338161389f565b95506040880135945060608801359350608088013560ff81168114613e5757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008083601f840112613e8657600080fd5b50813567ffffffffffffffff811115613e9e57600080fd5b602083019150836020828501011115613eb657600080fd5b9250929050565b60008060008060608587031215613ed357600080fd5b843593506020850135613ee58161389f565b9250604085013567ffffffffffffffff811115613f0157600080fd5b613f0d87828801613e74565b95989497509550505050565b60008060408385031215613f2c57600080fd5b8235613f378161389f565b91506020830135613f478161389f565b809150509250929050565b60008060208385031215613f6557600080fd5b823567ffffffffffffffff811115613f7c57600080fd5b613f8885828601613e74565b90969095509350505050565b600181811c90821680613fa857607f821691505b602082108103613fc857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610faa57610faa613fe4565b81810381811115610faa57610faa613fe4565b67ffffffffffffffff81811683821601908082111561404157614041613fe4565b5092915050565b6001600160a01b03831681526040602082015260006110e46040830184613904565b8281526040602082015260006110e46040830184613904565b6001600160701b0382811682821603908082111561404157614041613fe4565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160701b0381811683821601908082111561404157614041613fe4565b6000806040838503121561410c57600080fd5b82359150602083013567ffffffffffffffff811115613c3e57600080fd5b60008060006060848603121561413f57600080fd5b835161414a8161389f565b602085015190935061415b8161389f565b80925050604084015190509250925092565b60006020828403121561417f57600080fd5b81516110e781613c63565b60006020828403121561419c57600080fd5b5051919050565b601f821115611097576000816000526020600020601f850160051c810160208610156141cc5750805b601f850160051c820191505b818110156141eb578281556001016141d8565b505050505050565b815167ffffffffffffffff81111561420d5761420d613960565b6142218161421b8454613f94565b846141a3565b602080601f831160018114614256576000841561423e5750858301515b600019600386901b1c1916600185901b1785556141eb565b600085815260208120601f198616915b8281101561428557888601518255948401946001909101908401614266565b50858210156142a35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b600082516142db8184602087016138e0565b919091019291505056fea26469706673582212208d446ba58fe57d3197d67f1c7889c87b1c15ca4406402ebec17f0a31e68bd37864736f6c63430008180033