0 txs
0 calls
constructor
constructor()
functions
defaultSlippageTolerance
viewfunction defaultSlippageTolerance() view returns (uint16)
easySwapper
viewfunction easySwapper() view returns (address)
getAllLimitOrderIds
viewfunction getAllLimitOrderIds() view returns (bytes32[] limitOrderIds_)
getAllUsersToSettle
viewfunction getAllUsersToSettle() view returns (address[] usersToSettle_)
isAuthorizedKeeper
viewfunction isAuthorizedKeeper(address keeper) view returns (bool isAuthorized)
limitOrders
viewfunction limitOrders(bytes32 orderId) view returns (uint256 amount, uint256 stopLossPriceD18, uint256 takeProfitPriceD18, address user, address pool, address pricingAsset)
limitOrderSettlementToken
viewfunction limitOrderSettlementToken() view returns (address)
owner
viewfunction owner() view returns (address)
poolFactory
viewfunction poolFactory() view returns (address)
SLIPPAGE_DENOMINATOR
viewfunction SLIPPAGE_DENOMINATOR() view returns (uint16)
_executeLimitOrder
nonpayablefunction _executeLimitOrder(tuple orderExecutionData_)
_executeSettlementOrder
nonpayablefunction _executeSettlementOrder(address user_, tuple swapData_)
addAuthorizedKeeper
nonpayablefunction addAuthorizedKeeper(address keeper_)
createLimitOrder
nonpayablefunction createLimitOrder(tuple limitOrderInfo_)
deleteLimitOrder
nonpayablefunction deleteLimitOrder(address pool_)
executeLimitOrders
nonpayablefunction executeLimitOrders(tuple[] orders_)
executeLimitOrdersSafe
nonpayablefunction executeLimitOrdersSafe(tuple[] orders_)
executeSettlementOrders
nonpayablefunction executeSettlementOrders(tuple[] orders_)
executeSettlementOrdersSafe
nonpayablefunction executeSettlementOrdersSafe(tuple[] orders_)
initialize
nonpayablefunction initialize(address admin_, address poolFactory_, address easySwapper_, uint16 defaultSlippageTolerance_, address limitOrderSettlementToken_)
modifyLimitOrder
nonpayablefunction modifyLimitOrder(tuple modificationInfo_)
removeAuthorizedKeeper
nonpayablefunction removeAuthorizedKeeper(address keeper_)
renounceOwnership
nonpayablefunction renounceOwnership()
setDefaultSlippageTolerance
nonpayablefunction setDefaultSlippageTolerance(uint16 defaultSlippageTolerance_)
setEasySwapper
nonpayablefunction setEasySwapper(address easySwapper_)
setLimitOrderSettlementToken
nonpayablefunction setLimitOrderSettlementToken(address limitOrderSettlementToken_)
setPoolFactory
nonpayablefunction setPoolFactory(address poolFactory_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AuthorizedKeeperAdded
event AuthorizedKeeperAdded(address keeper)
AuthorizedKeeperRemoved
event AuthorizedKeeperRemoved(address keeper)
Initialized
event Initialized(uint64 version)
LimitOrderCreated
event LimitOrderCreated(address indexed user, address indexed pool, bytes32 id)
LimitOrderDeleted
event LimitOrderDeleted(address indexed user, address indexed pool, bytes32 id)
LimitOrderExecuted
event LimitOrderExecuted(address indexed user, address indexed pool, bytes32 id)
LimitOrderExecutedPartially
event LimitOrderExecutedPartially(address indexed user, address indexed pool, bytes32 id, uint256 amount)
LimitOrderExecutionFailed
event LimitOrderExecutionFailed(bytes32 id, bytes reason)
LimitOrderModified
event LimitOrderModified(address indexed user, address indexed pool, bytes32 id)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SettlementOrderCreated
event SettlementOrderCreated(address indexed user)
SettlementOrderDeleted
event SettlementOrderDeleted(address indexed user)
SettlementOrderExecuted
event SettlementOrderExecuted(address indexed user, uint256 destTokenAmountReceived)
SettlementOrderExecutionFailed
event SettlementOrderExecutionFailed(address user, bytes reason)
SettlementTokenSet
event SettlementTokenSet(address token)
SlippageToleranceSet
event SlippageToleranceSet(uint16 slippageTolerance)
errors
ExternalCallerNotAllowed
error ExternalCallerNotAllowed()
InvalidAsset
error InvalidAsset(address asset)
InvalidInitialization
error InvalidInitialization()
InvalidPool
error InvalidPool(address pool)
InvalidPrices
error InvalidPrices(uint256 stopLossPriceD18, uint256 takeProfitPriceD18, uint256 currentPrice)
InvalidValue
error InvalidValue(string varName)
LimitOrderAlreadyExists
error LimitOrderAlreadyExists(address user, address pool)
LimitOrderNotFillable
error LimitOrderNotFillable(uint256 currentPriceD18, uint256 stopLossPriceD18, uint256 takeProfitPriceD18)
LimitOrderNotFound
error LimitOrderNotFound(bytes32 id)
NotAuthorizedKeeper
error NotAuthorizedKeeper(address caller)
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SettlementOrderNotFound
error SettlementOrderNotFound(address user)
ZeroAddress
error ZeroAddress(string varName)
creation bytecode
0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6133c3806100d96000396000f3fe608060405234801561001057600080fd5b50600436106101545760003560e01c806318d29bf5146101595780631a4a7190146101825780631c5b2681146101975780631ec9d47b146101aa5780631f7689d3146101bd57806321914f28146101d0578063372ae94b146101e35780634219dc40146101f657806344ddb4d314610209578063473597a01461021c578063715018a61461022f578063766c4eb714610237578063803a79d01461024c5780638da5cb5b1461025f57806399a7617b146102675780639e48376b1461027a578063a0deb7421461028f578063a50e9235146102a2578063a968ef1d146102b5578063ac905114146102c8578063af28696f146102e4578063b290eff6146102f7578063ca697db41461032a578063de0f4ddb146103b9578063e80bd8e2146103ce578063ece92a53146103e1578063f2fde38b146103f4578063f997270814610407575b600080fd5b60015461016c906001600160a01b031681565b60405161017991906124e1565b60405180910390f35b61019561019036600461250a565b61041a565b005b6101956101a536600461253e565b61042e565b6101956101b83660046125ad565b610551565b6101956101cb366004612613565b610562565b6101956101de366004612613565b610671565b6101956101f136600461250a565b610731565b60005461016c906001600160a01b031681565b610195610217366004612613565b610750565b61019561022a36600461250a565b6108e7565b6101956108f8565b61023f61090c565b6040516101799190612654565b61019561025a366004612697565b61091d565b61016c6109f9565b61019561027536600461250a565b610a14565b610282610a77565b60405161017991906126b2565b61019561029d36600461270b565b610a83565b6101956102b036600461250a565b610d57565b6101956102c3366004612747565b610d69565b6102d161271081565b60405161ffff9091168152602001610179565b6101956102f2366004612613565b6111f2565b61031a61030536600461250a565b60046020526000908152604090205460ff1681565b6040519015158152602001610179565b61037d610338366004612796565b60036020819052600091825260409091208054600182015460028301549383015460048401546005909401549294919391926001600160a01b03918216928216911686565b604080519687526020870195909552938501929092526001600160a01b03908116606085015290811660808401521660a082015260c001610179565b6001546102d190600160a01b900461ffff1681565b6101956103dc366004612697565b61133b565b6101956103ef36600461250a565b61142d565b61019561040236600461250a565b611488565b60025461016c906001600160a01b031681565b6104226114c3565b61042b816114f5565b50565b600061043861155c565b805490915060ff600160401b82041615906001600160401b031660008115801561045f5750825b90506000826001600160401b0316600114801561047b5750303b155b905081158015610489575080155b156104a75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104d157845460ff60401b1916600160401b1785555b6104da8a611580565b6104e389611591565b6104ec886114f5565b6104f5876115f8565b6104ff868a61167c565b831561054557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6105596114c3565b61042b816115f8565b3360009081526004602052604090205460ff1661059d573360405163337a219760e11b815260040161059491906124e1565b60405180910390fd5b60005b8181101561066c573063a968ef1d8484848181106105c0576105c06127af565b90506020028101906105d291906127c5565b6105e090602081019061250a565b8585858181106105f2576105f26127af565b905060200281019061060491906127c5565b6106129060208101906127e5565b6040518363ffffffff1660e01b815260040161062f9291906129d5565b600060405180830381600087803b15801561064957600080fd5b505af115801561065d573d6000803e3d6000fd5b505050508060010190506105a0565b505050565b3360009081526004602052604090205460ff166106a3573360405163337a219760e11b815260040161059491906124e1565b60005b8181101561066c573063a0deb7428484848181106106c6576106c66127af565b90506020028101906106d891906127e5565b6040518263ffffffff1660e01b81526004016106f49190612a96565b600060405180830381600087803b15801561070e57600080fd5b505af1158015610722573d6000803e3d6000fd5b505050508060010190506106a6565b6107396114c3565b60005461042b9082906001600160a01b031661167c565b3360009081526004602052604090205460ff16610782573360405163337a219760e11b815260040161059491906124e1565b60005b8181101561066c573063a968ef1d8484848181106107a5576107a56127af565b90506020028101906107b791906127c5565b6107c590602081019061250a565b8585858181106107d7576107d76127af565b90506020028101906107e991906127c5565b6107f79060208101906127e5565b6040518363ffffffff1660e01b81526004016108149291906129d5565b600060405180830381600087803b15801561082e57600080fd5b505af192505050801561083f575060015b6108df573d80801561086d576040519150601f19603f3d011682016040523d82523d6000602084013e610872565b606091505b507f1a9e55af9be0e29b5ee2fffa7ff216f0dbb6c52a0dc504a0aa98b3cb5be263528484848181106108a6576108a66127af565b90506020028101906108b891906127c5565b6108c690602081019061250a565b826040516108d5929190612b2e565b60405180910390a1505b600101610785565b6108ef6114c3565b61042b81611591565b6109006114c3565b61090a600061175f565b565b606061091860056117bb565b905090565b61093461092f36839003830183612be2565b6117cf565b600061094f3361094a60a085016080860161250a565b611acd565b905061095c600582611b13565b61097c57604051630bfc947560e11b815260048101829052602401610594565b600081815260036020526040902082906109968282612ca1565b506109a9905060a083016080840161250a565b6001600160a01b0316336001600160a01b03167f53d3cf657218b043c68ccd2fa13a0a49b6f18c92620ef553de466e8a1b78ebf4836040516109ed91815260200190565b60405180910390a35050565b600080610a04611b1f565b546001600160a01b031692915050565b610a1c6114c3565b6001600160a01b03811660009081526004602052604090819020805460ff19169055517fafc69e79822076b5d14d392145ef242a7982ee1399c6e44aa173a74867dd38e890610a6c9083906124e1565b60405180910390a150565b606061091860076117bb565b333014610aa357604051631f0b2b4960e31b815260040160405180910390fd5b610aaf60058235611b13565b610acf57604051630bfc947560e11b815281356004820152602401610594565b8035600090815260036020818152604092839020835160c0810185528154808252600183015493820193909352600282015481860152928101546001600160a01b0390811660608501526004820154811660808501526005909101541660a083015290918301351015610c3a578135600090815260036020526040808220805491850135929091610b61908490612d22565b9250508190555080608001516001600160a01b031681606001516001600160a01b03167f53d3cf657218b043c68ccd2fa13a0a49b6f18c92620ef553de466e8a1b78ebf48460000135604051610bb991815260200190565b60405180910390a3610bdc81610bd26020850185612d35565b8560400135611b43565b80608001516001600160a01b031681606001516001600160a01b03167fd3738aa5916b716b080dbaccdb08ad94666977837530ee7be4ae2a365731c553846000013585604001356040516109ed929190918252602082015260400190565b813560008181526003602081905260408220828155600181018390556002810192909255810180546001600160a01b031990811690915560048201805482169055600591820180549091169055610c9091611d48565b5080608001516001600160a01b031681606001516001600160a01b03167f5f9c6401b381e24804709632113f076a93155261bbf6b07ae2d980850ee501158460000135604051610ce291815260200190565b60405180910390a3610d0281610cfb6020850185612d35565b8451611b43565b80608001516001600160a01b031681606001516001600160a01b03167f86eb7db3744e43c8da467eca5eb64103cb9d8cb27b66a758aaaa536013459ab784600001356040516109ed91815260200190565b5050565b610d53610d643383611acd565b611d54565b333014610d8957604051631f0b2b4960e31b815260040160405180910390fd5b610d9282611ea9565b600154604051635f0544a760e01b81526000916001600160a01b031690635f0544a790610dc39086906004016124e1565b600060405180830381865afa158015610de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e089190810190612e3d565b90508051600003610e1857505050565b6002546001600160a01b0316610e34604084016020850161250a565b6001600160a01b031614610e6c57610e52604083016020840161250a565b6040516337bce3c560e11b815260040161059491906124e1565b600080546001600160a01b031690805b8351811015610fdf57838181518110610e9757610e976127af565b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f049190612e71565b610f0f90600a612f7b565b848281518110610f2157610f216127af565b602002602001015160200151846001600160a01b031663b3596f07878581518110610f4e57610f4e6127af565b6020026020010151600001516040518263ffffffff1660e01b8152600401610f7691906124e1565b602060405180830381865afa158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb79190612f8a565b610fc19190612fa3565b610fcb9190612fba565b610fd59083612fdc565b9150600101610e7c565b5060015460009061271090610fff90600160a01b900461ffff1682612fef565b61100d9061ffff1684612fa3565b6110179190612fba565b60025460405163b3596f0760e01b81529192506000916001600160a01b038681169263b3596f079261104f92909116906004016124e1565b602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190612f8a565b600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190612e71565b61111290600a612f7b565b61111c9084612fa3565b6111269190612fba565b600154604051635d8dbb2360e01b81529192506000916001600160a01b0390911690635d8dbb2390611160908b908b908790600401613009565b6020604051808303816000875af115801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190612f8a565b9050876001600160a01b03167fb8e0ca93e3cc67c252be2539def8243b35a4f2eb63078f733bcd840fe5f027e6826040516111e091815260200190565b60405180910390a25050505050505050565b3360009081526004602052604090205460ff16611224573360405163337a219760e11b815260040161059491906124e1565b60005b8181101561066c573063a0deb742848484818110611247576112476127af565b905060200281019061125991906127e5565b6040518263ffffffff1660e01b81526004016112759190612a96565b600060405180830381600087803b15801561128f57600080fd5b505af19250505080156112a0575060015b611333573d8080156112ce576040519150601f19603f3d011682016040523d82523d6000602084013e6112d3565b606091505b507ff9cee54359f44ed3ba3e4303548522fd936a5e255b5679375e9a649ad63685e9848484818110611307576113076127af565b905060200281019061131991906127e5565b604051611329913590849061303d565b60405180910390a1505b600101611227565b61134d61092f36839003830183612be2565b60006113633361094a60a085016080860161250a565b9050611370600582611b13565b156113b057611385608083016060840161250a565b61139560a084016080850161250a565b604051634ab8c6d560e11b8152600401610594929190613056565b600081815260036020526040902082906113ca8282612ca1565b506113d89050600582611f16565b506113e960a083016080840161250a565b6001600160a01b0316336001600160a01b03167ff4887a12b506240a9782973a0b86102dc089d1ce68ac4de001d3574c84af0d7d836040516109ed91815260200190565b6114356114c3565b6001600160a01b03811660009081526004602052604090819020805460ff19166001179055517fe55706cb722c06a1e94d7bdcc3c8ff41407eacd26a4333ff4bfa073d1cc9e5fe90610a6c9083906124e1565b6114906114c3565b6001600160a01b0381166114ba576000604051631e4fbdf760e01b815260040161059491906124e1565b61042b8161175f565b336114cc6109f9565b6001600160a01b03161461090a573360405163118cdaa760e01b815260040161059491906124e1565b6001600160a01b03811661153a5760405163eac0d38960e01b815260206004820152600b60248201526a32b0b9bca9bbb0b83832b960a91b6044820152606401610594565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611588611f22565b61042b81611f47565b6001600160a01b0381166115d65760405163eac0d38960e01b815260206004820152600b60248201526a706f6f6c466163746f727960a81b6044820152606401610594565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b61ffff8116158061160e575061271061ffff8216115b1561162c57604051632197ada560e11b815260040161059490613070565b6001805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527f132053d8be9ca4636bc32ef617ea456d500bd6c9490e4fc2577537c8618bf13990602001610a6c565b60405163cc435bf360e01b81526001600160a01b0382169063cc435bf3906116a89085906004016124e1565b602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190613092565b61170857816040516337bce3c560e11b815260040161059491906124e1565b600280546001600160a01b0319166001600160a01b0384161790556040517fd0616ace32a927fca734b5d74a91c5a052c6c4391bfe1f3087f81d4a326500e6906117539084906124e1565b60405180910390a15050565b6000611769611b1f565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b606060006117c883611f4f565b9392505050565b60608101516001600160a01b0316331461181557604051632197ada560e11b8152600401610594906020808252600490820152633ab9b2b960e11b604082015260600190565b6000546080820151604051635b16ebb760e01b81526001600160a01b03909216918291635b16ebb79161184b91906004016124e1565b602060405180830381865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190613092565b6118af578160800151604051630f4c971b60e21b815260040161059491906124e1565b608082015160608301516040516370a0823160e01b81526000926001600160a01b0316916370a08231916118e691906004016124e1565b602060405180830381865afa158015611903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119279190612f8a565b835190915015806119385750825181105b1561196f57604051632197ada560e11b8152602060048201526006602482015265185b5bdd5b9d60d21b6044820152606401610594565b60a083015160405163cc435bf360e01b81526001600160a01b0384169163cc435bf39161199f91906004016124e1565b602060405180830381865afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e09190613092565b611a03578260a001516040516337bce3c560e11b815260040161059491906124e1565b60a083015160405163b3596f0760e01b81526000916001600160a01b0385169163b3596f0791611a35916004016124e1565b602060405180830381865afa158015611a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a769190612f8a565b9050808460200151101580611a8f575080846040015111155b15611ac757602084015160408086015190516326e4ad8d60e21b81526004810192909252602482015260448101829052606401610594565b50505050565b6040516001600160601b0319606084811b8216602084015283901b1660348201526000906048016040516020818303038152906040528051906020012090505b92915050565b60006117c88383611fab565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000805460a086015160405163b3596f0760e01b81526001600160a01b039092169163b3596f0791611b77916004016124e1565b602060405180830381865afa158015611b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb89190612f8a565b9050846020015181118015611bd05750846040015181105b15611c085760208501516040808701519051634076ca4b60e11b81526004810184905260248101929092526044820152606401610594565b611c1a611c1584866130db565b611fc3565b60608501516080860151611c3b916001600160a01b03909116903085612113565b6001546080860151611c5a916001600160a01b0391821691168461217a565b60015460608601516080870151604051632802470560e01b81526001600160a01b0390931692632802470592611c9a92909187908a908a906004016131cc565b6000604051808303816000875af1158015611cb9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ce1919081019061320b565b50506000611cfd8660600151600761220290919063ffffffff16565b90508015611d405785606001516001600160a01b03167f747d1bded91060c2529de5f5eabb440ce8614d019ddb77815bbc82a2ba68336c60405160405180910390a25b505050505050565b60006117c88383612217565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152611d91600583611b13565b611db157604051630bfc947560e11b815260048101839052602401610594565b506000818152600360208181526040808420815160c08101835281548152600182018054828601526002830180549483019490945282860180546001600160a01b03808216606086015260048601805480831660808801526005808901805494851660a08a01528e8e529b909a52968b9055938a9055989095556001600160a01b031994851690559183169091559316909155611e4e9083611d48565b5080608001516001600160a01b031681606001516001600160a01b03167f5f9c6401b381e24804709632113f076a93155261bbf6b07ae2d980850ee5011584604051611e9c91815260200190565b60405180910390a3919050565b611eb460078261230a565b611ed35780604051631934747b60e11b815260040161059491906124e1565b611ede60078261231f565b506040516001600160a01b038216907f2692cee5b6f9cd79d02003fa2706c986abc89f98b0faa936eb20e2801df282a590600090a250565b60006117c88383612334565b611f2a61237e565b61090a57604051631afcd79f60e31b815260040160405180910390fd5b611490611f22565b606081600001805480602002602001604051908101604052809291908181526020018280548015611f9f57602002820191906000526020600020905b815481526020019060010190808311611f8b575b50505050509050919050565b60009081526001919091016020526040902054151590565b60005b8151811015610d5357818181518110611fe157611fe16127af565b6020026020010151602001515160000361207457818181518110612007576120076127af565b602002602001015160400151600014806120515750600160149054906101000a900461ffff1661ffff16828281518110612043576120436127af565b602002602001015160400151115b1561206f57604051632197ada560e11b815260040161059490613070565b61210b565b6000828281518110612088576120886127af565b6020026020010151602001518060200190518101906120a79190613297565b90508282815181106120bb576120bb6127af565b6020026020010151604001518160400151141580156120eb57506001546040820151600160a01b90910461ffff16105b1561210957604051632197ada560e11b815260040161059490613070565b505b600101611fc6565b6040516001600160a01b038481166024830152838116604483015260648201839052611ac79186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612398565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e906121ab9030908790600401613056565b602060405180830381865afa1580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec9190612f8a565b9050611ac784846121fd8585612fdc565b612400565b60006117c8836001600160a01b038416612334565b6000818152600183016020526040812054801561230057600061223b600183612d22565b855490915060009061224f90600190612d22565b90508082146122b457600086600001828154811061226f5761226f6127af565b9060005260206000200154905080876000018481548110612292576122926127af565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806122c5576122c561335e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611b0d565b6000915050611b0d565b60006117c8836001600160a01b038416611fab565b60006117c8836001600160a01b038416612217565b60006123408383611fab565b61237657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611b0d565b506000611b0d565b600061238861155c565b54600160401b900460ff16919050565b600080602060008451602086016000885af1806123bb576040513d6000823e3d81fd5b50506000513d915081156123d35780600114156123e0565b6001600160a01b0384163b155b15611ac75783604051635274afe760e01b815260040161059491906124e1565b6000836001600160a01b031663095ea7b38484604051602401612424929190613374565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061245d8482612492565b611ac75761248884856001600160a01b031663095ea7b3866000604051602401612148929190613374565b611ac78482612398565b6000806000806020600086516020880160008a5af192503d915060005190508280156124d7575081156124c857806001146124d7565b6000866001600160a01b03163b115b9695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461042b57600080fd5b60006020828403121561251c57600080fd5b81356117c8816124f5565b803561ffff8116811461253957600080fd5b919050565b600080600080600060a0868803121561255657600080fd5b8535612561816124f5565b94506020860135612571816124f5565b93506040860135612581816124f5565b925061258f60608701612527565b9150608086013561259f816124f5565b809150509295509295909350565b6000602082840312156125bf57600080fd5b6117c882612527565b60008083601f8401126125da57600080fd5b5081356001600160401b038111156125f157600080fd5b6020830191508360208260051b850101111561260c57600080fd5b9250929050565b6000806020838503121561262657600080fd5b82356001600160401b0381111561263c57600080fd5b612648858286016125c8565b90969095509350505050565b602080825282518282018190526000918401906040840190835b8181101561268c57835183526020938401939092019160010161266e565b509095945050505050565b600060c08284031280156126aa57600080fd5b509092915050565b602080825282518282018190526000918401906040840190835b8181101561268c5783516001600160a01b03168352602093840193909201916001016126cc565b60006060828403121561270557600080fd5b50919050565b60006020828403121561271d57600080fd5b81356001600160401b0381111561273357600080fd5b61273f848285016126f3565b949350505050565b6000806040838503121561275a57600080fd5b8235612765816124f5565b915060208301356001600160401b0381111561278057600080fd5b61278c858286016126f3565b9150509250929050565b6000602082840312156127a857600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b60008235603e198336030181126127db57600080fd5b9190910192915050565b60008235605e198336030181126127db57600080fd5b6000808335601e1984360301811261281257600080fd5b83016020810192503590506001600160401b0381111561283157600080fd5b8060051b360382131561260c57600080fd5b6000808335601e1984360301811261285a57600080fd5b83016020810192503590506001600160401b0381111561287957600080fd5b80360382131561260c57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008235605e198336030181126128c757600080fd5b90910192915050565b80356128db816124f5565b6001600160a01b03168252602090810135910152565b60006060830161290183846127fb565b606086528281845260808701905060808260051b88010193508260005b838110156129c057888603607f1901835261293982866128b1565b8035612944816124f5565b6001600160a01b0316875260208181013590880152604081013536829003603e1901811261297157600080fd5b60606040890181905291018035918801919091526129926020820182612843565b9150604060808901526129a960a089018383612888565b97505050602092830192919091019060010161291e565b50505050506117c860208501602085016128d0565b6001600160a01b038316815260406020820181905260009061273f908301846128f1565b60008383855260208501945060208460051b8201018360005b86811015612a8a57838303601f19018852612a2d82876128b1565b8035612a38816124f5565b6001600160a01b03168452612a506020820182612843565b60606020870152612a65606087018284612888565b6040938401359690930195909552506020988901989093509190910190600101612a12565b50909695505050505050565b6020808252823582820152600090612ab0908401846127fb565b60606040850152612ac56080850182846129f9565b6040959095013560609490940193909352509192915050565b60005b83811015612af9578181015183820152602001612ae1565b50506000910152565b60008151808452612b1a816020860160208601612ade565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061273f90830184612b02565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612b8a57612b8a612b52565b60405290565b604051606081016001600160401b0381118282101715612b8a57612b8a612b52565b604051601f8201601f191681016001600160401b0381118282101715612bda57612bda612b52565b604052919050565b600060c0828403128015612bf557600080fd5b5060405160009060c081016001600160401b0381118282101715612c1b57612c1b612b52565b60409081528435825260208086013590830152848101359082015260608401359150612c46826124f5565b81606082015260808401359150612c5c826124f5565b81608082015260a08401359150612c72826124f5565b60a08101919091529392505050565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135815560208201356001820155604082013560028201556060820135612cc7816124f5565b612cd48160038401612c81565b506080820135612ce3816124f5565b612cf08160048401612c81565b5060a0820135612cff816124f5565b61066c8160058401612c81565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b0d57611b0d612d0c565b6000808335601e19843603018112612d4c57600080fd5b8301803591506001600160401b03821115612d6657600080fd5b6020019150600581901b360382131561260c57600080fd5b60006001600160401b03821115612d9757612d97612b52565b5060051b60200190565b600082601f830112612db257600080fd5b8151612dc5612dc082612d7e565b612bb2565b8082825260208201915060208360061b860101925085831115612de757600080fd5b602085015b83811015612e335760408188031215612e0457600080fd5b612e0c612b68565b8151612e17816124f5565b8152602082810151818301529084529290920191604001612dec565b5095945050505050565b600060208284031215612e4f57600080fd5b81516001600160401b03811115612e6557600080fd5b61273f84828501612da1565b600060208284031215612e8357600080fd5b815160ff811681146117c857600080fd5b6001815b6001841115612ecf57808504811115612eb357612eb3612d0c565b6001841615612ec157908102905b60019390931c928002612e98565b935093915050565b600082612ee657506001611b0d565b81612ef357506000611b0d565b8160018114612f095760028114612f1357612f2f565b6001915050611b0d565b60ff841115612f2457612f24612d0c565b50506001821b611b0d565b5060208310610133831016604e8410600b8410161715612f52575081810a611b0d565b612f5f6000198484612e94565b8060001904821115612f7357612f73612d0c565b029392505050565b60006117c860ff841683612ed7565b600060208284031215612f9c57600080fd5b5051919050565b8082028115828204841417611b0d57611b0d612d0c565b600082612fd757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115611b0d57611b0d612d0c565b61ffff8281168282160390811115611b0d57611b0d612d0c565b6001600160a01b038416815260606020820181905260009061302d908301856128f1565b9050826040830152949350505050565b82815260406020820152600061273f6040830184612b02565b6001600160a01b0392831681529116602082015260400190565b602080825260089082015267736c69707061676560c01b604082015260600190565b6000602082840312156130a457600080fd5b815180151581146117c857600080fd5b60006001600160401b038211156130cd576130cd612b52565b50601f01601f191660200190565b60006130e9612dc084612d7e565b8381526020810190600585901b84013681111561310557600080fd5b845b8181101561268c5780356001600160401b0381111561312557600080fd5b8601606036829003121561313857600080fd5b613140612b90565b813561314b816124f5565b815260208201356001600160401b0381111561316657600080fd5b820136601f82011261317757600080fd5b8035613185612dc0826130b4565b81815236602083850101111561319a57600080fd5b816020840160208301376000602092820183015283820152604093840135938301939093525085529384019301613107565b6001600160a01b038681168252851660208201526040810184905260806060820181905260009061320090830184866129f9565b979650505050505050565b6000806040838503121561321e57600080fd5b82516001600160401b0381111561323457600080fd5b61324085828601612da1565b9250506020830151613251816124f5565b809150509250929050565b60006040828403121561326e57600080fd5b613276612b68565b90508151613283816124f5565b815260209182015191810191909152919050565b6000602082840312156132a957600080fd5b81516001600160401b038111156132bf57600080fd5b8201608081850312156132d157600080fd5b6132d9612b90565b81516001600160401b038111156132ef57600080fd5b8201601f8101861361330057600080fd5b805161330e612dc0826130b4565b81815287602083850101111561332357600080fd5b613334826020830160208601612ade565b8352506133469050856020840161325c565b60208201526060919091015160408201529392505050565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0392909216825260208201526040019056fea2646970667358221220c171a255d16705437c9cd9e070fc5019036e2678175f7203e59567ac60099cc664736f6c634300081c0033