0 txs
0 calls
constructor
constructor()
functions
amlPermitter
viewfunction amlPermitter() view returns (address)
claimableWithdrawals
viewfunction claimableWithdrawals(bytes32) view returns (uint256)
collectedWithdrawalFees
viewfunction collectedWithdrawalFees(uint32) view returns (uint256)
contribution
viewfunction contribution() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deploymentTime
viewfunction deploymentTime() view returns (uint256)
doesDepositHashExist
viewfunction doesDepositHashExist(bytes32) view returns (bool)
eligibilityPermitter
viewfunction eligibilityPermitter() view returns (address)
getDepositData
viewfunction getDepositData(uint256 depositId) view returns (tuple)
getDepositDataBatch
viewfunction getDepositDataBatch(uint256[] depositIds) view returns (tuple[])
getDepositDataHash
viewfunction getDepositDataHash(uint256 depositId) view returns (bytes32)
getLastDepositId
viewfunction getLastDepositId() view returns (uint256)
getLastRelayedDepositId
viewfunction getLastRelayedDepositId() view returns (uint256)
getNativeTokenIndex
purefunction getNativeTokenIndex() pure returns (uint32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTokenIndex
viewfunction getTokenIndex(uint8 tokenType, address tokenAddress, uint256 tokenId) view returns (bool, uint32)
getTokenInfo
viewfunction getTokenInfo(uint32 tokenIndex) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isDepositValid
viewfunction isDepositValid(uint256 depositId, bytes32 recipientSaltHash, uint32 tokenIndex, uint256 amount, bool isEligible, address sender) view returns (bool)
l1ScrollMessenger
viewfunction l1ScrollMessenger() view returns (address)
onERC1155Received
purefunction onERC1155Received(address, address, uint256, uint256, bytes) pure returns (bytes4)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
RELAY_LIMIT
viewfunction RELAY_LIMIT() view returns (uint256)
RELAYER
viewfunction RELAYER() view returns (bytes32)
rollup
viewfunction rollup() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
WITHDRAWAL_FEE_RATIO_LIMIT
viewfunction WITHDRAWAL_FEE_RATIO_LIMIT() view returns (uint256)
WITHDRAWAL
viewfunction WITHDRAWAL() view returns (bytes32)
withdrawalFeeRatio
viewfunction withdrawalFeeRatio(uint32) view returns (uint256)
cancelDeposit
nonpayablefunction cancelDeposit(uint256 depositId, tuple deposit)
claimWithdrawals
nonpayablefunction claimWithdrawals(tuple[] withdrawals)
depositERC1155
nonpayablefunction depositERC1155(address tokenAddress, bytes32 recipientSaltHash, uint256 tokenId, uint256 amount, bytes amlPermission, bytes eligibilityPermission)
depositERC20
nonpayablefunction depositERC20(address tokenAddress, bytes32 recipientSaltHash, uint256 amount, bytes amlPermission, bytes eligibilityPermission)
depositERC721
nonpayablefunction depositERC721(address tokenAddress, bytes32 recipientSaltHash, uint256 tokenId, bytes amlPermission, bytes eligibilityPermission)
depositNativeToken
payablefunction depositNativeToken(bytes32 recipientSaltHash, bytes amlPermission, bytes eligibilityPermission) payable
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, address _l1ScrollMessenger, address _rollup, address _withdrawal, address _claim, address _relayer, address _contribution, address[] initialERC20Tokens)
pauseDeposits
nonpayablefunction pauseDeposits()
processWithdrawals
nonpayablefunction processWithdrawals(tuple[] withdrawals, bytes32[] withdrawalHashes)
relayDeposits
payablefunction relayDeposits(uint256 upToDepositId, uint256 gasLimit) payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setPermitter
nonpayablefunction setPermitter(address _amlPermitter, address _eligibilityPermitter)
setWithdrawalFeeRatio
nonpayablefunction setWithdrawalFeeRatio(uint32 tokenIndex, uint256 feeRatio)
unpauseDeposits
nonpayablefunction unpauseDeposits()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawCollectedFees
nonpayablefunction withdrawCollectedFees(address recipient, uint32[] tokenIndices)
events
ClaimedWithdrawal
event ClaimedWithdrawal(address indexed recipient, bytes32 indexed withdrawalHash)
DepositCanceled
event DepositCanceled(uint256 indexed depositId)
Deposited
event Deposited(uint256 indexed depositId, address indexed sender, bytes32 indexed recipientSaltHash, uint32 tokenIndex, uint256 amount, bool isEligible, uint256 depositedAt)
DepositsRelayed
event DepositsRelayed(uint256 indexed upToDepositId, uint256 gasLimit, bytes message)
DirectWithdrawalFailed
event DirectWithdrawalFailed(bytes32 indexed withdrawalHash, (address recipient, uint32 tokenIndex, uint256 amount, bytes32 nullifier) withdrawal)
DirectWithdrawalSuccessed
event DirectWithdrawalSuccessed(bytes32 indexed withdrawalHash, address indexed recipient)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
PermitterSet
event PermitterSet(address indexed amlPermitter, address indexed eligibilityPermitter)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WithdrawalClaimable
event WithdrawalClaimable(bytes32 indexed withdrawalHash)
WithdrawalFeeCollected
event WithdrawalFeeCollected(uint32 indexed token, uint256 amount)
WithdrawalFeeRatioSet
event WithdrawalFeeRatioSet(uint32 indexed tokenIndex, uint256 feeRatio)
WithdrawalFeeWithdrawn
event WithdrawalFeeWithdrawn(address indexed recipient, uint32 indexed token, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressZero
error AddressZero()
AlreadyRelayed
error AlreadyRelayed()
AmlValidationFailed
error AmlValidationFailed()
DepositAmountExceedsLimit
error DepositAmountExceedsLimit(uint256 depositAmount, uint256 limit)
DepositHashAlreadyExists
error DepositHashAlreadyExists(bytes32 depositHash)
EligibilityValidationFailed
error EligibilityValidationFailed()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidDepositHash
error InvalidDepositHash(bytes32 depositDataHash, bytes32 calculatedHash)
InvalidInitialization
error InvalidInitialization()
InvalidWithdrawalAddress
error InvalidWithdrawalAddress()
NotInitializing
error NotInitializing()
OnlySenderCanCancelDeposit
error OnlySenderCanCancelDeposit()
OutOfRange
error OutOfRange(uint256 upToDepositId, uint256 firstDepositId, uint256 lastDepositId)
RelayLimitExceeded
error RelayLimitExceeded()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SenderIsNotScrollMessenger
error SenderIsNotScrollMessenger()
TokenAddressIsZero
error TokenAddressIsZero()
TriedToDepositZero
error TriedToDepositZero()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WithdrawalAddressNotSet
error WithdrawalAddressNotSet()
WithdrawalFeeRatioExceedsLimit
error WithdrawalFeeRatioExceedsLimit()
WithdrawalNotFound
error WithdrawalNotFound(bytes32 withdrawalHash)
creation bytecode
0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516146396100fd600039600081816121ff01528181612228015261236c01526146396000f3fe6080604052600436106102ae5760003560e01c8063902eeef311610175578063c60af2b5116100dc578063d547741f11610095578063ea4644bb1161006f578063ea4644bb146108cc578063ecda10f5146108ec578063f23a6e6114610902578063f6a552d41461094857600080fd5b8063d547741f1461086a578063dd9ea2991461088a578063e579fa2b1461089f57600080fd5b8063c60af2b514610783578063cb23bcb5146107b0578063cbd90cd0146107d0578063cd6a976e146107fd578063d395c0171461081d578063d438c3491461084a57600080fd5b80639d07861c1161012e5780639d07861c146106a35780639d6a54cb146106c3578063a217fddf146106e3578063a98f7044146106f8578063ad3cb1cc14610718578063c13819b61461075657600080fd5b8063902eeef3146105e357806391d148541461060357806391f69b7d14610623578063978069b414610643578063986be0e2146106635780639c79a31c1461068357600080fd5b80634f1ef286116102195780635c975abb116101d25780635c975abb146105315780635edeb2a31461055657806363d8882a14610586578063675178371461059b57806376918c0d146105b057806385979730146105c357600080fd5b80634f1ef2861461047b57806350520b1f1461048e57806352d1902d146104c657806354adcb99146104db5780635521f77e146104f157806358dec40a1461051157600080fd5b80632f2ff15d1161026b5780632f2ff15d146103aa57806336568abe146103ca578063381175f6146103ea5780633cd07066146104265780633de40cfa14610446578063433f6c121461045957600080fd5b806301ffc9a7146102b357806302191980146102e8578063219cd263146102ff578063232c1c8a1461031b5780632483e71514610348578063248a9ca31461038a575b600080fd5b3480156102bf57600080fd5b506102d36102ce36600461380a565b61095e565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b506102fd610995565b005b34801561030b57600080fd5b50604051600081526020016102df565b34801561032757600080fd5b5061033b61033636600461389d565b6109ab565b6040516102df919061392d565b34801561035457600080fd5b5061037c7fab4f864e5201b0fde9b5ee3e4cf96384802b0ffdfcf7f9de4699ce21a30afc4f81565b6040519081526020016102df565b34801561039657600080fd5b5061037c6103a536600461398e565b610aac565b3480156103b657600080fd5b506102fd6103c53660046139bc565b610ace565b3480156103d657600080fd5b506102fd6103e53660046139bc565b610af0565b3480156103f657600080fd5b5061040a6104053660046139ec565b610b28565b60408051921515835263ffffffff9091166020830152016102df565b34801561043257600080fd5b506102fd610441366004613a4a565b610c43565b6102fd610454366004613abc565b610cc8565b34801561046557600080fd5b5061037c6000805160206145e483398151915281565b6102fd610489366004613b39565b610dbd565b34801561049a57600080fd5b506005546104ae906001600160a01b031681565b6040516001600160a01b0390911681526020016102df565b3480156104d257600080fd5b5061037c610ddc565b3480156104e757600080fd5b5061037c6101c281565b3480156104fd57600080fd5b506102fd61050c366004613be4565b610df9565b34801561051d57600080fd5b506102fd61052c366004613cc1565b610f24565b34801561053d57600080fd5b506000805160206145c48339815191525460ff166102d3565b34801561056257600080fd5b506102d361057136600461398e565b600c6020526000908152604090205460ff1681565b34801561059257600080fd5b506102fd611023565b3480156105a757600080fd5b5061037c611036565b6102fd6105be366004613d15565b61104d565b3480156105cf57600080fd5b506008546104ae906001600160a01b031681565b3480156105ef57600080fd5b506102fd6105fe366004613d37565b6111b5565b34801561060f57600080fd5b506102d361061e3660046139bc565b61121f565b34801561062f57600080fd5b506102fd61063e366004613da9565b611257565b34801561064f57600080fd5b506007546104ae906001600160a01b031681565b34801561066f57600080fd5b5061037c61067e36600461398e565b611404565b34801561068f57600080fd5b506102fd61069e366004613dea565b611435565b3480156106af57600080fd5b506102d36106be366004613e30565b6115ad565b3480156106cf57600080fd5b506102fd6106de366004613e95565b61167f565b3480156106ef57600080fd5b5061037c600081565b34801561070457600080fd5b506004546104ae906001600160a01b031681565b34801561072457600080fd5b50610749604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102df9190613f54565b34801561076257600080fd5b5061077661077136600461398e565b611750565b6040516102df9190613f67565b34801561078f57600080fd5b5061037c61079e366004613f87565b600b6020526000908152604090205481565b3480156107bc57600080fd5b506006546104ae906001600160a01b031681565b3480156107dc57600080fd5b506107f06107eb366004613f87565b6117b1565b6040516102df9190613fb8565b34801561080957600080fd5b506102fd610818366004613be4565b611854565b34801561082957600080fd5b5061037c610838366004613f87565b600a6020526000908152604090205481565b34801561085657600080fd5b506102fd610865366004614003565b6119b4565b34801561087657600080fd5b506102fd6108853660046139bc565b611b43565b34801561089657600080fd5b5061037c611b5f565b3480156108ab57600080fd5b5061037c6108ba36600461398e565b60096020526000908152604090205481565b3480156108d857600080fd5b506102fd6108e73660046140a5565b611b71565b3480156108f857600080fd5b5061037c60035481565b34801561090e57600080fd5b5061092f61091d3660046141cd565b63f23a6e6160e01b9695505050505050565b6040516001600160e01b031990911681526020016102df565b34801561095457600080fd5b5061037c6105dc81565b60006001600160e01b03198216637965db0b60e01b148061098f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006109a081611e82565b6109a8611e8c565b50565b6060600082516001600160401b038111156109c8576109c8613834565b604051908082528060200260200182016040528015610a0d57816020015b60408051808201909152600080825260208201528152602001906001900390816109e65790505b50905060005b8351811015610aa557600d600001848281518110610a3357610a33614248565b602002602001015181548110610a4b57610a4b614248565b60009182526020918290206040805180820190915260029092020180548252600101546001600160a01b0316918101919091528251839083908110610a9257610a92614248565b6020908102919091010152600101610a13565b5092915050565b60009081526000805160206145a4833981519152602052604090206001015490565b610ad782610aac565b610ae081611e82565b610aea8383611eef565b50505050565b6001600160a01b0381163314610b195760405163334bd91960e11b815260040160405180910390fd5b610b238282611f94565b505050565b60008080856003811115610b3e57610b3e613fa2565b03610b4f5750600190506000610c3b565b6001600160a01b038416610b765760405163dc2e5e8d60e01b815260040160405180910390fd5b6001856003811115610b8a57610b8a613fa2565b03610bc1576001600160a01b03841660009081526001602052604090205463ffffffff168015610bbf57600192509050610c3b565b505b6002856003811115610bd557610bd5613fa2565b1480610bf257506003856003811115610bf057610bf0613fa2565b145b15610c34576001600160a01b038416600090815260026020908152604080832086845290915290205463ffffffff168015610c3257600192509050610c3b565b505b5060009050805b935093915050565b6000610c4e81611e82565b6105dc821115610c715760405163886349bb60e01b815260040160405180910390fd5b63ffffffff83166000818152600a602052604090819020849055517ff5a91001916153e67eaaa2ae82827a002838792ca48af87df63408cc09cb96f490610cbb9085815260200190565b60405180910390a2505050565b610cd0612010565b34600003610cf1576040516394fe88d960e01b815260040160405180910390fd5b60008086604051602401610d0791815260200190565b60408051601f198184030181529190526020810180516001600160e01b031660016215566760e11b03191790529050610db4610d403390565b888434858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525061204392505050565b50505050505050565b610dc56121f4565b610dce82612299565b610dd882826122a4565b5050565b6000610de6612361565b5060008051602061458483398151915290565b610e01612010565b84600003610e22576040516394fe88d960e01b815260040160405180910390fd5b610e376001600160a01b0388163330886123aa565b6000610e466001896000612411565b6040516001600160a01b038a166024820152604481018990526064810188905290915060009060840160408051601f198184030181529190526020810180516001600160e01b031663788c2ecf60e01b1790529050610f19610ea53390565b89848a858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525061204392505050565b505050505050505050565b6000610f2f81611e82565b60005b8281101561101c576000848483818110610f4e57610f4e614248565b9050602002016020810190610f639190613f87565b63ffffffff81166000908152600b6020526040812054919250819003610f8a575050611014565b63ffffffff82166000908152600b60205260408120819055610fab836117b1565b9050610fc6816000015182602001518a85856040015161244b565b8263ffffffff16886001600160a01b03167f6c8628f02ab9884920c84f6f3507810561c8ed6c4b3bae0ce96eceab6def228b8460405161100891815260200190565b60405180910390a35050505b600101610f32565b5050505050565b600061102e81611e82565b6109a86125c6565b600e5460009061104890600190614274565b905090565b7fab4f864e5201b0fde9b5ee3e4cf96384802b0ffdfcf7f9de4699ce21a30afc4f61107781611e82565b6000611084600d8561260c565b90506101c2815111156110aa57604051635a8a34e560e01b815260040160405180910390fd5b600063f03efa3760e01b85836040516024016110c7929190614287565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526004546006549192506001600160a01b0390811691635f7b157791349116600085896111223390565b6040518763ffffffff1660e01b81526004016111429594939291906142d6565b6000604051808303818588803b15801561115b57600080fd5b505af115801561116f573d6000803e3d6000fd5b5050505050847f71df2a50f3ab1563277a27043770eb570eeaa3fc42ef76c607cdc667a82d03a485836040516111a692919061431f565b60405180910390a25050505050565b60006111c081611e82565b600780546001600160a01b03199081166001600160a01b03868116918217909355600880549092169285169283179091556040517ff670cdc1c52016a5cec857c88e8948913b39f86889230c0661b011fd2ed57df590600090a3505050565b60009182526000805160206145a4833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60005b81811015610b2357600083838381811061127657611276614248565b90506080020180360381019061128c9190614338565b90506000611299826127d4565b600081815260096020526040812054919250036112d157604051630181cdef60e61b8152600481018290526024015b60405180910390fd5b60006112e583602001518460400151612851565b905060008184604001516112f99190614274565b9050600061130a85602001516117b1565b9050600960008581526020019081526020016000206000905561134081600001518260200151876000015185856040015161244b565b845160405185916001600160a01b0316907f0575467d13f5ab9174f470cec96623374b05cf4b19a3c83a4bfca523e243ab0490600090a382156113f35760208086015163ffffffff166000908152600b9091526040812080548592906113a79084906143ac565b92505081905550846020015163ffffffff167f34658d4aa4a80fa713a0f3a04329f39177b5bea34e8dcba253600ee5ade6c654846040516113ea91815260200190565b60405180910390a25b50506001909301925061125a915050565b6000600d600001828154811061141c5761141c614248565b9060005260206000209060020201600001549050919050565b81611445368390038301836143bf565b6000600d600001838154811061145d5761145d614248565b60009182526020918290206040805180820190915260029092020180548252600101546001600160a01b03169181019190915290506114993390565b6001600160a01b031681602001516001600160a01b0316146114ce57604051631165d41f60e31b815260040160405180910390fd5b60006114d983612886565b8251909150811461150a578151604051633df112db60e11b81526004810191909152602481018290526044016112c8565b611512611036565b84116115315760405163d0ebeb4b60e01b815260040160405180910390fd5b600061153e600d88612904565b905060006115556107eb6080890160608a01613f87565b90506115788160000151826020015184602001518a60400135856040015161244b565b60405188907f0c1c0787650562778c282502dfd6dcea2fb79d23783920aa18aee36b4aa3dc4890600090a25050505050505050565b600080600d60000188815481106115c6576115c6614248565b60009182526020808320604080518082018252600290940290910180548452600101546001600160a01b0390811684840152815160a08101835290881681529182018b9052810188905263ffffffff89166060820152861515608082015290925061163090612886565b8251909150811461164657600092505050611675565b836001600160a01b031682602001516001600160a01b03161461166e57600092505050611675565b6001925050505b9695505050505050565b6004546001600160a01b03163381146116ab5760405163d8844f1560e01b815260040160405180910390fd5b61171f6000805160206145e4833981519152826001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e9190614444565b61173c57604051634261081360e11b815260040160405180910390fd5b61174685856129a0565b61101c8383612a79565b6040805180820190915260008082526020820152600d80548390811061177857611778614248565b60009182526020918290206040805180820190915260029092020180548252600101546001600160a01b03169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260008263ffffffff16815481106117e7576117e7614248565b6000918252602090912060408051606081019091526002909202018054829060ff16600381111561181a5761181a613fa2565b600381111561182b5761182b613fa2565b8152815461010090046001600160a01b0316602082015260019091015460409091015292915050565b61185c612010565b6001600160a01b0387166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101889052606401600060405180830381600087803b1580156118ba57600080fd5b505af11580156118ce573d6000803e3d6000fd5b5050505060006118e060028988612411565b6040516001600160a01b038a166024820152604481018990526064810188905290915060009060840160408051601f198184030181529190526020810180516001600160e01b03166313e803eb60e31b1790529050610f1961193f3390565b89846001858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525061204392505050565b6119bc612010565b846000036119dd576040516394fe88d960e01b815260040160405180910390fd5b60408051602081018252600081529051637921219560e11b81526001600160a01b038a169163f242432a91611a1d91339130918c918c9190600401614461565b600060405180830381600087803b158015611a3757600080fd5b505af1158015611a4b573d6000803e3d6000fd5b505050506000611a5d60038a89612411565b6040516001600160a01b038b166024820152604481018a9052606481018990526084810188905290915060009060a40160408051601f198184030181529190526020810180516001600160e01b03166326fc02dd60e01b1790529050611b37611ac33390565b8a848a858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525061204392505050565b50505050505050505050565b611b4c82610aac565b611b5581611e82565b610aea8383611f94565b600d5460009061104890600190614274565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015611bb65750825b90506000826001600160401b03166001148015611bd25750303b155b905081158015611be0575080155b15611bfe5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611c2857845460ff60401b1916600160401b1785555b6001600160a01b038d161580611c4557506001600160a01b038c16155b80611c5757506001600160a01b038b16155b80611c6957506001600160a01b038a16155b80611c7b57506001600160a01b038916155b80611c8d57506001600160a01b038816155b80611c9f57506001600160a01b038716155b15611cbd57604051639fabe1c160e01b815260040160405180910390fd5b611cc860008e611eef565b50611cf37fab4f864e5201b0fde9b5ee3e4cf96384802b0ffdfcf7f9de4699ce21a30afc4f89611eef565b50611d0c6000805160206145e48339815191528b611eef565b50611d256000805160206145e48339815191528a611eef565b50611d2e612b65565b611d36612b65565b611d3f86612b6d565b611d47612bbe565b60408051808201909152600080825260208201818152600d8054600180820183559190935292517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5600290930292830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb690910180546001600160a01b039283166001600160a01b031991821617909155600e929092556004805483168f83161790556005805483168a831617905560068054909216908d16179055611e1262015180426144a6565b611e1d9060016143ac565b611e2a90620151806144c8565b6003558315611e7357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b6109a88133612bce565b611e94612010565b6000805160206145c4833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b60006000805160206145a4833981519152611f0a848461121f565b611f8a576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611f403390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061098f565b600091505061098f565b60006000805160206145a4833981519152611faf848461121f565b15611f8a576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061098f565b6000805160206145c48339815191525460ff16156120415760405163d93c066560e01b815260040160405180910390fd5b565b61204d8383612c07565b60006120598483612cb5565b9050600061206987600354612d85565b9050808611156120965760405163539163e160e01b815260048101879052602481018290526044016112c8565b60006120d86040518060a001604052808c6001600160a01b031681526020018b81526020018981526020018a63ffffffff168152602001851515815250612886565b6000818152600c602052604090205490915060ff161561210e5760405163bff0e9e760e01b8152600481018290526024016112c8565b6000818152600c60205260408120805460ff19166001179055612188600d838d8254604080518082019091529283526001600160a01b0391821660208085019182526001808401875560009687529520935160028302909401938455519290930180546001600160a01b0319169290911691909117905590565b6040805163ffffffff8c168152602081018b90528615158183015242606082015290519192508b916001600160a01b038e169184917f1061e9784cdd951f4cbc394956165b3a94cf872a3afda95fc76b55cefb35cc519181900360800190a45050505050505050505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061227b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661226f600080516020614584833981519152546001600160a01b031690565b6001600160a01b031614155b156120415760405163703e46dd60e11b815260040160405180910390fd5b6000610dd881611e82565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122fe575060408051601f3d908101601f191682019092526122fb918101906144df565b60015b61232657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016112c8565b600080516020614584833981519152811461235757604051632a87526960e21b8152600481018290526024016112c8565b610b238383613008565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146120415760405163703e46dd60e11b815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610aea9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061305e565b6000806000612421868686610b28565b9150915081156124345791506124449050565b61243f8686866130cf565b925050505b9392505050565b600085600381111561245f5761245f613fa2565b036124a0576040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015801561249a573d6000803e3d6000fd5b5061101c565b60018560038111156124b4576124b4613fa2565b036124d2576124cd6001600160a01b0385168484613291565b61101c565b60028560038111156124e6576124e6613fa2565b03612558576040516323b872dd60e01b81523060048201526001600160a01b038481166024830152604482018390528516906323b872dd90606401600060405180830381600087803b15801561253b57600080fd5b505af115801561254f573d6000803e3d6000fd5b5050505061101c565b60408051602081018252600081529051637921219560e11b81526001600160a01b0386169163f242432a9161259891309188918791899190600401614461565b600060405180830381600087803b1580156125b257600080fd5b505af1158015610f19573d6000803e3d6000fd5b6125ce6132c2565b6000805160206145c4833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611ed1565b60018201548254606091908310158061262457508083105b156126655783548390829061263b90600190614274565b604051634a0dd9bd60e01b81526004810193909352602483019190915260448201526064016112c8565b6000815b8481116126c957855460009087908390811061268757612687614248565b60009182526020909120600160029092020101546001600160a01b0316146126b757816126b3816144f8565b9250505b806126c1816144f8565b915050612669565b506000816001600160401b038111156126e4576126e4613834565b60405190808252806020026020018201604052801561270d578160200160208202803683370190505b5090506000835b8681116127b857875460009089908390811061273257612732614248565b60009182526020909120600160029092020101546001600160a01b0316146127a65787600001818154811061276957612769614248565b90600052602060002090600202016000015483838151811061278d5761278d614248565b6020908102919091010152816127a2816144f8565b9250505b806127b0816144f8565b915050612714565b506127c48660016143ac565b6001880155509250505092915050565b60008160000151826020015183604001518460600151604051602001612834949392919060609490941b6bffffffffffffffffffffffff1916845260e09290921b6001600160e01b03191660148401526018830152603882015260580190565b604051602081830303815290604052805190602001209050919050565b63ffffffff82166000908152600a602052604081205461271061287482856144c8565b61287e91906144a6565b949350505050565b6000816000015182602001518360400151846060015185608001516128ac5760006128af565b60015b60405160609590951b6bffffffffffffffffffffffff191660208601526034850193909352605484019190915260e090811b6001600160e01b03191660748401521b60ff60e01b166078820152607c01612834565b604080518082019091526000808252602082015282600001828154811061292d5761292d614248565b60009182526020918290206040805180820190915260029092020180548252600101546001600160a01b031691810191909152835490915083908390811061297757612977614248565b60009182526020822060029091020190815560010180546001600160a01b031916905592915050565b60005b818110156129e3576129db8383838181106129c0576129c0614248565b9050608002018036038101906129d69190614338565b6132f2565b6001016129a3565b508015610dd85760055460405163f099f9f560e01b81527ff00e60aabbc167f41684e8d81677229edbc0f1876ae2c1ded0a60367465292ab6004820152326024820152604481018390526001600160a01b039091169063f099f9f5906064015b600060405180830381600087803b158015612a5d57600080fd5b505af1158015612a71573d6000803e3d6000fd5b505050505050565b60005b81811015612b01574260096000858585818110612a9b57612a9b614248565b90506020020135815260200190815260200160002081905550828282818110612ac657612ac6614248565b905060200201357fd63a18c6858559d79659151118b33c6ad7cf4f7735b64fe9dbd85c509e11a11760405160405180910390a2600101612a7c565b508015610dd85760055460405163f099f9f560e01b81527f25146e2fbfab3f988e64e94788d256b87c4fa8691f43ec409c49b57436cb7ee66004820152326024820152604481018390526001600160a01b039091169063f099f9f590606401612a43565b61204161357e565b612b7561357e565b612b8260008060006130cf565b5060005b8151811015610dd857612bb56001838381518110612ba657612ba6614248565b602002602001015160006130cf565b50600101612b86565b612bc661357e565b6120416135c7565b612bd8828261121f565b610dd85760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016112c8565b6007546001600160a01b0316612c1b575050565b60075460405163901afa5f60e01b81526000916001600160a01b03169063901afa5f90612c52903390349088908890600401614511565b6020604051808303816000875af1158015612c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c95919061454a565b905080610b2357604051631195542160e11b815260040160405180910390fd5b6008546000906001600160a01b0316612cd05750600161098f565b8151600003612ce15750600061098f565b60085460405163901afa5f60e01b81526000916001600160a01b03169063901afa5f90612d18903390349089908990600401614511565b6020604051808303816000875af1158015612d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5b919061454a565b905080612d7b57604051630a3a260560e01b815260040160405180910390fd5b5060019392505050565b600063ffffffff831615801590612da3575063ffffffff8316600214155b8015612db6575063ffffffff8316600314155b15612dc4575060001961098f565b81421015612e0d5763ffffffff8316612de7575068056bc75e2d6310000061098f565b60011963ffffffff841601612e015750631dcd650061098f565b5064746a52880061098f565b600062015180612e1d8442614274565b612e2791906144a6565b905060006102d88210612e3c57506004612e72565b6102228210612e4d57506003612e72565b61016c8210612e5e57506002612e72565b60b68210612e6e57506001612e72565b5060005b63ffffffff8516612f0a578060ff16600003612e9b5768056bc75e2d631000009250505061098f565b8060ff16600103612eb957681b1ae4d6e2ef5000009250505061098f565b8060ff16600203612ed757683635c9adc5dea000009250505061098f565b8060ff16600303612ef65769010f0cf064dd592000009250505061098f565b69021e19e0c9bab24000009250505061098f565b60011963ffffffff861601612f8e578060ff16600003612f3257631dcd65009250505061098f565b8060ff16600103612f4b57633b9aca009250505061098f565b8060ff16600203612f655764012a05f2009250505061098f565b8060ff16600303612f7f576402540be4009250505061098f565b640ba43b74009250505061098f565b8060ff16600003612fa85764746a5288009250505061098f565b8060ff16600103612fc25764e8d4a510009250505061098f565b8060ff16600203612fdd5765048c273950009250505061098f565b8060ff16600303612ff8576509184e72a0009250505061098f565b652d79883d20009250505061098f565b613011826135e8565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561305657610b23828261364d565b610dd86136c3565b600080602060008451602086016000885af180613081576040513d6000823e3d81fd5b50506000513d915081156130995780600114156130a6565b6001600160a01b0384163b155b15610aea57604051635274afe760e01b81526001600160a01b03851660048201526024016112c8565b6000805460408051606081019091528290808760038111156130f3576130f3613fa2565b81526001600160a01b038716602080830191909152604090910186905282546001818101855560009485529190932082516002909402018054929390929091839160ff19169083600381111561314b5761314b613fa2565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b0319909116178155604090910151600190910155600085600381111561319657613196613fa2565b036131df576000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49805463ffffffff191663ffffffff83161790559050612444565b6001600160a01b0384166132065760405163dc2e5e8d60e01b815260040160405180910390fd5b600185600381111561321a5761321a613fa2565b03613251576001600160a01b0384166000908152600160205260409020805463ffffffff191663ffffffff83161790559050612444565b6001600160a01b0393909316600090815260026020908152604080832094835293905291909120805463ffffffff191663ffffffff841617905550919050565b6040516001600160a01b03838116602483015260448201839052610b2391859182169063a9059cbb906064016123df565b6000805160206145c48339815191525460ff1661204157604051638dfc202b60e01b815260040160405180910390fd5b600061330182602001516117b1565b9050600061331783602001518460400151612851565b9050600081846040015161332b9190614274565b9050600160008451600381111561334457613344613fa2565b036133795784516040516000916001600160a01b03169084156108fc0290859084818181858888f195506133fa945050505050565b60018451600381111561338e5761338e613fa2565b036133f6578451604080516001600160a01b0392831660248201526044808201869052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b17905286015190916133ee9116826136e2565b9150506133fa565b5060005b80156134bd5784516001600160a01b0316613414866127d4565b6040517f6a65a945f1306f9bb3d4e3ce63aa367de6976a375de002492404554392c2460e90600090a382156124cd5760208086015163ffffffff166000908152600b90915260408120805485929061346d9084906143ac565b92505081905550846020015163ffffffff167f34658d4aa4a80fa713a0f3a04329f39177b5bea34e8dcba253600ee5ade6c654846040516134b091815260200190565b60405180910390a261101c565b60006134c8866127d4565b600081815260096020526040908190204290555190915081907fedf8120f63daf877f6cb9aa7a3e21724c4532681d4afd77a45561904f1a045999061354390899081516001600160a01b0316815260208083015163ffffffff1690820152604080830151908201526060918201519181019190915260800190565b60405180910390a260405181907fd63a18c6858559d79659151118b33c6ad7cf4f7735b64fe9dbd85c509e11a11790600090a2505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661204157604051631afcd79f60e31b815260040160405180910390fd5b6135cf61357e565b6000805160206145c4833981519152805460ff19169055565b806001600160a01b03163b60000361361e57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016112c8565b60008051602061458483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161366a9190614567565b600060405180830381855af49150503d80600081146136a5576040519150601f19603f3d011682016040523d82523d6000602084013e6136aa565b606091505b50915091506136ba858383613785565b95945050505050565b34156120415760405163b398979f60e01b815260040160405180910390fd5b6000806000846001600160a01b0316846040516136ff9190614567565b6000604051808303816000865af19150503d806000811461373c576040519150601f19603f3d011682016040523d82523d6000602084013e613741565b606091505b509150915081801561376b57508051158061376b57508080602001905181019061376b919061454a565b80156136ba5750505050506001600160a01b03163b151590565b60608261379a57613795826137e1565b612444565b81511580156137b157506001600160a01b0384163b155b156137da57604051639996b31560e01b81526001600160a01b03851660048201526024016112c8565b5080612444565b8051156137f15780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60006020828403121561381c57600080fd5b81356001600160e01b03198116811461244457600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561387257613872613834565b604052919050565b60006001600160401b0382111561389357613893613834565b5060051b60200190565b6000602082840312156138af57600080fd5b81356001600160401b038111156138c557600080fd5b8201601f810184136138d657600080fd5b80356138e96138e48261387a565b61384a565b8082825260208201915060208360051b85010192508683111561390b57600080fd5b6020840193505b82841015611675578335825260209384019390910190613912565b602080825282518282018190526000918401906040840190835b818110156139835761396d838551805182526020908101516001600160a01b0316910152565b6020939093019260409290920191600101613947565b509095945050505050565b6000602082840312156139a057600080fd5b5035919050565b6001600160a01b03811681146109a857600080fd5b600080604083850312156139cf57600080fd5b8235915060208301356139e1816139a7565b809150509250929050565b600080600060608486031215613a0157600080fd5b833560048110613a1057600080fd5b92506020840135613a20816139a7565b929592945050506040919091013590565b803563ffffffff81168114613a4557600080fd5b919050565b60008060408385031215613a5d57600080fd5b613a6683613a31565b946020939093013593505050565b60008083601f840112613a8657600080fd5b5081356001600160401b03811115613a9d57600080fd5b602083019150836020828501011115613ab557600080fd5b9250929050565b600080600080600060608688031215613ad457600080fd5b8535945060208601356001600160401b03811115613af157600080fd5b613afd88828901613a74565b90955093505060408601356001600160401b03811115613b1c57600080fd5b613b2888828901613a74565b969995985093965092949392505050565b60008060408385031215613b4c57600080fd5b8235613b57816139a7565b915060208301356001600160401b03811115613b7257600080fd5b8301601f81018513613b8357600080fd5b80356001600160401b03811115613b9c57613b9c613834565b613baf601f8201601f191660200161384a565b818152866020838501011115613bc457600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600080600060a0888a031215613bff57600080fd5b8735613c0a816139a7565b9650602088013595506040880135945060608801356001600160401b03811115613c3357600080fd5b613c3f8a828b01613a74565b90955093505060808801356001600160401b03811115613c5e57600080fd5b613c6a8a828b01613a74565b989b979a50959850939692959293505050565b60008083601f840112613c8f57600080fd5b5081356001600160401b03811115613ca657600080fd5b6020830191508360208260051b8501011115613ab557600080fd5b600080600060408486031215613cd657600080fd5b8335613ce1816139a7565b925060208401356001600160401b03811115613cfc57600080fd5b613d0886828701613c7d565b9497909650939450505050565b60008060408385031215613d2857600080fd5b50508035926020909101359150565b60008060408385031215613d4a57600080fd5b8235613d55816139a7565b915060208301356139e1816139a7565b60008083601f840112613d7757600080fd5b5081356001600160401b03811115613d8e57600080fd5b6020830191508360208260071b8501011115613ab557600080fd5b60008060208385031215613dbc57600080fd5b82356001600160401b03811115613dd257600080fd5b613dde85828601613d65565b90969095509350505050565b60008082840360c0811215613dfe57600080fd5b8335925060a0601f1982011215613e1457600080fd5b506020830190509250929050565b80151581146109a857600080fd5b60008060008060008060c08789031215613e4957600080fd5b8635955060208701359450613e6060408801613a31565b9350606087013592506080870135613e7781613e22565b915060a0870135613e87816139a7565b809150509295509295509295565b60008060008060408587031215613eab57600080fd5b84356001600160401b03811115613ec157600080fd5b613ecd87828801613d65565b90955093505060208501356001600160401b03811115613eec57600080fd5b613ef887828801613c7d565b95989497509550505050565b60005b83811015613f1f578181015183820152602001613f07565b50506000910152565b60008151808452613f40816020860160208601613f04565b601f01601f19169290920160200192915050565b6020815260006124446020830184613f28565b815181526020808301516001600160a01b0316908201526040810161098f565b600060208284031215613f9957600080fd5b61244482613a31565b634e487b7160e01b600052602160045260246000fd5b8151606082019060048110613fdd57634e487b7160e01b600052602160045260246000fd5b82526020838101516001600160a01b031690830152604092830151929091019190915290565b60008060008060008060008060c0898b03121561401f57600080fd5b883561402a816139a7565b975060208901359650604089013595506060890135945060808901356001600160401b0381111561405a57600080fd5b6140668b828c01613a74565b90955093505060a08901356001600160401b0381111561408557600080fd5b6140918b828c01613a74565b999c989b5096995094979396929594505050565b600080600080600080600080610100898b0312156140c257600080fd5b88356140cd816139a7565b975060208901356140dd816139a7565b965060408901356140ed816139a7565b955060608901356140fd816139a7565b9450608089013561410d816139a7565b935060a089013561411d816139a7565b925060c089013561412d816139a7565b915060e08901356001600160401b0381111561414857600080fd5b89016000601f82018c1361415b57600080fd5b81356141696138e48261387a565b8082825260208201915060208360051b86010192508e83111561418b57600080fd5b6020850194505b828510156141b65784356141a5816139a7565b825260209485019490910190614192565b9b9e9a9d50989b5096999598949750929550505050565b60008060008060008060a087890312156141e657600080fd5b86356141f1816139a7565b95506020870135614201816139a7565b9450604087013593506060870135925060808701356001600160401b0381111561422a57600080fd5b61423689828a01613a74565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561098f5761098f61425e565b6000604082018483526040602084015280845180835260608501915060208601925060005b818110156142ca5783518352602093840193909201916001016142ac565b50909695505050505050565b60018060a01b038616815284602082015260a0604082015260006142fd60a0830186613f28565b6060830194909452506001600160a01b03919091166080909101529392505050565b82815260406020820152600061287e6040830184613f28565b6000608082840312801561434b57600080fd5b50604051608081016001600160401b038111828210171561436e5761436e613834565b604052823561437c816139a7565b815261438a60208401613a31565b6020820152604083810135908201526060928301359281019290925250919050565b8082018082111561098f5761098f61425e565b600060a08284031280156143d257600080fd5b5060405160a081016001600160401b03811182821017156143f5576143f5613834565b6040528235614403816139a7565b8152602083810135908201526040808401359082015261442560608401613a31565b6060820152608083013561443881613e22565b60808201529392505050565b60006020828403121561445657600080fd5b8151612444816139a7565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061449b90830184613f28565b979650505050505050565b6000826144c357634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761098f5761098f61425e565b6000602082840312156144f157600080fd5b5051919050565b60006001820161450a5761450a61425e565b5060010190565b60018060a01b03851681528360208201526080604082015260006145386080830185613f28565b828103606084015261449b8185613f28565b60006020828403121561455c57600080fd5b815161244481613e22565b60008251614579818460208701613f04565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300738128fe393bef1bcd8a524796fff40618b938cd467c71fcf37850ab0ba4f7d7a26469706673582212203a4f273752f16779df43ffb64e4a8b60c5d15d8382761872b4b64b89ca7103bc64736f6c634300081b0033