0 txs
175 calls
constructor
constructor()
functions
closeFeePerc
viewfunction closeFeePerc() view returns (uint16)
feeReceiver
viewfunction feeReceiver() view returns (address)
flashSource
viewfunction flashSource(address) view returns (address)
indexUtils
viewfunction indexUtils() view returns (address)
lendingPairs
viewfunction lendingPairs(address) view returns (address)
openFeePerc
viewfunction openFeePerc() view returns (uint16)
owner
viewfunction owner() view returns (address)
positionNFT
viewfunction positionNFT() view returns (address)
positionProps
viewfunction positionProps(uint256) view returns (address pod, address lendingPair, address custodian, bool isSelfLending, bool hasSelfLendingPairPod)
addLeverage
nonpayablefunction addLeverage(uint256 _positionId, address _pod, uint256 _pTknAmt, uint256 _pairedLpDesired, uint256 _userProvidedDebtAmt, bool _hasSelfLendingPairPod, bytes _config)
addLeverageFromTkn
nonpayablefunction addLeverageFromTkn(uint256 _positionId, address _pod, uint256 _tknAmt, uint256 _amtPtknMintMin, uint256 _pairedLpDesired, uint256 _userProvidedDebtAmt, bool _hasSelfLendingPairPod, bytes _config)
borrowAssets
nonpayablefunction borrowAssets(uint256 _positionId, uint256 _borrowAmt, uint256 _collateralAmt, address _recipient)
callback
nonpayablefunction callback(bytes _userData)
initialize
nonpayablefunction initialize()
initialize
nonpayablefunction initialize(address _positionNFT, address _idxUtils, address _feeReceiver)
initializePosition
nonpayablefunction initializePosition(address _pod, address _recipient, bool _hasSelfLendingPairPod) returns (uint256 _positionId)
removeLeverage
nonpayablefunction removeLeverage(uint256 _positionId, uint256 _borrowSharesAmt, bytes _remLevConfig)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueETH
nonpayablefunction rescueETH()
rescueTokens
nonpayablefunction rescueTokens(address _token)
setCloseFeePerc
nonpayablefunction setCloseFeePerc(uint16 _newFee)
setFeeReceiver
nonpayablefunction setFeeReceiver(address _receiver)
setFlashSource
nonpayablefunction setFlashSource(address _borrowAsset, address _flashSource)
setIndexUtils
nonpayablefunction setIndexUtils(address _utils)
setLendingPair
nonpayablefunction setLendingPair(address _pod, address _pair)
setOpenFeePerc
nonpayablefunction setOpenFeePerc(uint16 _newFee)
setPositionNFT
nonpayablefunction setPositionNFT(address _posNFT)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawAssets
nonpayablefunction withdrawAssets(uint256 _positionId, address _token, address _recipient, uint256 _amount)
events
AddLeverage
event AddLeverage(uint256 indexed positionId, address indexed user, uint256 pTknAmtUsed, uint256 collateralAmt, uint256 borrowAmt)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RemoveLeverage
event RemoveLeverage(uint256 indexed positionId, address indexed user, uint256 collateralAmt)
SetBorrowAssetFlashSource
event SetBorrowAssetFlashSource(address _borrowAsset, address _flashSource)
SetCloseFeePerc
event SetCloseFeePerc(uint16 oldFee, uint16 newFee)
SetFeeReceiver
event SetFeeReceiver(address oldReceiver, address newReceiver)
SetIndexUtils
event SetIndexUtils(address oldIdxUtils, address newIdxUtils)
SetOpenFeePerc
event SetOpenFeePerc(uint16 oldFee, uint16 newFee)
SetPodLendingPair
event SetPodLendingPair(address _pod, address _lendingPair)
SetPositionsNFT
event SetPositionsNFT(address oldPosNFT, address newPosNFT)
errors
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080604052348015600e575f5ffd5b506015601f565b601b601f565b60cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615606e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460cc5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615d29806100dc5f395ff3fe6080604052600436106101bc575f3560e01c8063715018a6116100f2578063c0c53b8b11610092578063e9b2b3a311610062578063e9b2b3a314610536578063efdcd974146105ce578063f2fde38b146105ed578063f7ee228d1461060c575f5ffd5b8063c0c53b8b146104ba578063c359770d146104d9578063da04d01c146104f8578063e98a565414610517575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610421578063a49f0c951461045d578063b0eb469d1461047c578063b3f006741461049b575f5ffd5b8063715018a6146103da5780638129fc1c146103ee5780638bf0f8f814610402575f5ffd5b806347efda2a1161015d5780635db48b97116101385780635db48b971461035e5780636a2faf081461037d5780636af4eaa11461039c5780636cabc12f146103bb575f5ffd5b806347efda2a146102d75780635645e39c1461030b5780635ba034ba1461032a575f5ffd5b806320800a001161019857806320800a001461022657806323228ecb1461023a57806332aeb0a514610276578063454279c0146102aa575f5ffd5b8062ae3bf8146101c75780631656118b146101e85780631f4e84fa14610207575f5ffd5b366101c357005b5f5ffd5b3480156101d2575f5ffd5b506101e66101e1366004614875565b61062d565b005b3480156101f3575f5ffd5b506101e6610202366004614890565b6106b3565b348015610212575f5ffd5b506101e66102213660046148c7565b6107e1565b348015610231575f5ffd5b506101e661090c565b348015610245575f5ffd5b50600354610259906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610281575f5ffd5b5060045461029790600160b01b900461ffff1681565b60405161ffff909116815260200161026d565b3480156102b5575f5ffd5b506102c96102c4366004614919565b61098d565b60405190815260200161026d565b3480156102e2575f5ffd5b506102596102f1366004614875565b5f602081905290815260409020546001600160a01b031681565b348015610316575f5ffd5b506101e6610325366004614890565b6109a1565b348015610335575f5ffd5b50610259610344366004614875565b60016020525f90815260409020546001600160a01b031681565b348015610369575f5ffd5b50600254610259906001600160a01b031681565b348015610388575f5ffd5b506101e6610397366004614961565b610abe565b3480156103a7575f5ffd5b506101e66103b6366004614aa5565b610d5b565b3480156103c6575f5ffd5b506101e66103d5366004614b27565b610e90565b3480156103e5575f5ffd5b506101e6610f32565b3480156103f9575f5ffd5b506101e6610f45565b34801561040d575f5ffd5b506101e661041c366004614b48565b61104f565b34801561042c575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610259565b348015610468575f5ffd5b506101e6610477366004614b27565b611139565b348015610487575f5ffd5b506101e6610496366004614875565b6111db565b3480156104a6575f5ffd5b50600454610259906001600160a01b031681565b3480156104c5575f5ffd5b506101e66104d4366004614bd4565b611236565b3480156104e4575f5ffd5b506101e66104f3366004614c11565b611380565b348015610503575f5ffd5b506101e6610512366004614875565b611851565b348015610522575f5ffd5b506101e6610531366004614c5c565b6118ac565b348015610541575f5ffd5b50610593610550366004614c8d565b60056020525f90815260409020805460018201546002909201546001600160a01b039182169282169181169060ff600160a01b8204811691600160a81b90041685565b604080516001600160a01b0396871681529486166020860152929094169183019190915215156060820152901515608082015260a00161026d565b3480156105d9575f5ffd5b506101e66105e8366004614875565b61193f565b3480156105f8575f5ffd5b506101e6610607366004614875565b61199a565b348015610617575f5ffd5b5060045461029790600160a01b900461ffff1681565b6106356119d4565b6106b0336040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561067b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069f9190614ca4565b6001600160a01b0384169190611a2f565b50565b6106bb6119d4565b6001600160a01b03811615610775575f6001600160a01b0316816001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610710573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107349190614ccb565b6001600160a01b0316036107755760405162461bcd60e51b81526020600482015260036024820152624c505360e81b60448201526064015b60405180910390fd5b6001600160a01b038281165f908152602081905260409081902080546001600160a01b03191692841692909217909155517f96d39ca7eed6c76afc52c05f7c51fb2ef86f7173ad16cc9ebdd533023b8255ab906107d59084908490614ce6565b60405180910390a15050565b83336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa15801561082e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108529190614ccb565b6001600160a01b03161461088d5760405162461bcd60e51b8152602060048201526002602482015261041360f41b604482015260640161076c565b5f8581526005602052604090819020600201549051636ce5768960e11b81526001600160a01b0386811660048301528581166024830152604482018590529091169063d9caed12906064015f604051808303815f87803b1580156108ef575f5ffd5b505af1158015610901573d5f5f3e3d5ffd5b505050505050505050565b6109146119d4565b6040515f90339047908381818185875af1925050503d805f8114610953576040519150601f19603f3d011682016040523d82523d5f602084013e610958565b606091505b50509050806106b05760405162461bcd60e51b81526020600482015260016024820152605360f81b604482015260640161076c565b5f610999848484611a8e565b949350505050565b6109a96119d4565b6001600160a01b03811615610a5e575f6001600160a01b0316816001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a229190614ccb565b6001600160a01b031603610a5e5760405162461bcd60e51b815260206004820152600360248201526241465360e81b604482015260640161076c565b6001600160a01b038281165f908152600160205260409081902080546001600160a01b03191692841692909217909155517f843434cf8dbd5c5a48bd9c61abdda97f96615e466554ec0bf2afa4471faa96ef906107d59084908490614ce6565b83336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610b0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2f9190614ccb565b6001600160a01b031614610b6a5760405162461bcd60e51b8152602060048201526002602482015261041360f41b604482015260640161076c565b8215610ba957610ba9335f878152600560205260409020600201546001600160a01b031685610b9889611c6c565b6001600160a01b0316929190611ce8565b5f85815260056020526040902060028101546001909101546004546001600160a01b039283169263cb69e27092169087908790600160a01b900461ffff16610bf15786610bf3565b305b60405160e086901b6001600160e01b03191681526001600160a01b0394851660048201526024810193909352604483019190915290911660648201526084015f604051808303815f87803b158015610c49575f5ffd5b505af1158015610c5b573d5f5f3e3d5ffd5b5050600454600160a01b900461ffff16159150610d549050575f8581526005602090815260408083206001015481516338d52e0f60e01b815291516001600160a01b03909116926338d52e0f92600480820193918290030181865afa158015610cc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cea9190614ccb565b6004549091505f9061271090610d0b90600160a01b900461ffff1688614d14565b610d159190614d2b565b600454909150610d32906001600160a01b03848116911683611a2f565b610d5184610d408389614d4a565b6001600160a01b0385169190611a2f565b50505b5050505050565b600160065460ff1615610d805760405162461bcd60e51b815260040161076c90614d5d565b6006805460ff191660011790556040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610dd1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df59190614ca4565b9050610e0c6001600160a01b03891633308a611ce8565b610901336040516370a0823160e01b81523060048201528b908b9085906001600160a01b038316906370a08231906024015b602060405180830381865afa158015610e59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7d9190614ca4565b610e879190614d4a565b8a8a8a8a611d27565b610e986119d4565b6109c48161ffff161115610ed45760405162461bcd60e51b815260206004820152600360248201526209a82b60eb1b604482015260640161076c565b6004805461ffff838116600160a01b81810261ffff60a01b1985161790945560408051949093049091168084526020840191909152917fe5642aead6d7b355abd4181df302c285915b513dd4f8b1c57199f3f0edfa61a091016107d5565b610f3a6119d4565b610f435f612011565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f895750825b90505f826001600160401b03166001148015610fa45750303b155b905081158015610fb2575080155b15610fd05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ffa57845460ff60401b1916600160401b1785555b61100333612081565b8315610d5457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b600160065460ff16156110745760405162461bcd60e51b815260040161076c90614d5d565b6006805460ff191660011790556040516370a0823160e01b81523060048201525f906001600160a01b038a16906370a0823190602401602060405180830381865afa1580156110c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e99190614ca4565b90506110f7338a8a8a612092565b61112d336040516370a0823160e01b81523060048201528c908c9085906001600160a01b038316906370a0823190602401610e3e565b50505050505050505050565b6111416119d4565b6109c48161ffff16111561117d5760405162461bcd60e51b815260206004820152600360248201526209a82b60eb1b604482015260640161076c565b6004805461ffff838116600160b01b81810261ffff60b01b1985161790945560408051949093049091168084526020840191909152917f5def20dfceec8a818b2a4431838c7e9165d77cc6970868067379f7c77faaf74591016107d5565b6111e36119d4565b600380546001600160a01b038381166001600160a01b03198316179092556040519116907ff20ed5350ef7d392328a901ca190ac63721bec1597e15aba82c7473b86b532b8906107d59083908590614ce6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f8115801561127a5750825b90505f826001600160401b031660011480156112955750303b155b9050811580156112a3575080155b156112c15760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156112eb57845460ff60401b1916600160401b1785555b6112f3610f45565b600380546001600160a01b03808b166001600160a01b031992831617909255600280548a84169083161790556004805492891692909116919091179055831561137657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600160065460ff16156113a55760405162461bcd60e51b815260040161076c90614d5d565b6006805460ff191660011790555f336003546040516331a9108f60e11b8152600481018890529192505f916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611400573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114249190614ccb565b9050816001600160a01b0316816001600160a01b031614806114b9575060035460405163020604bf60e21b8152600481018890526001600160a01b0384811692169063081812fc90602401602060405180830381865afa15801561148a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ae9190614ccb565b6001600160a01b0316145b80611530575060035460405163e985e9c560e01b81526001600160a01b039091169063e985e9c5906114f19084908690600401614ce6565b602060405180830381865afa15801561150c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115309190614d79565b6115615760405162461bcd60e51b8152602060048201526002602482015261413160f01b604482015260640161076c565b5f86815260056020526040808220600101549051631c6c959760e01b815260048101929092526001600160a01b0316908190631c6c959790602401610180604051808303815f875af11580156115b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115dd9190614e2e565b5050505050505f611650876001846001600160a01b0316638285ef406040518163ffffffff1660e01b81526004016040805180830381865afa158015611625573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116499190614ef0565b91906123dc565b90505f5f61165e8389612474565b9150915061166c8a876124ef565b5f6116768b6125fc565b905061168c6001600160a01b038216868661264e565b6116d96040805160e08101909152805f81526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f8152602001606081525090565b6001815260208082018d90526001600160a01b03888116604080850191909152908a166060840152515f91611712918e91879101614f4c565b6040516020818303038152906040529050848611156117c1576117348d6126d3565b6001600160a01b0316637a05edcd8461174d888a614d4a565b308686604051602001611761929190614ff4565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161178f9493929190615021565b5f604051808303815f87803b1580156117a6575f5ffd5b505af11580156117b8573d5f5f3e3d5ffd5b50505050611842565b6118426040518060a00160405280306001600160a01b03168152602001856001600160a01b031681526020015f81526020018484604051602001611806929190614ff4565b60405160208183030381529060405281526020015f81525060405160200161182e9190615053565b604051602081830303815290604052612702565b50505050505050505050505050565b6118596119d4565b600280546001600160a01b038381166001600160a01b03198316179092556040519116907ff85662baab9b80fdcb7acea65a7d500f0d9b98b1757fb88e3b3c7dd0aebe4116906107d59083908590614ce6565b5f818060200190518101906118c191906150ff565b90505f81606001518060200190518101906118dc91906151b3565b509050336001600160a01b03166118f682602001516126d3565b6001600160a01b0316146119315760405162461bcd60e51b8152602060048201526002602482015261209960f11b604482015260640161076c565b61193a83612702565b505050565b6119476119d4565b600480546001600160a01b038381166001600160a01b03198316179092556040519116907f1b092cca381ac00a07e1226c164f47c475d212f5e55699475a7f411811f77dd4906107d59083908590614ce6565b6119a26119d4565b6001600160a01b0381166119cb57604051631e4fbdf760e01b81525f600482015260240161076c565b6106b081612011565b33611a067f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f435760405163118cdaa760e01b815233600482015260240161076c565b6040516001600160a01b0383811660248301526044820183905261193a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061295d565b6003546040516335313c2160e11b81526001600160a01b0384811660048301525f921690636a627842906024016020604051808303815f875af1158015611ad7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611afb9190614ca4565b90505f604051611b0a90614854565b604051809103905ff080158015611b23573d5f5f3e3d5ffd5b506040805160a0810182526001600160a01b038089168083525f8181526020818152858220548416818601819052938716858701528282529081528451634f4ce61d60e01b815294519596509294606086019492939192634f4ce61d9260048083019391928290030181865afa158015611b9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc39190614ccb565b6001600160a01b039081169190911482529415156020918201525f84815260058252604090819020835181549088166001600160a01b03199182161782559284015160018201805491891691909416179092558201516002909101805460608401516080909401511515600160a81b0260ff60a81b19941515600160a01b026001600160a81b031990921693909716929092179190911791909116939093179092559392505050565b5f81815260056020908152604080832060010154815163c6e1c7c960e01b815291516001600160a01b039091169263c6e1c7c992600480820193918290030181865afa158015611cbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce29190614ccb565b92915050565b6040516001600160a01b038481166024830152838116604483015260648201839052611d219186918216906323b872dd90608401611a5c565b50505050565b865f03611d4057611d39868984611a8e565b9650611f03565b6003546040516331a9108f60e11b8152600481018990525f916001600160a01b031690636352211e90602401602060405180830381865afa158015611d87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dab9190614ccb565b9050886001600160a01b0316816001600160a01b03161480611e40575060035460405163020604bf60e21b8152600481018a90526001600160a01b038b811692169063081812fc90602401602060405180830381865afa158015611e11573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e359190614ccb565b6001600160a01b0316145b80611eb7575060035460405163e985e9c560e01b81526001600160a01b039091169063e985e9c590611e789084908d90600401614ce6565b602060405180830381865afa158015611e93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb79190614d79565b611ee85760405162461bcd60e51b8152602060048201526002602482015261413360f01b604482015260640161076c565b505f878152600560205260409020546001600160a01b031695505b8215611f1857611f18883085610b988b6125fc565b611f2287896124ef565b82841115611fb357611f33876126d3565b6001600160a01b0316637a05edcd611f4a896125fc565b611f548688614d4a565b30611f628c8e8c8c8a6129c9565b6040518563ffffffff1660e01b8152600401611f819493929190615021565b5f604051808303815f87803b158015611f98575f5ffd5b505af1158015611faa573d5f5f3e3d5ffd5b50505050611376565b6113766040518060a00160405280306001600160a01b03168152602001611fd98a6125fc565b6001600160a01b031681526020015f8152602001611ffa8a8c8a8a886129c9565b81525f60209182015260405161182e929101615053565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b612089612aa2565b6106b081612aeb565b5f836001600160a01b0316632acada4d6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156120ce573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120f5919081019061529a565b90505f815f8151811061210a5761210a61538f565b6020908102919091010151516040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561215d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121819190614ca4565b90506121986001600160a01b038316883088611ce8565b6040516370a0823160e01b81523060048201525f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156121dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122009190614ca4565b6040516370a0823160e01b815230600482015290915061228c90889084906001600160a01b038716906370a0823190602401602060405180830381865afa15801561224d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122719190614ca4565b61227b9190614d4a565b6001600160a01b038616919061264e565b6040516370a0823160e01b81523060048201526001600160a01b038089169163b08d033391869186918316906370a0823190602401602060405180830381865afa1580156122dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123009190614ca4565b61230a9190614d4a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018890526064015f604051808303815f87803b158015612354575f5ffd5b505af1158015612366573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528392506001600160a01b038a1691506370a0823190602401602060405180830381865afa1580156123ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d29190614ca4565b6109019190614d4a565b5f83602001516001600160801b03165f036123f857508161246d565b602084015184516001600160801b0391821691612416911685614d14565b6124209190614d2b565b905081801561245d575082845f01516001600160801b031685602001516001600160801b0316836124519190614d14565b61245b9190614d2b565b105b1561246d576109998160016153a3565b9392505050565b5f60605f5f5f5f5f8780602001905181019061249091906153b6565b94509450945094509450809650888111156124a9578896505b6040805160208101879052908101859052606081018490526080810183905260a0810188905260c001604051602081830303815290604052955050505050509250929050565b5f6124f9836126d3565b90505f8190505f816001600160a01b031663c35905c66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125609190614ca4565b90508015610d54575f826001600160a01b0316633013ce296040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c99190614ccb565b90506125e06001600160a01b038216863085611ce8565b6125f46001600160a01b038216858461264e565b505050505050565b5f8181526005602090815260408083206001015481516338d52e0f60e01b815291516001600160a01b03909116926338d52e0f92600480820193918290030181865afa158015611cbe573d5f5f3e3d5ffd5b604051636eb1769f60e11b81525f906001600160a01b0385169063dd62ed3e9061267e9030908790600401614ce6565b602060405180830381865afa158015612699573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126bd9190614ca4565b9050611d2184846126ce85856153a3565b612af3565b5f60015f6126e0846125fc565b6001600160a01b03908116825260208201929092526040015f20541692915050565b5f60065460ff1661273a5760405162461bcd60e51b8152602060048201526002602482015261573160f01b604482015260640161076c565b6006805460ff191690555f8280602001905181019061275991906150ff565b90505f816060015180602001905181019061277491906151b3565b506020818101515f9081526005909152604081205482519293506001600160a01b03169160018111156127a9576127a9614f0a565b036127e0575f6127b886612b82565b905080156127da5760408301516127da906001600160a01b0384169083611a2f565b50610d54565b6001825160018111156127f5576127f5614f0a565b03612930575f5f61280587612fe7565b9092509050811561289057600454600160b01b900461ffff1615612876576004545f906127109061284190600160b01b900461ffff1685614d14565b61284b9190614d2b565b600454909150612868906001600160a01b03868116911683611a2f565b6128728184614d4a565b9250505b6040840151612890906001600160a01b0385169084611a2f565b8015612929575f6128a485602001516125fc565b600454909150600160b01b900461ffff161561290d576004545f90612710906128d890600160b01b900461ffff1685614d14565b6128e29190614d2b565b6004549091506128ff906001600160a01b03848116911683611a2f565b6129098184614d4a565b9250505b6040850151612927906001600160a01b0383169084611a2f565b505b5050610d54565b60405162461bcd60e51b81526020600482015260026024820152614e4960f01b604482015260640161076c565b5f5f60205f8451602086015f885af18061297c576040513d5f823e3d81fd5b50505f513d915081156129935780600114156129a0565b6001600160a01b0384163b155b15611d2157604051635274afe760e01b81526001600160a01b038516600482015260240161076c565b6040805160e0810182525f81526020810187905260035482516331a9108f60e11b8152600481018990526060938301916001600160a01b031690636352211e90602401602060405180830381865afa158015612a27573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a4b9190614ccb565b6001600160a01b03168152602001866001600160a01b0316815260200185815260200184815260200183815250604051602001612a8891906153f2565b604051602081830303815290604052905095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610f4357604051631afcd79f60e31b815260040160405180910390fd5b6119a2612aa2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612b4484826134d6565b611d21576040516001600160a01b0384811660248301525f6044830152612b7891869182169063095ea7b390606401611a5c565b611d21848261295d565b5f5f82806020019051810190612b9891906150ff565b90505f8160600151806020019051810190612bb391906151b3565b5090505f8160c00151806020019051810190612bcf919061541a565b50506020838101515f9081526005909152604090205460a08401516004549293506001600160a01b0390911691600160a01b900461ffff1615612c64576004545f9061271090612c2a90600160a01b900461ffff1684614d14565b612c349190614d2b565b6004546020880151919250612c56916001600160a01b03908116911683611a2f565b612c608183614d4a565b9150505b5f5f612c758760200151848861351f565b9250509150818660800151612c8a9190614d4a565b97505f612cf7856001600160a01b03166394cc699e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf09190614ccb565b838961387b565b90505f88608001518960400151612d0e91906153a3565b90505f818811612d1e5781612d20565b875b90505f612d308a60200151611c6c565b6020808c01515f90815260059091526040902060020154909150612d61906001600160a01b03808416911686611a2f565b60208a810180515f90815260059092526040808320600201549151835291829020600101549151630cb69e2760e41b81526001600160a01b039283166004820152602481018590526044810187905230606482015291169063cb69e270906084015f604051808303815f87803b158015612dd9575f5ffd5b505af1158015612deb573d5f5f3e3d5ffd5b505050505f831115612e7b57612e7b612e078b602001516126d3565b6001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e669190614ccb565b60208d01516001600160a01b03169085611a2f565b60208b01516040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ec3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ee79190614ca4565b90508015612f775760035460208c01516040516331a9108f60e11b81526004810191909152612f77916001600160a01b031690636352211e90602401602060405180830381865afa158015612f3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f629190614ccb565b60208e01516001600160a01b03169083611a2f565b8a604001516001600160a01b03168b602001517fca43cc4f42a597401985d567370a3b0120f590a4aa4a4e34cbad1f3a06239a66898887604051612fce939291909283526020830191909152604082015260600190565b60405180910390a3505050505050505050505050919050565b5f5f5f83806020019051810190612ffe91906150ff565b90505f5f826060015180602001905181019061301a91906151b3565b915091505f5f828060200190518101906130349190615445565b915091505f5f8280602001905181019061304e91906153b6565b945050505091505f8111156130745761307486606001513083610b988a602001516125fc565b6020868101515f90815260058252604090819020815160a08101835281546001600160a01b0390811682526001830154811694820185905260029092015491821681840181905260ff600160a01b8404811615156060840152600160a81b909304909216151560808201529151633d417d2d60e01b8152600481018890526024810191909152909190633d417d2d906044016020604051808303815f875af1158015613122573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131469190614ca4565b5060408082015160208301519151633879b0c560e01b81526001600160a01b03928316600482015260248101869052306044820152911690633879b0c5906064015f604051808303815f87803b15801561319e575f5ffd5b505af11580156131b0573d5f5f3e3d5ffd5b505050505f5f6131c98960200151845f01518789613bc8565b60208b8101515f90815260059091526040902060020154919d508d93509150600160a01b900460ff161561335b578260800151156132705761326d835f01516001600160a01b0316634f4ce61d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613243573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132679190614ccb565b82613f8f565b90505b6020830151604051635d043b2960e11b815260048101839052306024820181905260448201526001600160a01b039091169063ba087652906064016020604051808303815f875af11580156132c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132eb9190614ca4565b5060208a01516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613334573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133589190614ca4565b90505b5f8a608001518b6040015161337091906153a3565b9050818111156133ae575f61339b8b865f01518e6020015186866133949190614d4a565b888d614190565b909e5090506133aa81846153a3565b9250505b808210156133e45760405162461bcd60e51b81526020600482015260036024820152622120a960e91b604482015260640161076c565b801561346e5761346e6133fa8b602001516126d3565b6001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613435573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134599190614ccb565b60208d01516001600160a01b03169083611a2f565b6134788183614d4a565b9b5089604001516001600160a01b03168a602001517f6f840f37dfd9cfb60428f847c7673096e908f32aae6692556d0c4ad04f0f9566886040516134be91815260200190565b60405180910390a35050505050505050505050915091565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015613515575081156135075780600114613515565b5f866001600160a01b03163b115b9695505050505050565b5f5f5f5f5f8560c0015180602001905181019061353c919061541a565b6020898101515f818152600590925260408220600201549396509194509250829161357591908c908c90600160a81b900460ff16614387565b60208a8101515f908152600590915260408082205490516370a0823160e01b8152306004820152939550919350916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135f79190614ca4565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561363e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136629190614ca4565b60025460808c01516020808e01515f90815260059091526040902054929350613698926001600160a01b0390811692169061264e565b6002546136b2906001600160a01b0386811691168561264e565b60025460208b8101515f908152600590915260408082205460808e01519151634230a70d60e11b81526001600160a01b0391821660048201526024810192909252878116604483015260648201879052608482019290925260a4810189905260c481018890529116906384614e1a9060e4016020604051808303815f875af1158015613740573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137649190614ca4565b5060208a8101515f90815260059091526040908190205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e19190614ca4565b6137eb9083614d4a565b6040516370a0823160e01b81523060048201529099506001600160a01b038516906370a0823190602401602060405180830381865afa158015613830573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138549190614ca4565b61385e9082614d4a565b975061386a8882614d4a565b965050505050505093509350939050565b5f5f61388a8360200151611c6c565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156138d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f59190614ca4565b905061390b6001600160a01b038716838361264e565b604051636e553f6560e01b8152600481018290523060248201526001600160a01b03831690636e553f65906044016020604051808303815f875af1158015613955573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139799190614ca4565b6020858101515f90815260059091526040902060020154909350600160a01b900460ff1680156139a857505f85115b15613bbf576020848101515f90815260059091526040902060020154600160a81b900460ff1615613b2f576020808501515f90815260058252604090819020548151634f4ce61d60e01b8152915160609384936001600160a01b0390931692634f4ce61d92600480830193928290030181865afa158015613a2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4f9190614ccb565b6001600160a01b031663ee9c79da8884846040518463ffffffff1660e01b8152600401613a7e93929190615473565b5f604051808303815f87803b158015613a95575f5ffd5b505af1158015613aa7573d5f5f3e3d5ffd5b505050506020868101515f90815260059091526040908190206001015490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613b06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b2a9190614ca4565b965050505b6020848101515f9081526005909152604090819020600101549051635d043b2960e11b815260048101879052306024820181905260448201526001600160a01b039091169063ba087652906064016020604051808303815f875af1158015613b99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bbd9190614ca4565b505b50509392505050565b5f5f5f5f84806020019051810190613be091906153b6565b505092509250505f876001600160a01b03166394cc699e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c489190614ccb565b90505f886001600160a01b0316634f4ce61d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cab9190614ccb565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038b16906370a0823190602401602060405180830381865afa158015613cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d169190614ca4565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038416906370a0823190602401602060405180830381865afa158015613d5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d819190614ca4565b90505f613d8d8d611c6c565b604051635d043b2960e11b8152600481018d9052306024820181905260448201526001600160a01b03919091169063ba087652906064016020604051808303815f875af1158015613de0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e049190614ca4565b600254909150613e21906001600160a01b0387811691168361264e565b600254604051631fd8ecd960e01b81526001600160a01b038e8116600483015260248201849052604482018a90526064820189905242608483015290911690631fd8ecd99060a4015f604051808303815f87803b158015613e80575f5ffd5b505af1158015613e92573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528592506001600160a01b038f1691506370a0823190602401602060405180830381865afa158015613eda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613efe9190614ca4565b613f089190614d4a565b6040516370a0823160e01b815230600482015290995082906001600160a01b038616906370a0823190602401602060405180830381865afa158015613f4f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f739190614ca4565b613f7d9190614d4a565b97505050505050505094509492505050565b5f5f836001600160a01b0316632acada4d6040518163ffffffff1660e01b81526004015f60405180830381865afa158015613fcc573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ff3919081019061529a565b6040805160018082528183019092529192505f91906020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050825f8151811061404c5761404c61538f565b60200260200101515f0151825f815181106140695761406961538f565b60200260200101906001600160a01b031690816001600160a01b0316815250506064815f8151811061409d5761409d61538f565b60ff9092166020928302919091019091015260405163774e3ced60e11b81526001600160a01b0387169063ee9c79da906140df90889086908690600401615473565b5f604051808303815f87803b1580156140f6575f5ffd5b505af1158015614108573d5f5f3e3d5ffd5b50505050815f8151811061411e5761411e61538f565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561416c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135159190614ca4565b805182905f90859082906141ad90860160209081019087016153b6565b5093505050505f82111561437a5760208a8101515f90815260059091526040812060020154600160a01b900460ff16156143595760208b8101515f90815260059091526040908190206001015490516363737ac960e11b8152600481018590526001600160a01b0390911690614273908c9083908b90829063c6e6f59290602401602060405180830381865afa158015614249573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061426d9190614ca4565b876145ac565b6040516370a0823160e01b815230600482015291975092506001600160a01b0382169063ba0876529082906370a0823190602401602060405180830381865afa1580156142c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142e69190614ca4565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303815f875af115801561432e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143529190614ca4565b505061436c565b6143668a8a8986866145ac565b90955090505b61437681856153a3565b9350505b5050965096945050505050565b5f8481526005602052604090206001810154600290910154849184916001600160a01b0390911690600160a01b900460ff16156145a2579150816143d56001600160a01b038716828461264e565b604051636e553f6560e01b8152600481018390523060248201526001600160a01b03821690636e553f65906044016020604051808303815f875af115801561441f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144439190614ca4565b915083156145a2575f87815260056020908152604091829020548251634f4ce61d60e01b815292516001600160a01b0390911692634f4ce61d9260048083019391928290030181865afa15801561449c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144c09190614ccb565b92506144d66001600160a01b038216848461264e565b60405163b08d033360e01b81526001600160a01b038281166004830152602482018490525f604483015284169063b08d0333906064015f604051808303815f87803b158015614523575f5ffd5b505af1158015614535573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201526001600160a01b03861692506370a082319150602401602060405180830381865afa15801561457b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061459f9190614ca4565b91505b5094509492505050565b5f5f5f876001600160a01b031663822631d86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460f9190614ccb565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038a16906370a0823190602401602060405180830381865afa158015614656573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061467a9190614ca4565b905086851561472f575f896001600160a01b03168b6001600160a01b0316106146a3578a6146a5565b895b90505f816001600160a01b03168b6001600160a01b0316146146e357670de0b6b3a76400006146d4898b614d14565b6146de9190614d2b565b614700565b876146f68a670de0b6b3a7640000614d14565b6147009190614d2b565b9050606461470f826069614d14565b6147199190614d2b565b9250898311614728578261472a565b895b925050505b6147436001600160a01b038b16848361264e565b6040516383e4b89f60e01b81526001600160a01b038b811660048301528a8116602483015260448201839052606482018990523060848301528416906383e4b89f9060a4016020604051808303815f875af11580156147a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147c89190614ca4565b6040516370a0823160e01b81523060048201529094506001600160a01b038b16906370a0823190602401602060405180830381865afa15801561480d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148319190614ca4565b61483b9083614d4a565b6148459089614d4a565b94505050509550959350505050565b6107ec8061550883390190565b6001600160a01b03811681146106b0575f5ffd5b5f60208284031215614885575f5ffd5b813561246d81614861565b5f5f604083850312156148a1575f5ffd5b82356148ac81614861565b915060208301356148bc81614861565b809150509250929050565b5f5f5f5f608085870312156148da575f5ffd5b8435935060208501356148ec81614861565b925060408501356148fc81614861565b9396929550929360600135925050565b80151581146106b0575f5ffd5b5f5f5f6060848603121561492b575f5ffd5b833561493681614861565b9250602084013561494681614861565b915060408401356149568161490c565b809150509250925092565b5f5f5f5f60808587031215614974575f5ffd5b843593506020850135925060408501359150606085013561499481614861565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156149d5576149d561499f565b60405290565b60405160e081016001600160401b03811182821017156149d5576149d561499f565b604051601f8201601f191681016001600160401b0381118282101715614a2557614a2561499f565b604052919050565b5f6001600160401b03821115614a4557614a4561499f565b50601f01601f191660200190565b5f82601f830112614a62575f5ffd5b8135614a75614a7082614a2d565b6149fd565b818152846020838601011115614a89575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f5f60e0888a031215614abb575f5ffd5b873596506020880135614acd81614861565b955060408801359450606088013593506080880135925060a0880135614af28161490c565b915060c08801356001600160401b03811115614b0c575f5ffd5b614b188a828b01614a53565b91505092959891949750929550565b5f60208284031215614b37575f5ffd5b813561ffff8116811461246d575f5ffd5b5f5f5f5f5f5f5f5f610100898b031215614b60575f5ffd5b883597506020890135614b7281614861565b965060408901359550606089013594506080890135935060a0890135925060c0890135614b9e8161490c565b915060e08901356001600160401b03811115614bb8575f5ffd5b614bc48b828c01614a53565b9150509295985092959890939650565b5f5f5f60608486031215614be6575f5ffd5b8335614bf181614861565b92506020840135614c0181614861565b9150604084013561495681614861565b5f5f5f60608486031215614c23575f5ffd5b833592506020840135915060408401356001600160401b03811115614c46575f5ffd5b614c5286828701614a53565b9150509250925092565b5f60208284031215614c6c575f5ffd5b81356001600160401b03811115614c81575f5ffd5b61099984828501614a53565b5f60208284031215614c9d575f5ffd5b5035919050565b5f60208284031215614cb4575f5ffd5b5051919050565b8051614cc681614861565b919050565b5f60208284031215614cdb575f5ffd5b815161246d81614861565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611ce257611ce2614d00565b5f82614d4557634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115611ce257611ce2614d00565b602080825260029082015261057360f41b604082015260600190565b5f60208284031215614d89575f5ffd5b815161246d8161490c565b805163ffffffff81168114614cc6575f5ffd5b80516001600160401b0381168114614cc6575f5ffd5b80516001600160801b0381168114614cc6575f5ffd5b5f60408284031215614de3575f5ffd5b604080519081016001600160401b0381118282101715614e0557614e0561499f565b604052905080614e1483614dbd565b8152614e2260208401614dbd565b60208201525092915050565b5f5f5f5f5f5f868803610180811215614e45575f5ffd5b8751602089015160408a01519198509650945060a0605f1982011215614e69575f5ffd5b50614e726149b3565b614e7e60608901614d94565b8152614e8c60808901614d94565b6020820152614e9d60a08901614da7565b6040820152614eae60c08901614da7565b6060820152614ebf60e08901614da7565b60808201529250614ed4886101008901614dd3565b9150614ee4886101408901614dd3565b90509295509295509295565b5f60408284031215614f00575f5ffd5b61246d8383614dd3565b634e487b7160e01b5f52602160045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f6109996040830184614f1e565b5f815160028110614f8357634e487b7160e01b5f52602160045260245ffd5b80845250602082015160208401526040820151614fab60408501826001600160a01b03169052565b506060820151614fc660608501826001600160a01b03169052565b506080820151608084015260a082015160a084015260c082015160e060c085015261099960e0850182614f1e565b604081525f6150066040830185614f64565b82810360208401526150188185614f1e565b95945050505050565b6001600160a01b03858116825260208201859052831660408201526080606082018190525f9061351590830184614f1e565b6020815260018060a01b03825116602082015260018060a01b036020830151166040820152604082015160608201525f606083015160a0608084015261509c60c0840182614f1e565b9050608084015160a08401528091505092915050565b5f82601f8301126150c1575f5ffd5b81516150cf614a7082614a2d565b8181528460208386010111156150e3575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561510f575f5ffd5b81516001600160401b03811115615124575f5ffd5b820160a08185031215615135575f5ffd5b61513d6149b3565b815161514881614861565b8152602082015161515881614861565b60208201526040828101519082015260608201516001600160401b0381111561517f575f5ffd5b61518b868285016150b2565b606083015250608091820151918101919091529392505050565b805160028110614cc6575f5ffd5b5f5f604083850312156151c4575f5ffd5b82516001600160401b038111156151d9575f5ffd5b830160e081860312156151ea575f5ffd5b6151f26149db565b6151fb826151a5565b81526020828101519082015261521360408301614cbb565b604082015261522460608301614cbb565b60608201526080828101519082015260a0808301519082015260c08201516001600160401b03811115615255575f5ffd5b615261878285016150b2565b60c083015250809350505060208301516001600160401b03811115615284575f5ffd5b615290858286016150b2565b9150509250929050565b5f602082840312156152aa575f5ffd5b81516001600160401b038111156152bf575f5ffd5b8201601f810184136152cf575f5ffd5b80516001600160401b038111156152e8576152e861499f565b6152f760208260051b016149fd565b80828252602082019150602060a08402850101925086831115615318575f5ffd5b6020840193505b828410156135155760a08488031215615336575f5ffd5b61533e6149b3565b845161534981614861565b81526020858101519082015260408086015190820152606085015161536d81614861565b606082015260808581015190820152825260a09093019260209091019061531f565b634e487b7160e01b5f52603260045260245ffd5b80820180821115611ce257611ce2614d00565b5f5f5f5f5f60a086880312156153ca575f5ffd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b604081525f6154046040830184614f64565b8281036020938401525f81529190910192915050565b5f5f5f6060848603121561542c575f5ffd5b5050815160208301516040909301519094929350919050565b5f5f60408385031215615456575f5ffd5b825160208401519092506001600160401b03811115615284575f5ffd5b5f60608201858352606060208401528085518083526080850191506020870192505f5b818110156154bd5783516001600160a01b0316835260209384019390920191600101615496565b50508381036040850152845180825260209182019250908501905f5b818110156154fa57825160ff168452602093840193909201916001016154d9565b509197965050505050505056fe6080604052348015600e575f5ffd5b503380603357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b603a81603f565b50608e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107518061009b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633879b0c514610064578063715018a6146100795780638da5cb5b14610081578063cb69e2701461009f578063d9caed12146100b2578063f2fde38b146100c5575b5f5ffd5b6100776100723660046105e4565b6100d8565b005b610077610142565b5f54604080516001600160a01b039092168252519081900360200190f35b6100776100ad366004610623565b610155565b6100776100c036600461066a565b610250565b6100776100d33660046106a8565b6102e5565b6100e0610327565b604051636a0eee4b60e11b8152600481018390526001600160a01b03828116602483015284169063d41ddc96906044015f604051808303815f87803b158015610127575f5ffd5b505af1158015610139573d5f5f3e3d5ffd5b50505050505050565b61014a610327565b6101535f610353565b565b61015d610327565b6101d28483866001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c291906106ca565b6001600160a01b031691906103a2565b6040516372f89d8b60e11b815260048101849052602481018390526001600160a01b03828116604483015285169063e5f13b16906064016020604051808303815f875af1158015610225573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024991906106e5565b5050505050565b610258610327565b801561026457806102ca565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156102a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ca91906106e5565b90506102e06001600160a01b038416838361042f565b505050565b6102ed610327565b6001600160a01b03811661031b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61032481610353565b50565b5f546001600160a01b031633146101535760405163118cdaa760e01b8152336004820152602401610312565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156103ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041391906106e5565b9050610429848461042485856106fc565b61048e565b50505050565b6040516001600160a01b038381166024830152604482018390526102e091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610519565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526104df8482610585565b610429576040516001600160a01b0384811660248301525f604483015261051391869182169063095ea7b39060640161045c565b61042984825b5f5f60205f8451602086015f885af180610538576040513d5f823e3d81fd5b50505f513d9150811561054f57806001141561055c565b6001600160a01b0384163b155b1561042957604051635274afe760e01b81526001600160a01b0385166004820152602401610312565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156105c4575081156105b657806001146105c4565b5f866001600160a01b03163b115b93505050505b92915050565b6001600160a01b0381168114610324575f5ffd5b5f5f5f606084860312156105f6575f5ffd5b8335610601816105d0565b9250602084013591506040840135610618816105d0565b809150509250925092565b5f5f5f5f60808587031215610636575f5ffd5b8435610641816105d0565b93506020850135925060408501359150606085013561065f816105d0565b939692955090935050565b5f5f5f6060848603121561067c575f5ffd5b8335610687816105d0565b92506020840135610697816105d0565b929592945050506040919091013590565b5f602082840312156106b8575f5ffd5b81356106c3816105d0565b9392505050565b5f602082840312156106da575f5ffd5b81516106c3816105d0565b5f602082840312156106f5575f5ffd5b5051919050565b808201808211156105ca57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220f72f209154a443c979621530d2b6f3fec27e3780ea4cf9e8f0b8e17e93e736b864736f6c634300081c0033a2646970667358221220aafcbd64bc2e20539ffdcfff172b3dcabee0b04ae86b69b3e2d9c5500c35b7ac64736f6c634300081c0033