0 txs
3 calls
constructor
constructor(address mToken_, address registrar_)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
EARNERS_LIST_IGNORED_KEY
viewfunction EARNERS_LIST_IGNORED_KEY() view returns (bytes32)
EARNERS_LIST_NAME
viewfunction EARNERS_LIST_NAME() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isTrustedRouter
viewfunction isTrustedRouter(address router) view returns (bool)
M_SWAPPER_ROLE
viewfunction M_SWAPPER_ROLE() view returns (bytes32)
msgSender
viewfunction msgSender() view returns (address)
mToken
viewfunction mToken() view returns (address)
registrar
viewfunction registrar() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setTrustedRouter
nonpayablefunction setTrustedRouter(address router, bool trusted)
swap
nonpayablefunction swap(address extensionIn, address extensionOut, uint256 amount, address recipient)
swapInM
nonpayablefunction swapInM(address extensionOut, uint256 amount, address recipient)
swapInMWithPermit
nonpayablefunction swapInMWithPermit(address extensionOut, uint256 amount, address recipient, uint256 deadline, bytes signature)
swapInMWithPermit
nonpayablefunction swapInMWithPermit(address extensionOut, uint256 amount, address recipient, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
swapOutM
nonpayablefunction swapOutM(address extensionIn, uint256 amount, address recipient)
swapOutMWithPermit
nonpayablefunction swapOutMWithPermit(address extensionIn, uint256 amount, address recipient, uint256 deadline, bytes signature)
swapOutMWithPermit
nonpayablefunction swapOutMWithPermit(address extensionIn, uint256 amount, address recipient, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
swapWithPermit
nonpayablefunction swapWithPermit(address extensionIn, address extensionOut, uint256 amount, address recipient, uint256 deadline, bytes signature)
swapWithPermit
nonpayablefunction swapWithPermit(address extensionIn, address extensionOut, uint256 amount, address recipient, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
events
Initialized
event Initialized(uint64 version)
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)
Swapped
event Swapped(address indexed extensionIn, address indexed extensionOut, uint256 amount, address indexed recipient)
SwappedInM
event SwappedInM(address indexed extensionOut, uint256 amount, address indexed recipient)
SwappedOutM
event SwappedOutM(address indexed extensionIn, uint256 amount, address indexed recipient)
TrustedRouterSet
event TrustedRouterSet(address indexed router, bool trusted)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
ContractLocked
error ContractLocked()
InvalidInitialization
error InvalidInitialization()
NotApprovedExtension
error NotApprovedExtension(address extension)
NotApprovedSwapper
error NotApprovedSwapper(address account)
NotInitializing
error NotInitializing()
ZeroAdmin
error ZeroAdmin()
ZeroMToken
error ZeroMToken()
ZeroRegistrar
error ZeroRegistrar()
ZeroRouter
error ZeroRouter()
creation bytecode
0x60c060405234801561000f575f80fd5b50604051612e20380380612e2083398101604081905261002e91610162565b610036610095565b6001600160a01b03821660808190526100625760405163b01d5e2b60e01b815260040160405180910390fd5b6001600160a01b03811660a081905261008e576040516379a6314960e01b815260040160405180910390fd5b5050610193565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101445780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461015d575f80fd5b919050565b5f8060408385031215610173575f80fd5b61017c83610147565b915061018a60208401610147565b90509250929050565b60805160a051612c2d6101f35f395f81816102c0015281816123ff01526124f001525f818161044a015281816106f2015281816111cb015281816118fc015281816119c801528181611cae0152818161224801526125a00152612c2d5ff3fe608060405234801561000f575f80fd5b506004361061019a575f3560e01c806391d14854116100e8578063c3b6f93911610093578063ccf43d2f1161006e578063ccf43d2f14610492578063d547741f146104a5578063d737d0c7146104b8578063e274ffb8146104df575f80fd5b8063c3b6f93914610445578063c4d66de81461046c578063c64f53511461047f575f80fd5b8063a8ffb8a5116100c3578063a8ffb8a5146103f8578063aaaad0981461041f578063af87015714610432575f80fd5b806391d148541461037a5780639e5e91f4146103de578063a217fddf146103f1575f80fd5b80632b20e397116101485780635a734520116101235780635a7345201461032d5780635d77e1ca146103545780636e81221c14610367575f80fd5b80632b20e397146102bb5780632f2ff15d1461030757806336568abe1461031a575f80fd5b806314217eed1161017857806314217eed14610210578063248a9ca314610223578063264e97e014610264575f80fd5b806301ffc9a71461019e5780630a85ce8c146101c65780630cf52c27146101fb575b5f80fd5b6101b16101ac36600461270f565b6104f2565b60405190151581526020015b60405180910390f35b6101ed7f6561726e6572735f6c6973745f69676e6f72656400000000000000000000000081565b6040519081526020016101bd565b61020e6102093660046127bb565b61058a565b005b61020e61021e366004612847565b610777565b6101ed6102313660046128c3565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6101b16102723660046128da565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604090205460ff1690565b6102e27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bd565b61020e6103153660046128f5565b61096c565b61020e6103283660046128f5565b6109b5565b6101ed7f6561726e6572730000000000000000000000000000000000000000000000000081565b61020e610362366004612923565b610a13565b61020e6103753660046129ac565b610beb565b6101b16103883660046128f5565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61020e6103ec3660046129fc565b610d3b565b6101ed5f81565b6101ed7fafa8499804819c4de3fc4b1a2e9723737c59b02467b5c043939709ac9f066b4381565b61020e61042d3660046127bb565b610e83565b61020e610440366004612a3b565b611047565b6102e27f000000000000000000000000000000000000000000000000000000000000000081565b61020e61047a3660046128da565b61123e565b61020e61048d366004612ab2565b6113a7565b61020e6104a0366004612a3b565b6114e3565b61020e6104b33660046128f5565b6116c3565b7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c6102e2565b61020e6104ed3660046129fc565b611706565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061058457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c16156105f9576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff1661063457336106a1565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a19190612ade565b90506106ac8161183c565b6106b587611862565b6040517f9fd5a6cf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639fd5a6cf9061073190339030908b908a908a908a90600401612af9565b5f604051808303815f87803b158015610748575f80fd5b505af1925050508015610759575060015b506107658787876118c1565b61076e5f61183c565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c16156107e6576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff16610821573361088e565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088e9190612ade565b90506108998161183c565b6108a289611862565b6108ab88611862565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810186905260ff8516608482015260a4810184905260c4810183905273ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e4015f604051808303815f87803b15801561093a575f80fd5b505af192505050801561094b575060015b5061095889898989611b22565b6109615f61183c565b505050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546109a581611e23565b6109af8383611e2d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a04576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0e8282611f4b565b505050565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c1615610a82576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff16610abd5733610b2a565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2a9190612ade565b9050610b358161183c565b610b3e88611862565b610b4787611862565b6040517f9fd5a6cf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891690639fd5a6cf90610ba390339030908b908a908a908a90600401612af9565b5f604051808303815f87803b158015610bba575f80fd5b505af1925050508015610bcb575060015b50610bd888888888611b22565b610be15f61183c565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c1615610c5a576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff16610c955733610d02565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d029190612ade565b9050610d0d8161183c565b610d1685611862565b610d1f84611862565b610d2b85858585611b22565b610d345f61183c565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c1615610daa576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff16610de55733610e52565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e529190612ade565b9050610e5d8161183c565b610e6684611862565b610e6f33612027565b610e7a8484846120bc565b6109af5f61183c565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c1615610ef2576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff16610f2d5733610f9a565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9a9190612ade565b9050610fa58161183c565b610fae87611862565b610fb733612027565b6040517f9fd5a6cf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881690639fd5a6cf9061101390339030908b908a908a908a90600401612af9565b5f604051808303815f87803b15801561102a575f80fd5b505af192505050801561103b575060015b506107658787876120bc565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c16156110b6576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff166110f1573361115e565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115e9190612ade565b90506111698161183c565b61117288611862565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810186905260ff8516608482015260a4810184905260c481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d505accf9060e4015f604051808303815f87803b158015611221575f80fd5b505af1925050508015611232575060015b50610bd88888886118c1565b5f611247612322565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156112735750825b90505f8267ffffffffffffffff16600114801561128f5750303b155b90508115801561129d575080155b156112d4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113355784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61133e8661234a565b831561139f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f6113b181611e23565b73ffffffffffffffffffffffffffffffffffffffff83166113fe576040517f920d929200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602081905260409091205483151560ff90911615150361145a5750505050565b73ffffffffffffffffffffffffffffffffffffffff84165f818152602083815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527ff03b9904b8234e041267377d7a55ddb345d1ee737d0116a2e621e3a5fad07a7d910160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c1615611552576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff1661158d57336115fa565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fa9190612ade565b90506116058161183c565b61160e88611862565b61161733612027565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810186905260ff8516608482015260a4810184905260c4810183905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e4015f604051808303815f87803b1580156116a6575f80fd5b505af19250505080156116b7575060015b50610bd88888886120bc565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546116fc81611e23565b6109af8383611f4b565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c1615611775576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f157708201859ed3ceee295d1baf4381ae5b622de496b1cee3705ed07c6a50200602052604081205460ff166117b0573361181d565b3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181d9190612ade565b90506118288161183c565b61183184611862565b610e7a8484846118c1565b807f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d50565b61186b816123ad565b6118be576040517f2d32af6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b50565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015611957573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197b9190612b8d565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611a0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a329190612b8d565b506040517fbf376c7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526024820184905284169063bf376c7a906044015f604051808303815f87803b158015611aa0575f80fd5b505af1158015611ab2573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fea5845e6161e56b30740f4a743f316fa77bd8f48b1c3ce6eff595ab0385ba74584604051611b1591815260200190565b60405180910390a3505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905273ffffffffffffffffffffffffffffffffffffffff8516906323b872dd906064016020604051808303815f875af1158015611b98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bbc9190612b8d565b505f611bc730612559565b6040517f39f476930000000000000000000000000000000000000000000000000000000081523060048201526024810185905290915073ffffffffffffffffffffffffffffffffffffffff8616906339f47693906044015f604051808303815f87803b158015611c35575f80fd5b505af1158015611c47573d5f803e3d5ffd5b5050505080611c5530612559565b611c5f9190612ba8565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018390529194507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af1158015611cf6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d1a9190612b8d565b506040517fbf376c7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820185905285169063bf376c7a906044015f604051808303815f87803b158015611d88575f80fd5b505af1158015611d9a573d5f803e3d5ffd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f7621e0d883c1038028d167fa29ecc01dbb8bc0cf673db584432530d693259e5186604051611e1491815260200190565b60405180910390a45050505050565b6118be813361260b565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611f42575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ede3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610584565b5f915050610584565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611f42575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610584565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f6b691b2d012e26a1efd9948ce05990847eae29d1cebd577c171024c61e06d6eb602052604090205460ff166118be576040517f4d9b220600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016118b5565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906064016020604051808303815f875af1158015612132573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121569190612b8d565b505f61216130612559565b6040517f39f476930000000000000000000000000000000000000000000000000000000081523060048201526024810185905290915073ffffffffffffffffffffffffffffffffffffffff8516906339f47693906044015f604051808303815f87803b1580156121cf575f80fd5b505af11580156121e1573d5f803e3d5ffd5b50505050806121ef30612559565b6121f99190612ba8565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390529194507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015612290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b49190612b8d565b508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f20715489f1868041ab913834efbaabc996170336daf633a4999d62bd5c162f088560405161231491815260200190565b60405180910390a350505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610584565b6123526126b1565b73ffffffffffffffffffffffffffffffffffffffff811661239f576040517f7289db0e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123a95f82611e2d565b5050565b6040517f8eaa6ac00000000000000000000000000000000000000000000000000000000081527f6561726e6572735f6c6973745f69676e6f72656400000000000000000000000060048201525f9081907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690638eaa6ac090602401602060405180830381865afa158015612459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247d9190612be0565b14158061058457506040517fd7d1c1c00000000000000000000000000000000000000000000000000000000081527f6561726e65727300000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063d7d1c1c090604401602060405180830381865afa158015612535573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105849190612b8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156125e7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105849190612be0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166123a9576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016118b5565b6126b96126f1565b6126ef576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6126fa612322565b5468010000000000000000900460ff16919050565b5f6020828403121561271f575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461274e575f80fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118be575f80fd5b5f8083601f840112612786575f80fd5b50813567ffffffffffffffff81111561279d575f80fd5b6020830191508360208285010111156127b4575f80fd5b9250929050565b5f805f805f8060a087890312156127d0575f80fd5b86356127db81612755565b95506020870135945060408701356127f281612755565b935060608701359250608087013567ffffffffffffffff811115612814575f80fd5b61282089828a01612776565b979a9699509497509295939492505050565b803560ff81168114612842575f80fd5b919050565b5f805f805f805f80610100898b03121561285f575f80fd5b883561286a81612755565b9750602089013561287a81612755565b965060408901359550606089013561289181612755565b9450608089013593506128a660a08a01612832565b979a969950949793969295929450505060c08201359160e0013590565b5f602082840312156128d3575f80fd5b5035919050565b5f602082840312156128ea575f80fd5b813561274e81612755565b5f8060408385031215612906575f80fd5b82359150602083013561291881612755565b809150509250929050565b5f805f805f805f60c0888a031215612939575f80fd5b873561294481612755565b9650602088013561295481612755565b955060408801359450606088013561296b81612755565b93506080880135925060a088013567ffffffffffffffff81111561298d575f80fd5b6129998a828b01612776565b989b979a50959850939692959293505050565b5f805f80608085870312156129bf575f80fd5b84356129ca81612755565b935060208501356129da81612755565b92506040850135915060608501356129f181612755565b939692955090935050565b5f805f60608486031215612a0e575f80fd5b8335612a1981612755565b9250602084013591506040840135612a3081612755565b809150509250925092565b5f805f805f805f60e0888a031215612a51575f80fd5b8735612a5c81612755565b9650602088013595506040880135612a7381612755565b945060608801359350612a8860808901612832565b9699959850939692959460a0840135945060c09093013592915050565b80151581146118be575f80fd5b5f8060408385031215612ac3575f80fd5b8235612ace81612755565b9150602083013561291881612aa5565b5f60208284031215612aee575f80fd5b815161274e81612755565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015283606082015260a060808201528160a0820152818360c08301375f81830160c090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010195945050505050565b5f60208284031215612b9d575f80fd5b815161274e81612aa5565b81810381811115610584577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60208284031215612bf0575f80fd5b505191905056fea26469706673582212209b78922b55558ab95c66b036ecab9c198fc860980ba0a0b655df5c2d1311f41d64736f6c634300081a0033000000000000000000000000866a2bf4e572cbcf37d5071a7a58503bfb36be1b000000000000000000000000119fbeedd4f4f4298fb59b720d5654442b81ae2c