29 txs
82 calls
constructor
constructor(address _treasury, address _referralCode)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
E_ETH_ADDRESS
viewfunction E_ETH_ADDRESS() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
LIQUIDITY_POOL
viewfunction LIQUIDITY_POOL() view returns (address)
owner
viewfunction owner() view returns (address)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
REDEMPTION_MANAGER
viewfunction REDEMPTION_MANAGER() view returns (address)
referralCode
viewfunction referralCode() view returns (address)
SERVICE_ROLE
viewfunction SERVICE_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
treasury
viewfunction treasury() view returns (address)
WE_ETH_ADDRESS
viewfunction WE_ETH_ADDRESS() view returns (address)
WITHDRAW_REQUEST_NFT
viewfunction WITHDRAW_REQUEST_NFT() view returns (address)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
claimWithdrawal
nonpayablefunction claimWithdrawal(uint256 _requestId)
depositETHForEETH
nonpayablefunction depositETHForEETH(bytes32 _idempotencyKey, uint256 _amount)
depositETHForWeETH
nonpayablefunction depositETHForWeETH(bytes32 _idempotencyKey, uint256 _amount)
emergencyWithdrawERC20
nonpayablefunction emergencyWithdrawERC20(address _token, address _to, uint256 _amount)
emergencyWithdrawERC721
nonpayablefunction emergencyWithdrawERC721(address _token, address _to, uint256 _tokenId)
emergencyWithdrawETH
nonpayablefunction emergencyWithdrawETH(address _to, uint256 _amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
instantRedeem
nonpayablefunction instantRedeem(bytes32 _idempotencyKey, uint256 _weETHAmount)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
requestWithdrawal
nonpayablefunction requestWithdrawal(bytes32 _idempotencyKey, uint256 _weETHAmount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setReferralCode
nonpayablefunction setReferralCode(address _referralCode)
setTreasury
nonpayablefunction setTreasury(address _treasury)
unwrapWeETHToEETH
nonpayablefunction unwrapWeETHToEETH(bytes32 _idempotencyKey, uint256 _weETHAmount)
wrapEETHToWeETH
nonpayablefunction wrapEETHToWeETH(bytes32 _idempotencyKey, uint256 _eETHAmount)
events
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
Deposited
event Deposited(bytes32 indexed _idempotencyKey, uint256 _amount, uint256 _eETHShares, address indexed _asset, uint256 _assetAmount)
EmergencyWithdrawnERC20
event EmergencyWithdrawnERC20(address indexed _token, address indexed _to, uint256 _amount)
EmergencyWithdrawnERC721
event EmergencyWithdrawnERC721(address indexed _token, address indexed _to, uint256 _tokenId)
EmergencyWithdrawnETH
event EmergencyWithdrawnETH(address indexed _to, uint256 _amount)
InstantRedeemed
event InstantRedeemed(bytes32 indexed _idempotencyKey, uint256 _weETHAmount)
Received
event Received(address indexed _from, uint256 _amount)
ReferralCodeSet
event ReferralCodeSet(address indexed _referralCode)
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)
TreasurySet
event TreasurySet(address _treasury)
Unwrapped
event Unwrapped(bytes32 indexed _idempotencyKey, uint256 _weETHAmount, uint256 _eETHAmount)
WithdrawalClaimed
event WithdrawalClaimed(uint256 indexed _requestId, uint256 _ethAmount)
WithdrawalRequested
event WithdrawalRequested(bytes32 indexed _idempotencyKey, uint256 _weETHAmount, uint256 indexed _requestId)
Wrapped
event Wrapped(bytes32 indexed _idempotencyKey, uint256 _eETHAmount, uint256 _weETHAmount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
IdempotencyKeyAlreadyExist
error IdempotencyKeyAlreadyExist(bytes32 _idempotencyKey)
InvalidAmount
error InvalidAmount(uint256 _amount)
InvalidRequest
error InvalidRequest(uint256 _requestId)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TooSmallAmount
error TooSmallAmount(uint256 _amount)
ZeroAddress
error ZeroAddress()
creation bytecode
0x608060405234801561001057600080fd5b50604051613a37380380613a3783398101604081905261002f91610317565b62015180338061005a57604051636116401160e11b8152600060048201526024015b60405180910390fd5b600180546001600160d01b0316600160d01b65ffffffffffff8516021790556100846000826100a6565b5050506100968261011760201b60201c565b61009f8161019e565b5050610351565b6000826101045760006100c16002546001600160a01b031690565b6001600160a01b0316146100e857604051631fe1e13d60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0384161790555b61010e83836101f4565b90505b92915050565b60006101228161029e565b6001600160a01b0382166101495760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f9060200160405180910390a15050565b60006101a98161029e565b600480546001600160a01b0319166001600160a01b0384169081179091556040517f93110d9bb8348d59d4cf44dd1807ccc841fe7fcb3423f225b580f5a310132e5790600090a25050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610296576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561024e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610111565b506000610111565b6102a881336102ab565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166102fe5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610051565b5050565b6001600160a01b03811681146102a857600080fd5b6000806040838503121561032a57600080fd5b825161033581610302565b602084015190925061034681610302565b809150509250929050565b6136d7806103606000396000f3fe6080604052600436106102a45760003560e01c806391d148541161016e578063cf6eefb7116100cb578063d8b6d2521161007f578063f595b0f811610064578063f595b0f8146108ba578063f8444436146108da578063ffc3020f146108fa57600080fd5b8063d8b6d2521461086d578063f0f442601461089a57600080fd5b8063d602b9fd116100b0578063d602b9fd14610810578063d78204d014610825578063d79e85671461084d57600080fd5b8063cf6eefb714610797578063d547741f146107f057600080fd5b8063a217fddf11610122578063cc8463c811610107578063cc8463c814610745578063ce559f7b1461075a578063cefc14291461078257600080fd5b8063a217fddf14610710578063b72b85a11461072557600080fd5b8063a16b334811610153578063a16b334814610688578063a1eda53c146106a8578063a20e7d47146106dc57600080fd5b806391d1485414610617578063991334f31461066857600080fd5b806336568abe1161021c578063649a5ec7116101d057806384ef8ffc116101b557806384ef8ffc146105b75780638da5cb5b146105e25780639066b10f146105f757600080fd5b8063649a5ec7146105775780636f2c458e1461059757600080fd5b806355b8fb811161020157806355b8fb811461050a57806361d027b31461052a578063634e93da1461055757600080fd5b806336568abe146104c25780634a3fd833146104e257600080fd5b806315ed8cdb116102735780632a3bd87e116102585780632a3bd87e1461045a5780632cca9dfd1461047a5780632f2ff15d146104a257600080fd5b806315ed8cdb146103cf578063248a9ca31461041c57600080fd5b806301ffc9a7146102e5578063022d63fb1461031a5780630aa6220b14610343578063150b7a021461035a57600080fd5b366102e05760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b3480156102f157600080fd5b506103056103003660046132d1565b61091a565b60405190151581526020015b60405180910390f35b34801561032657600080fd5b50620697805b60405165ffffffffffff9091168152602001610311565b34801561034f57600080fd5b50610358610976565b005b34801561036657600080fd5b5061039e610375366004613364565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610311565b3480156103db57600080fd5b506103f7737d5706f6ef3f89b3951e23e557cdfbc3239d4e2c81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610311565b34801561042857600080fd5b5061044c610437366004613489565b60009081526020819052604090206001015490565b604051908152602001610311565b34801561046657600080fd5b506103586104753660046134a2565b61098c565b34801561048657600080fd5b506103f773308861a430be4cce5502d0a12724771fc6daf21681565b3480156104ae57600080fd5b506103586104bd3660046134c4565b610bb6565b3480156104ce57600080fd5b506103586104dd3660046134c4565b610bfb565b3480156104ee57600080fd5b506103f773dadef1ffbfeaab4f68a9fd181395f68b4e4e7ae081565b34801561051657600080fd5b506103586105253660046134f4565b610d00565b34801561053657600080fd5b506003546103f79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561056357600080fd5b50610358610572366004613535565b610e6f565b34801561058357600080fd5b50610358610592366004613552565b610e83565b3480156105a357600080fd5b506103586105b23660046134a2565b610e97565b3480156105c357600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166103f7565b3480156105ee57600080fd5b506103f7611271565b34801561060357600080fd5b506103586106123660046134a2565b611297565b34801561062357600080fd5b506103056106323660046134c4565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561067457600080fd5b506103586106833660046134a2565b6114e4565b34801561069457600080fd5b506103586106a33660046134a2565b6117f6565b3480156106b457600080fd5b506106bd611a1a565b6040805165ffffffffffff938416815292909116602083015201610311565b3480156106e857600080fd5b5061044c7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b81565b34801561071c57600080fd5b5061044c600081565b34801561073157600080fd5b506103586107403660046134f4565b611a96565b34801561075157600080fd5b5061032c611c28565b34801561076657600080fd5b506103f773cd5fe23c85820f7b72d0926fc9b05b43e359b7ee81565b34801561078e57600080fd5b50610358611cc6565b3480156107a357600080fd5b506001546040805173ffffffffffffffffffffffffffffffffffffffff831681527401000000000000000000000000000000000000000090920465ffffffffffff16602083015201610311565b3480156107fc57600080fd5b5061035861080b3660046134c4565b611d22565b34801561081c57600080fd5b50610358611d63565b34801561083157600080fd5b506103f77335fa164735182de50811e8e2e824cfb9b6118ac281565b34801561085957600080fd5b5061035861086836600461357a565b611d76565b34801561087957600080fd5b506004546103f79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156108a657600080fd5b506103586108b5366004613535565b611e72565b3480156108c657600080fd5b506103586108d5366004613535565b611f45565b3480156108e657600080fd5b506103586108f5366004613489565b611fc0565b34801561090657600080fd5b506103586109153660046134a2565b61210b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f314987860000000000000000000000000000000000000000000000000000000014806109705750610970826123b0565b92915050565b600061098181612447565b610989612451565b50565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b6109b681612447565b81806109fa576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b60405180910390fd5b506003546040517f0b3fbf890000000000000000000000000000000000000000000000000000000081526004810185905273cd5fe23c85820f7b72d0926fc9b05b43e359b7ee60248201523060448201526064810184905273ffffffffffffffffffffffffffffffffffffffff90911690630b3fbf8990608401600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b50506040517fde0e9a3e000000000000000000000000000000000000000000000000000000008152600481018590526000925073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee915063de0e9a3e906024016020604051808303816000875af1158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3891906135a6565b600354909150610b74907335fa164735182de50811e8e2e824cfb9b6118ac29073ffffffffffffffffffffffffffffffffffffffff168361245e565b604080518481526020810183905285917fe5611fea0a8f4a6e8e3a78e1ffcc37bfa6c744b8bf840b105241bf8ae32d32b591015b60405180910390a250505050565b81610bed576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf782826124e4565b5050565b81158015610c23575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b15610cf65760015473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900465ffffffffffff1681151580610c77575065ffffffffffff8116155b80610c8a57504265ffffffffffff821610155b15610ccb576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff821660048201526024016109f1565b5050600180547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff1690555b610bf7828261250f565b6000610d0b81612447565b73ffffffffffffffffffffffffffffffffffffffff8416610d58576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316610da5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8180610de0576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b50610e0273ffffffffffffffffffffffffffffffffffffffff8516848461245e565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167ff563e0862357d06e5752eb37b7057a0b8b5aca7410305cfd9b45865523e48c6d84604051610e6191815260200190565b60405180910390a350505050565b6000610e7a81612447565b610bf782612568565b6000610e8e81612447565b610bf7826125e8565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b610ec181612447565b8180610efc576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b506003546040517f37b60b52000000000000000000000000000000000000000000000000000000008152600481018590523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906337b60b5290606401600060405180830381600087803b158015610f7657600080fd5b505af1158015610f8a573d6000803e3d6000fd5b5050600480546040517ff340fa0100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116918101919091526000925073308861a430be4cce5502d0a12724771fc6daf216915063f340fa0190859060240160206040518083038185885af1158015611019573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061103e91906135a6565b6040517f561bddf80000000000000000000000000000000000000000000000000000000081526004810182905290915060009073308861a430be4cce5502d0a12724771fc6daf2169063561bddf890602401602060405180830381865afa1580156110ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d191906135a6565b9050808061110e576040517fb6b189010000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b506111427335fa164735182de50811e8e2e824cfb9b6118ac273cd5fe23c85820f7b72d0926fc9b05b43e359b7ee83612651565b6040517fea598cb00000000000000000000000000000000000000000000000000000000081526004810182905260009073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee9063ea598cb0906024016020604051808303816000875af11580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d491906135a6565b6003549091506112109073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee9073ffffffffffffffffffffffffffffffffffffffff168361245e565b604080518681526020810185905290810182905273cd5fe23c85820f7b72d0926fc9b05b43e359b7ee9087907fa1737092f6b51697884668a57880bc183cc7c208b663dbc28a46b3858b27d2f99060600160405180910390a3505050505050565b600061129260025473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b6112c181612447565b81806112fc576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b506003546040517f0b3fbf89000000000000000000000000000000000000000000000000000000008152600481018590527335fa164735182de50811e8e2e824cfb9b6118ac260248201523060448201526064810184905273ffffffffffffffffffffffffffffffffffffffff90911690630b3fbf8990608401600060405180830381600087803b15801561139057600080fd5b505af11580156113a4573d6000803e3d6000fd5b506113de92507335fa164735182de50811e8e2e824cfb9b6118ac2915073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee905084612651565b6040517fea598cb00000000000000000000000000000000000000000000000000000000081526004810183905260009073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee9063ea598cb0906024016020604051808303816000875af115801561144c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147091906135a6565b6003549091506114ac9073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee9073ffffffffffffffffffffffffffffffffffffffff168361245e565b604080518481526020810183905285917fb57349a626576ef55a75ad961e2ebefbcc6c589f513224453a48abd1232151f39101610ba8565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61150e81612447565b8180611549576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b506003546040517f37b60b52000000000000000000000000000000000000000000000000000000008152600481018590523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906337b60b5290606401600060405180830381600087803b1580156115c357600080fd5b505af11580156115d7573d6000803e3d6000fd5b5050600480546040517ff340fa0100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116918101919091526000925073308861a430be4cce5502d0a12724771fc6daf216915063f340fa0190859060240160206040518083038185885af1158015611666573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061168b91906135a6565b6040517f561bddf80000000000000000000000000000000000000000000000000000000081526004810182905290915060009073308861a430be4cce5502d0a12724771fc6daf2169063561bddf890602401602060405180830381865afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e91906135a6565b9050808061175b576040517fb6b189010000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b50600354611795907335fa164735182de50811e8e2e824cfb9b6118ac29073ffffffffffffffffffffffffffffffffffffffff168361245e565b60408051858152602081018490529081018290527335fa164735182de50811e8e2e824cfb9b6118ac29086907fa1737092f6b51697884668a57880bc183cc7c208b663dbc28a46b3858b27d2f9906060015b60405180910390a35050505050565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61182081612447565b818061185b576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b506003546040517f0b3fbf890000000000000000000000000000000000000000000000000000000081526004810185905273cd5fe23c85820f7b72d0926fc9b05b43e359b7ee60248201523060448201526064810184905273ffffffffffffffffffffffffffffffffffffffff90911690630b3fbf8990608401600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b5061193d925073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee915073dadef1ffbfeaab4f68a9fd181395f68b4e4e7ae0905084612651565b6003546040517fd3714d820000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff909116602482015273dadef1ffbfeaab4f68a9fd181395f68b4e4e7ae09063d3714d8290604401600060405180830381600087803b1580156119c357600080fd5b505af11580156119d7573d6000803e3d6000fd5b50505050827f4a96c95cb4c57d8801a4747d646623b3bbffd66ddd213f30dc194062a977442283604051611a0d91815260200190565b60405180910390a2505050565b6002546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015158015611a5d57504265ffffffffffff821610155b611a6957600080611a8e565b60025474010000000000000000000000000000000000000000900465ffffffffffff16815b915091509091565b6000611aa181612447565b73ffffffffffffffffffffffffffffffffffffffff8416611aee576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611b3b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8481166024830152604482018490528516906342842e0e90606401600060405180830381600087803b158015611bb157600080fd5b505af1158015611bc5573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3a93e090a68ab1fc3b6fd0bbac2b601137aeed3a033a8109d6de11ab4a52bbd384604051610e6191815260200190565b6002546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015158015611c6a57504265ffffffffffff8216105b611c9c576001547a010000000000000000000000000000000000000000000000000000900465ffffffffffff16611cc0565b60025474010000000000000000000000000000000000000000900465ffffffffffff165b91505090565b60015473ffffffffffffffffffffffffffffffffffffffff16338114611d1a576040517fc22c80220000000000000000000000000000000000000000000000000000000081523360048201526024016109f1565b610989612701565b81611d59576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf782826127f4565b6000611d6e81612447565b610989612819565b6000611d8181612447565b73ffffffffffffffffffffffffffffffffffffffff8316611dce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8180611e09576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b50611e2a73ffffffffffffffffffffffffffffffffffffffff841683612824565b8273ffffffffffffffffffffffffffffffffffffffff167febc5111f91d59b146eb8fce23a0ee9c73905eef7f2b74ef7e3786b729bb7374683604051611a0d91815260200190565b6000611e7d81612447565b73ffffffffffffffffffffffffffffffffffffffff8216611eca576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020015b60405180910390a15050565b6000611f5081612447565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f93110d9bb8348d59d4cf44dd1807ccc841fe7fcb3423f225b580f5a310132e5790600090a25050565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b611fea81612447565b6040517fb13acedd000000000000000000000000000000000000000000000000000000008152600481018390524790737d5706f6ef3f89b3951e23e557cdfbc3239d4e2c9063b13acedd90602401600060405180830381600087803b15801561205257600080fd5b505af1158015612066573d6000803e3d6000fd5b505050506000814761207891906135ee565b905080806120b5576040517fb6b189010000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b506003546120d99073ffffffffffffffffffffffffffffffffffffffff1682612824565b837fbb5d11702bb26785c126c5ffc0d71b0c297803f03e2bc6da0a7462287764dc3782604051610ba891815260200190565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61213581612447565b8180612170576040517f3728b83d0000000000000000000000000000000000000000000000000000000081526004016109f191815260200190565b506003546040517f0b3fbf890000000000000000000000000000000000000000000000000000000081526004810185905273cd5fe23c85820f7b72d0926fc9b05b43e359b7ee60248201523060448201526064810184905273ffffffffffffffffffffffffffffffffffffffff90911690630b3fbf8990608401600060405180830381600087803b15801561220457600080fd5b505af1158015612218573d6000803e3d6000fd5b50506040517fde0e9a3e000000000000000000000000000000000000000000000000000000008152600481018590526000925073cd5fe23c85820f7b72d0926fc9b05b43e359b7ee915063de0e9a3e906024016020604051808303816000875af115801561228a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae91906135a6565b90506122e37335fa164735182de50811e8e2e824cfb9b6118ac273308861a430be4cce5502d0a12724771fc6daf21683612651565b6040517f397a1b280000000000000000000000000000000000000000000000000000000081523060048201526024810182905260009073308861a430be4cce5502d0a12724771fc6daf2169063397a1b28906044016020604051808303816000875af1158015612357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237b91906135a6565b905080857f37a5dc96283c260ba952c99b4383003a337bb17cafd9416409ae55b9ca7fd60e866040516117e791815260200190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061097057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610970565b61098981336128fa565b61245c600080612980565b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526124df91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ada565b505050565b6000828152602081905260409020600101546124ff81612447565b6125098383612b70565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461255e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124df8282612c37565b6000612572611c28565b61257b42612c99565b6125859190613601565b90506125918282612ce9565b60405165ffffffffffff8216815273ffffffffffffffffffffffffffffffffffffffff8316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b60006125f382612d85565b6125fc42612c99565b6126069190613601565b90506126128282612980565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b9101611f39565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156126c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126eb91906135a6565b905061250984846126fc858561361f565b612dcd565b60015473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900465ffffffffffff1680158061275157504265ffffffffffff821610155b15612792576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff821660048201526024016109f1565b6127bb60006127b660025473ffffffffffffffffffffffffffffffffffffffff1690565b612c37565b506127c7600083612b70565b5050600180547fffffffffffff000000000000000000000000000000000000000000000000000016905550565b60008281526020819052604090206001015461280f81612447565b6125098383612c37565b61245c600080612ce9565b80471015612860576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016109f1565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146128ba576040519150601f19603f3d011682016040523d82523d6000602084013e6128bf565b606091505b50509050806124df576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610bf7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016109f1565b6002547a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015612a55574265ffffffffffff82161015612a2b576002546001805479ffffffffffffffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090920465ffffffffffff167a01000000000000000000000000000000000000000000000000000002919091179055612a55565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b506002805473ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000065ffffffffffff9485160279ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a0100000000000000000000000000000000000000000000000000009290931691909102919091179055565b6000612afc73ffffffffffffffffffffffffffffffffffffffff841683612ea5565b90508051600014158015612b21575080806020019051810190612b1f9190613632565b155b156124df576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016109f1565b600082612c26576000612b9860025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614612be5576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b612c308383612eb3565b9392505050565b600082158015612c61575060025473ffffffffffffffffffffffffffffffffffffffff8381169116145b15612c8f57600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b612c308383612faf565b600065ffffffffffff821115612ce5576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260306004820152602481018390526044016109f1565b5090565b600180547401000000000000000000000000000000000000000065ffffffffffff84811682027fffffffffffff0000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8816171790935590041680156124df576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a1505050565b600080612d90611c28565b90508065ffffffffffff168365ffffffffffff1611612db857612db38382613654565b612c30565b612c3065ffffffffffff84166206978061306a565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052612e598482613080565b6125095760405173ffffffffffffffffffffffffffffffffffffffff848116602483015260006044830152612e9b91869182169063095ea7b390606401612498565b6125098482612ada565b6060612c3083836000613142565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16612fa75760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055612f453390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610970565b506000610970565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615612fa75760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610970565b60008183106130795781612c30565b5090919050565b60008060008473ffffffffffffffffffffffffffffffffffffffff16846040516130aa9190613672565b6000604051808303816000865af19150503d80600081146130e7576040519150601f19603f3d011682016040523d82523d6000602084013e6130ec565b606091505b50915091508180156131165750805115806131165750808060200190518101906131169190613632565b8015613139575060008573ffffffffffffffffffffffffffffffffffffffff163b115b95945050505050565b606081471015613180576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016109f1565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516131a99190613672565b60006040518083038185875af1925050503d80600081146131e6576040519150601f19603f3d011682016040523d82523d6000602084013e6131eb565b606091505b50915091506131fb868383613205565b9695505050505050565b60608261321557612db38261328f565b8151158015613239575073ffffffffffffffffffffffffffffffffffffffff84163b155b15613288576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109f1565b5080612c30565b80511561329f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156132e357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612c3057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461098957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561337a57600080fd5b843561338581613313565b9350602085013561339581613313565b925060408501359150606085013567ffffffffffffffff8111156133b857600080fd5b8501601f810187136133c957600080fd5b803567ffffffffffffffff8111156133e3576133e3613335565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561344f5761344f613335565b60405281815282820160200189101561346757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60006020828403121561349b57600080fd5b5035919050565b600080604083850312156134b557600080fd5b50508035926020909101359150565b600080604083850312156134d757600080fd5b8235915060208301356134e981613313565b809150509250929050565b60008060006060848603121561350957600080fd5b833561351481613313565b9250602084013561352481613313565b929592945050506040919091013590565b60006020828403121561354757600080fd5b8135612c3081613313565b60006020828403121561356457600080fd5b813565ffffffffffff81168114612c3057600080fd5b6000806040838503121561358d57600080fd5b823561359881613313565b946020939093013593505050565b6000602082840312156135b857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610970576109706135bf565b65ffffffffffff8181168382160190811115610970576109706135bf565b80820180821115610970576109706135bf565b60006020828403121561364457600080fd5b81518015158114612c3057600080fd5b65ffffffffffff8281168282160390811115610970576109706135bf565b6000825160005b818110156136935760208186018101518583015201613679565b50600092019182525091905056fea2646970667358221220db7e1b6146aa53ebbfe348dd708a80e1f442560d2a01ab89f6776ac98372df4564736f6c634300081d0033000000000000000000000000acb7027f271b03b502d65feba617a0d817d62b8e0000000000000000000000000000000000000000000000000000000000000000