0 txs
0 calls
constructor
constructor(address feeRecipient, address initialOwner, uint256 flashLoanFee)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getAllBinSteps
viewfunction getAllBinSteps() view returns (uint256[] binStepWithPreset)
getAllLBPairs
viewfunction getAllLBPairs(address tokenX, address tokenY) view returns (tuple[] lbPairsAvailable)
getFeeRecipient
viewfunction getFeeRecipient() view returns (address feeRecipient)
getFlashLoanFee
viewfunction getFlashLoanFee() view returns (uint256 flashLoanFee)
getLBPairAtIndex
viewfunction getLBPairAtIndex(uint256 index) view returns (address lbPair)
getLBPairImplementation
viewfunction getLBPairImplementation() view returns (address lbPairImplementation)
getLBPairInformation
viewfunction getLBPairInformation(address tokenA, address tokenB, uint256 binStep) view returns (tuple lbPairInformation)
getMaxFlashLoanFee
purefunction getMaxFlashLoanFee() pure returns (uint256 maxFee)
getMinBinStep
purefunction getMinBinStep() pure returns (uint256 minBinStep)
getNumberOfLBPairs
viewfunction getNumberOfLBPairs() view returns (uint256 lbPairNumber)
getNumberOfQuoteAssets
viewfunction getNumberOfQuoteAssets() view returns (uint256 numberOfQuoteAssets)
getOpenBinSteps
viewfunction getOpenBinSteps() view returns (uint256[] openBinStep)
getPreset
viewfunction getPreset(uint256 binStep) view returns (uint256 baseFactor, uint256 filterPeriod, uint256 decayPeriod, uint256 reductionFactor, uint256 variableFeeControl, uint256 protocolShare, uint256 maxVolatilityAccumulator, bool isOpen)
getQuoteAssetAtIndex
viewfunction getQuoteAssetAtIndex(uint256 index) view returns (address asset)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isQuoteAsset
viewfunction isQuoteAsset(address token) view returns (bool isQuote)
LB_HOOKS_MANAGER_ROLE
viewfunction LB_HOOKS_MANAGER_ROLE() view returns (bytes32)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
addQuoteAsset
nonpayablefunction addQuoteAsset(address quoteAsset)
createLBPair
nonpayablefunction createLBPair(address tokenX, address tokenY, uint24 activeId, uint16 binStep) returns (address pair)
forceDecay
nonpayablefunction forceDecay(address pair)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
removeLBHooksOnPair
nonpayablefunction removeLBHooksOnPair(address tokenX, address tokenY, uint16 binStep)
removePreset
nonpayablefunction removePreset(uint16 binStep)
removeQuoteAsset
nonpayablefunction removeQuoteAsset(address quoteAsset)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setFeeRecipient
nonpayablefunction setFeeRecipient(address feeRecipient)
setFeesParametersOnPair
nonpayablefunction setFeesParametersOnPair(address tokenX, address tokenY, uint16 binStep, uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator)
setFlashLoanFee
nonpayablefunction setFlashLoanFee(uint256 flashLoanFee)
setLBHooksParametersOnPair
nonpayablefunction setLBHooksParametersOnPair(address tokenX, address tokenY, uint16 binStep, bytes32 hooksParameters, bytes onHooksSetData)
setLBPairIgnored
nonpayablefunction setLBPairIgnored(address tokenX, address tokenY, uint16 binStep, bool ignored)
setLBPairImplementation
nonpayablefunction setLBPairImplementation(address newLBPairImplementation)
setPreset
nonpayablefunction setPreset(uint16 binStep, uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator, bool isOpen)
setPresetOpenState
nonpayablefunction setPresetOpenState(uint16 binStep, bool isOpen)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
FeeRecipientSet
event FeeRecipientSet(address oldRecipient, address newRecipient)
FlashLoanFeeSet
event FlashLoanFeeSet(uint256 oldFlashLoanFee, uint256 newFlashLoanFee)
LBPairCreated
event LBPairCreated(address indexed tokenX, address indexed tokenY, uint256 indexed binStep, address LBPair, uint256 pid)
LBPairIgnoredStateChanged
event LBPairIgnoredStateChanged(address indexed LBPair, bool ignored)
LBPairImplementationSet
event LBPairImplementationSet(address oldLBPairImplementation, address LBPairImplementation)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PresetOpenStateChanged
event PresetOpenStateChanged(uint256 indexed binStep, bool indexed isOpen)
PresetRemoved
event PresetRemoved(uint256 indexed binStep)
PresetSet
event PresetSet(uint256 indexed binStep, uint256 baseFactor, uint256 filterPeriod, uint256 decayPeriod, uint256 reductionFactor, uint256 variableFeeControl, uint256 protocolShare, uint256 maxVolatilityAccumulator)
QuoteAssetAdded
event QuoteAssetAdded(address indexed quoteAsset)
QuoteAssetRemoved
event QuoteAssetRemoved(address indexed quoteAsset)
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)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EnumerableMapNonexistentKey
error EnumerableMapNonexistentKey(bytes32 key)
LBFactory__AddressZero
error LBFactory__AddressZero()
LBFactory__BinStepHasNoPreset
error LBFactory__BinStepHasNoPreset(uint256 binStep)
LBFactory__BinStepTooLow
error LBFactory__BinStepTooLow(uint256 binStep)
LBFactory__CannotGrantDefaultAdminRole
error LBFactory__CannotGrantDefaultAdminRole()
LBFactory__FlashLoanFeeAboveMax
error LBFactory__FlashLoanFeeAboveMax(uint256 fees, uint256 maxFees)
LBFactory__IdenticalAddresses
error LBFactory__IdenticalAddresses(address token)
LBFactory__ImplementationNotSet
error LBFactory__ImplementationNotSet()
LBFactory__InvalidHooksParameters
error LBFactory__InvalidHooksParameters()
LBFactory__LBPairAlreadyExists
error LBFactory__LBPairAlreadyExists(address tokenX, address tokenY, uint256 _binStep)
LBFactory__LBPairDoesNotExist
error LBFactory__LBPairDoesNotExist(address tokenX, address tokenY, uint256 binStep)
LBFactory__LBPairIgnoredIsAlreadyInTheSameState
error LBFactory__LBPairIgnoredIsAlreadyInTheSameState()
LBFactory__LBPairNotCreated
error LBFactory__LBPairNotCreated(address tokenX, address tokenY, uint256 binStep)
LBFactory__LBPairSafetyCheckFailed
error LBFactory__LBPairSafetyCheckFailed(address LBPairImplementation)
LBFactory__PresetIsLockedForUsers
error LBFactory__PresetIsLockedForUsers(address user, uint256 binStep)
LBFactory__PresetOpenStateIsAlreadyInTheSameState
error LBFactory__PresetOpenStateIsAlreadyInTheSameState()
LBFactory__QuoteAssetAlreadyWhitelisted
error LBFactory__QuoteAssetAlreadyWhitelisted(address quoteAsset)
LBFactory__QuoteAssetNotWhitelisted
error LBFactory__QuoteAssetNotWhitelisted(address quoteAsset)
LBFactory__SameFeeRecipient
error LBFactory__SameFeeRecipient(address feeRecipient)
LBFactory__SameFlashLoanFee
error LBFactory__SameFlashLoanFee(uint256 flashLoanFee)
LBFactory__SameHooksImplementation
error LBFactory__SameHooksImplementation(address hooksImplementation)
LBFactory__SameHooksParameters
error LBFactory__SameHooksParameters(bytes32 hooksParameters)
LBFactory__SameImplementation
error LBFactory__SameImplementation(address LBPairImplementation)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PairParametersHelper__InvalidParameter
error PairParametersHelper__InvalidParameter()
SafeCast__Exceeds16Bits
error SafeCast__Exceeds16Bits()
Uint128x128Math__PowUnderflow
error Uint128x128Math__PowUnderflow(uint256 x, int256 y)
creation bytecode
0x60806040523480156200001157600080fd5b506040516200310938038062003109833981016040819052620000349162000253565b816001600160a01b0381166200006557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000708162000100565b5067016345785d8a0000811115620000ad57604051635e8988c160e01b81526004810182905267016345785d8a000060248201526044016200005c565b620000b8836200011e565b60048190556040805160008152602081018390527f5c34e91c94c78b662a45d0bd4a25a4e32c584c54a45a76e4a4d43be27ba40e50910160405180910390a150505062000294565b600180546001600160a01b03191690556200011b81620001e6565b50565b6001600160a01b0381166200014657604051632573cfb960e21b815260040160405180910390fd5b6003546001600160a01b0390811690821681036200018757600354604051634fcea97160e01b81526001600160a01b0390911660048201526024016200005c565b600380546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa70840152721910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200024e57600080fd5b919050565b6000806000606084860312156200026957600080fd5b620002748462000236565b9250620002846020850162000236565b9150604084015190509250925092565b612e6580620002a46000396000f3fe608060405234801561001057600080fd5b506004361061027e5760003560e01c8063701ab8c111610156578063aabc4b3c116100d3578063e203a31f11610097578063e92d0d5d11610071578063e92d0d5d146105c7578063f2fde38b146105da578063fd90c2be146105ed57600080fd5b8063e203a31f14610590578063e30c3978146105a3578063e74b981b146105b457600080fd5b8063aabc4b3c146104f6578063af37106514610546578063b038478114610557578063d547741f1461056a578063ddbfd9411461057d57600080fd5b806380c5061e1161011a57806380c5061e146104b45780638ce9aa1c146104bc5780638da5cb5b146104ca57806391d14854146104db578063a217fddf146104ee57600080fd5b8063701ab8c11461046a578063704037bd14610471578063715018a61461049157806379ba5097146104995780637daf5d66146104a157600080fd5b8063379ee803116101ff5780634e937c3a116101c3578063659ac74b1161019d578063659ac74b146104245780636622e0d71461043757806369d56ea31461045757600080fd5b80634e937c3a146104015780635a440923146104095780635b35875c1461041c57600080fd5b8063379ee803146103a45780633a2f1a91146103b75780633c78a941146103ca5780634ccb20c0146103dd5780634cd161d3146103ee57600080fd5b8063248a9ca311610246578063248a9ca31461033557806327721842146103585780632cc06b8c1461036b5780632f2ff15d1461037e57806336568abe1461039157600080fd5b806301ffc9a7146102835780630282c9c1146102ab5780630752092b146102c0578063093ff769146102eb5780631af5bacc14610300575b600080fd5b61029661029136600461276f565b6105f5565b60405190151581526020015b60405180910390f35b6102b361062c565b6040516102a29190612799565b6102d36102ce3660046127dd565b610706565b6040516001600160a01b0390911681526020016102a2565b6102fe6102f9366004612830565b610713565b005b6103277fdcf4465aa60d92459eb361fac2489220ae3c524301cc0433c30a5d83e8fb0fa981565b6040519081526020016102a2565b6103276103433660046127dd565b60009081526002602052604090206001015490565b6102966103663660046128ee565b610819565b6102fe61037936600461290b565b610826565b6102fe61038c366004612952565b610875565b6102fe61039f366004612952565b61089a565b6102fe6103b2366004612992565b6108d2565b6102fe6103c5366004612a3a565b6109ee565b6102fe6103d83660046128ee565b610aa0565b6003546001600160a01b03166102d3565b6102fe6103fc366004612aeb565b610afe565b600654610327565b6102fe6104173660046128ee565b610bc9565b6102b3610c3b565b6102d3610432366004612b1e565b610c4c565b61044a610445366004612b76565b611174565b6040516102a29190612ba4565b6102fe610465366004612c18565b61130c565b6001610327565b61048461047f366004612c65565b611496565b6040516102a29190612ca6565b6102fe6114cd565b6102fe6114e1565b6102d36104af3660046127dd565b611525565b610327611555565b67016345785d8a0000610327565b6000546001600160a01b03166102d3565b6102966104e9366004612952565b611561565b610327600081565b6105096105043660046127dd565b6115ad565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e0820152610100016102a2565b6005546001600160a01b03166102d3565b6102fe6105653660046128ee565b61166e565b6102fe610578366004612952565b6117af565b6102fe61058b3660046128ee565b6117d4565b6102fe61059e366004612ce2565b611846565b6001546001600160a01b03166102d3565b6102fe6105c23660046128ee565b6118b2565b6102fe6105d53660046127dd565b6118c3565b6102fe6105e83660046128ee565b611966565b600454610327565b60006001600160e01b03198216637965db0b60e01b148061062657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600061063a60086119d7565b90508015610702578067ffffffffffffffff81111561065b5761065b612cfd565b604051908082528060200260200182016040528015610684578160200160208202803683370190505b5091506000805b828110156106f3576000806106a16008846119e2565b90925090506106af816119fe565b156106e057818685815181106106c7576106c7612d13565b6020908102919091010152836106dc81612d3f565b9450505b5050806106ec90612d3f565b905061068b565b5081811015610700578083525b505b5090565b6000610626600b83611a0a565b61071b611a16565b600061072c8b8b8b61ffff16611a43565b6020015190506001600160a01b03811661077b5760405163b65ee95360e01b81526001600160a01b03808d1660048301528b16602482015261ffff8a1660448201526064015b60405180910390fd5b604051633329c28d60e11b815261ffff808a16600483015280891660248301528088166044830152808716606483015262ffffff808716608484015290851660a4830152831660c48201526001600160a01b03821690636653851a9060e401600060405180830381600087803b1580156107f457600080fd5b505af1158015610808573d6000803e3d6000fd5b505050505050505050505050505050565b6000610626600b83611aed565b7fdcf4465aa60d92459eb361fac2489220ae3c524301cc0433c30a5d83e8fb0fa961085081611b0f565b6040805160008082526020820190925261086f91869186918691611b19565b50505050565b60008281526002602052604090206001015461089081611b0f565b61086f8383611c60565b6001600160a01b03811633146108c35760405163334bd91960e11b815260040160405180910390fd5b6108cd8282611c8a565b505050565b6108da611a16565b60018961ffff16101561090657604051634f958e7160e01b815261ffff8a166004820152602401610772565b6000610918818a8a8a8a8a8a8a611cff565b905081156109305761092d81600160ff611dff565b90505b610940600861ffff8c1683611e26565b506040805161ffff8b811682528a8116602083015289811682840152888116606083015262ffffff888116608084015287821660a0840152861660c08301529151918c16917f839844a256a87f87c9c835117d9a1c40be013954064c937072acb32d36db6a289181900360e00190a26040518215159061ffff8c16907f58a8b6a02b964cca2712e5a71d7b0d564a56b4a0f573b4c47f389341ade14cfd90600090a350505050505050505050565b7fdcf4465aa60d92459eb361fac2489220ae3c524301cc0433c30a5d83e8fb0fa9610a1881611b0f565b6001600160a01b0384161580610a365750836001600160a01b031916155b15610a545760405163d43a15d160e01b815260040160405180910390fd5b610a978787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1992505050565b50505050505050565b610aa8611a16565b806001600160a01b031663d3b9fbe46040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b5050505050565b610b06611a16565b610b15600861ffff8416611e33565b610b3857604051637d9160bf60e11b815261ffff83166004820152602401610772565b6000610b49600861ffff8516611e3f565b905081151560ff82901c151503610b73576040516311be38db60e11b815260040160405180910390fd5b610b9061ffff8416610b87838560ff611dff565b60089190611e26565b506040518215159061ffff8516907f58a8b6a02b964cca2712e5a71d7b0d564a56b4a0f573b4c47f389341ade14cfd90600090a3505050565b610bd1611a16565b610bdc600b82611e4b565b610c04576040516303ce0ad960e01b81526001600160a01b0382166004820152602401610772565b6040516001600160a01b038216907f84cc2115995684dcb0cd3d3a9565e3d32f075de81db70c8dc3a719b2a47af67e90600090a250565b6060610c476008611e60565b905090565b6000610c5d600861ffff8416611e33565b610c8057604051637d9160bf60e11b815261ffff83166004820152602401610772565b6000610c91600861ffff8516611e3f565b90506000610ca76000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316149050610cc6826119fe565b158015610cd1575080155b15610cfb576040516304fc2fe760e11b815233600482015261ffff85166024820152604401610772565b610d06600b87611aed565b610d2e57604051638e888ef360e01b81526001600160a01b0387166004820152602401610772565b856001600160a01b0316876001600160a01b031603610d6b57604051632f9b185360e01b81526001600160a01b0388166004820152602401610772565b610d758585611e6d565b50600080610d838989611ea4565b90925090506001600160a01b038216610daf57604051632573cfb960e21b815260040160405180910390fd5b6001600160a01b0382811660009081526007602090815260408083208585168452825280832061ffff8b1684529091529020546201000090041615610e245760405163cb27a43560e01b81526001600160a01b03808b1660048301528916602482015261ffff87166044820152606401610772565b6005546001600160a01b031680610e4e576040516328b4fcf960e21b815260040160405180910390fd5b6040516bffffffffffffffffffffffff1960608c811b821660208401528b901b1660348201527fffff00000000000000000000000000000000000000000000000000000000000060f089901b166048820152610efb908290604a0160408051601f198184030181528282526001600160a01b03808916602085015287169183019190915261ffff8b1660608301529060800160405160208183030381529060405280519060200120611ecd565b6040805160808101825261ffff808b168083526001600160a01b0380861660208086018281528c15158789019081526000606089018181528e8716808352600786528b83208f89168085529087528c84208a855287528c84209b518c549651955193511515600160b81b0260ff60b81b19941515600160b01b029490941661ffff60b01b1996909a16620100000275ffffffffffffffffffffffffffffffffffffffffffff199097169b169a909a179490941792909216959095171790965560068054600181019091557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916909217909155938152600d8452848120928152919092529190912091975061101b9250611f88565b508561ffff16886001600160a01b03168a6001600160a01b03167f2c8d104b27c6b7f4492017a6f5cf3803043688934ebcaa6a03540beeaf976aff8860016006805490506110699190612d58565b604080516001600160a01b03909316835260208301919091520160405180910390a4846001600160a01b03166347973bff6110a386611f94565b6110ac87611fa0565b6110b588611fb0565b6110be89611fc0565b6110c78a611fd0565b6110d08b611fe1565b6110d98c611ff1565b6040516001600160e01b031960e08a901b16815261ffff978816600482015295871660248701529386166044860152918516606485015262ffffff9081166084850152931660a4830152821660c4820152908a1660e482015261010401600060405180830381600087803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b5050505050505050949350505050565b60606000806111838585611ea4565b6001600160a01b038083166000908152600d6020908152604080832093851683529290529081209294509092506111b982612002565b90508015611302578067ffffffffffffffff8111156111da576111da612cfd565b60405190808252806020026020018201604052801561122c57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816111f85790505b506001600160a01b03808616600090815260076020908152604080832093881683529290529081209196505b828110156112ff57600061127461126f8684611a0a565b61200c565b6040805160808101825261ffff831680825260008181526020888152848220546001600160a01b03620100008204168286015260ff600160b01b8204811615159686019690965292909152879052600160b81b9004909116151560608201528951919250908990849081106112eb576112eb612d13565b602090810291909101015250600101611258565b50505b5050505092915050565b611314611a16565b6000806113218686611ea4565b6001600160a01b0380831660009081526007602090815260408083208486168452825280832061ffff808c1685529083529281902081516080810183529054938416815262010000840490941691840182905260ff600160b01b84048116151591850191909152600160b81b90920490911615156060830152929450909250906113db5760405163102a919160e21b81526001600160a01b0380891660048301528716602482015261ffff86166044820152606401610772565b831515816060015115150361140257604051626ee66560e11b815260040160405180910390fd5b6001600160a01b0380841660009081526007602090815260408083208685168452825280832061ffff8a1684528252918290208054881515600160b81b0260ff60b81b1990911617905583015190519116907f44cf35361c9ff3c8c1397ec6410d5495cc481feaef35c9af11da1a637107de4f9061148590871515815260200190565b60405180910390a250505050505050565b6040805160808101825260008082526020820181905291810182905260608101919091526114c5848484611a43565b949350505050565b6114d5611a16565b6114df6000612036565b565b60015433906001600160a01b031681146115195760405163118cdaa760e01b81526001600160a01b0382166004820152602401610772565b61152281612036565b50565b60006006828154811061153a5761153a612d13565b6000918252602090912001546001600160a01b031692915050565b6000610c47600b612002565b60008261157f57506000546001600160a01b03828116911614610626565b60008381526002602090815260408083206001600160a01b038616845290915290205460ff165b9392505050565b6000808080808080806115c160088a611e33565b6115e157604051637d9160bf60e11b8152600481018a9052602401610772565b60006115ee60088b611e3f565b90506115f981611f94565b61ffff16985061160881611fa0565b61ffff16975061161781611fb0565b61ffff16965061162681611fc0565b61ffff16955061163581611fd0565b62ffffff16945061164581611fe1565b61ffff16935061165481611ff1565b62ffffff16925060ff81901c915050919395975091939597565b611676611a16565b306001600160a01b0316816001600160a01b03166388cc58e46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e29190612d6b565b6001600160a01b03161461171457604051630a3e70af60e11b81526001600160a01b0382166004820152602401610772565b6005546001600160a01b03908116908216810361174f57604051630ded3b9560e31b81526001600160a01b0383166004820152602401610772565b600580546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f900d0e3d359f50e4f923ecdc06b401e07dbb9f485e17b07bcfc91a13000b277e91015b60405180910390a15050565b6000828152600260205260409020600101546117ca81611b0f565b61086f8383611c8a565b6117dc611a16565b6117e7600b8261204f565b61180f57604051638e888ef360e01b81526001600160a01b0382166004820152602401610772565b6040516001600160a01b038216907f0b767739217755d8af5a2ba75b181a19fa1750f8bb701f09311cb19a90140cb390600090a250565b61184e611a16565b61185d600861ffff8316612064565b61188057604051637d9160bf60e11b815261ffff82166004820152602401610772565b60405161ffff8216907fdd86b848bb56ff540caa68683fa467d0e7eb5f8b2d44e4ee435742eeeae9be1390600090a250565b6118ba611a16565b61152281612070565b6118cb611a16565b6004548181036118f157604051631baa31e960e21b815260048101839052602401610772565b67016345785d8a000082111561192b57604051635e8988c160e01b81526004810183905267016345785d8a00006024820152604401610772565b600482905560408051828152602081018490527f5c34e91c94c78b662a45d0bd4a25a4e32c584c54a45a76e4a4d43be27ba40e5091016117a3565b61196e611a16565b600180546001600160a01b0383166001600160a01b0319909116811790915561199f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006106268261212e565b60008080806119f18686612139565b9097909650945050505050565b600060ff82901c610626565b60006115a68383612164565b6000546001600160a01b031633146114df5760405163118cdaa760e01b8152336004820152602401610772565b604080516080810182526000808252602082018190529181018290526060810191909152611a718484611ea4565b6001600160a01b03918216600090815260076020908152604080832093851683529281528282209582529485528190208151608081018352905461ffff811682526201000081049093169481019490945260ff600160b01b83048116151591850191909152600160b81b90910416151560608301525092915050565b6001600160a01b038116600090815260018301602052604081205415156115a6565b611522813361218e565b6000611b2a86868661ffff16611a43565b6020015190506001600160a01b038116611b745760405163b65ee95360e01b81526001600160a01b0380881660048301528616602482015261ffff85166044820152606401610772565b82816001600160a01b031663781a89156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd79190612d88565b03611bf85760405163b70cd0db60e01b815260048101849052602401610772565b604051631b057f6d60e01b81526001600160a01b03821690631b057f6d90611c269086908690600401612da1565b600060405180830381600087803b158015611c4057600080fd5b505af1158015611c54573d6000803e3d6000fd5b50505050505050505050565b600082611c8057604051633e3253cf60e11b815260040160405180910390fd5b6115a683836121cb565b6000611c968383611561565b15611cf75760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610626565b506000610626565b60008561ffff168761ffff161180611d1c5750610fff8661ffff16115b80611d2c57506127108561ffff16115b80611d3c57506109c48361ffff16115b80611d4e5750620fffff8262ffffff16115b15611d6c57604051631c07203f60e01b815260040160405180910390fd5b5060109590951b630fff00001661ffff9690961695909517601c9390931b64fff0000000169290921760289190911b663fff0000000000161760369190911b693fffffc00000000000001617604e9290921b6b0fffc00000000000000000001691909117605c9190911b6dfffff0000000000000000000000016176dffffffffffffffffffffffffffff19919091161790565b60006114c58484611e11576000611e14565b60015b600180861b19929092169116841b1790565b60006114c5848484612257565b60006115a68383612274565b60006115a68383612280565b60006115a6836001600160a01b0384166122c7565b606060006115a68361230e565b600061271061ffff60801b608084901b1604600160801b0162ffffff8416627fffff1901611e9b8282612319565b95945050505050565b600080826001600160a01b0316846001600160a01b03161115611ec5579192915b509192909150565b600060408303516020840351845180602087010180516002830161ffca811115611eff5763c8c781396000526004601cfd5b6c5af43d3d93803e603357fd5bf3895289600d8a03527d6100003d81600a3d39f3363d3d373d3d3d3d610000806035363936013d738160481b176035820160d81b1760218a03528060f01b835287603f8201601f8b036000f596505085611f6e5763301164256000526004601cfd5b90528552601f19850152603f199093019290925250919050565b60006115a683836122c7565b600061ffff8216610626565b60006106268260101c610fff1690565b600061062682601c1c610fff1690565b60006106268260281c613fff1690565b60006106268260361c62ffffff1690565b600061062682604e1c613fff1690565b600061062682605c1c620fffff1690565b6000610626825490565b8061ffff81168114612031576040516364ae406d60e01b815260040160405180910390fd5b919050565b600180546001600160a01b031916905561152281612582565b60006115a6836001600160a01b0384166125d2565b60006115a683836126c5565b6001600160a01b03811661209757604051632573cfb960e21b815260040160405180910390fd5b6003546001600160a01b0390811690821681036120d657600354604051634fcea97160e01b81526001600160a01b039091166004820152602401610772565b600380546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa7084015272191016117a3565b600061062682612002565b600080806121478585611a0a565b600081815260029690960160205260409095205494959350505050565b600082600001828154811061217b5761217b612d13565b9060005260206000200154905092915050565b6121988282611561565b6121c75760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610772565b5050565b60006121d78383611561565b611cf75760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561220f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610626565b600082815260028401602052604081208290556114c58484611f88565b60006115a683836126e2565b6000818152600283016020526040812054801580156122a657506122a48484612274565b155b156115a65760405163015ab34360e11b815260048101849052602401610772565b6000818152600183016020526040812054611cf757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610626565b6060610626826126fa565b6000806000836000036123355750600160801b91506106269050565b50826000811215612347579015906000035b6210000081101561254057600160801b9250846fffffffffffffffffffffffffffffffff81111561237a57911591600019045b600182161561238b5792830260801c925b800260801c60028216156123a15792830260801c925b800260801c60048216156123b75792830260801c925b800260801c60088216156123cd5792830260801c925b800260801c60108216156123e35792830260801c925b800260801c60208216156123f95792830260801c925b800260801c604082161561240f5792830260801c925b8002608090811c908216156124265792830260801c925b800260801c61010082161561243d5792830260801c925b800260801c6102008216156124545792830260801c925b800260801c61040082161561246b5792830260801c925b800260801c6108008216156124825792830260801c925b800260801c6110008216156124995792830260801c925b800260801c6120008216156124b05792830260801c925b800260801c6140008216156124c75792830260801c925b800260801c6180008216156124de5792830260801c925b800260801c620100008216156124f65792830260801c925b800260801c6202000082161561250e5792830260801c925b800260801c620400008216156125265792830260801c925b800260801c6208000082161561253e5792830260801c925b505b8260000361256b57604051631dba598d60e11b81526004810186905260248101859052604401610772565b816125765782611e9b565b611e9b83600019612df7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081815260018301602052604081205480156126bb5760006125f6600183612d58565b855490915060009061260a90600190612d58565b905080821461266f57600086600001828154811061262a5761262a612d13565b906000526020600020015490508087600001848154811061264d5761264d612d13565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061268057612680612e19565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610626565b6000915050610626565b600081815260028301602052604081208190556115a68383612707565b600081815260018301602052604081205415156115a6565b606060006115a683612713565b60006115a683836125d2565b60608160000180548060200260200160405190810160405280929190818152602001828054801561276357602002820191906000526020600020905b81548152602001906001019080831161274f575b50505050509050919050565b60006020828403121561278157600080fd5b81356001600160e01b0319811681146115a657600080fd5b6020808252825182820181905260009190848201906040850190845b818110156127d1578351835292840192918401916001016127b5565b50909695505050505050565b6000602082840312156127ef57600080fd5b5035919050565b6001600160a01b038116811461152257600080fd5b803561ffff8116811461203157600080fd5b803562ffffff8116811461203157600080fd5b6000806000806000806000806000806101408b8d03121561285057600080fd5b8a3561285b816127f6565b995060208b013561286b816127f6565b985061287960408c0161280b565b975061288760608c0161280b565b965061289560808c0161280b565b95506128a360a08c0161280b565b94506128b160c08c0161280b565b93506128bf60e08c0161281d565b92506128ce6101008c0161280b565b91506128dd6101208c0161281d565b90509295989b9194979a5092959850565b60006020828403121561290057600080fd5b81356115a6816127f6565b60008060006060848603121561292057600080fd5b833561292b816127f6565b9250602084013561293b816127f6565b91506129496040850161280b565b90509250925092565b6000806040838503121561296557600080fd5b823591506020830135612977816127f6565b809150509250929050565b8035801515811461203157600080fd5b60008060008060008060008060006101208a8c0312156129b157600080fd5b6129ba8a61280b565b98506129c860208b0161280b565b97506129d660408b0161280b565b96506129e460608b0161280b565b95506129f260808b0161280b565b9450612a0060a08b0161281d565b9350612a0e60c08b0161280b565b9250612a1c60e08b0161281d565b9150612a2b6101008b01612982565b90509295985092959850929598565b60008060008060008060a08789031215612a5357600080fd5b8635612a5e816127f6565b95506020870135612a6e816127f6565b9450612a7c6040880161280b565b935060608701359250608087013567ffffffffffffffff80821115612aa057600080fd5b818901915089601f830112612ab457600080fd5b813581811115612ac357600080fd5b8a6020828501011115612ad557600080fd5b6020830194508093505050509295509295509295565b60008060408385031215612afe57600080fd5b612b078361280b565b9150612b1560208401612982565b90509250929050565b60008060008060808587031215612b3457600080fd5b8435612b3f816127f6565b93506020850135612b4f816127f6565b9250612b5d6040860161281d565b9150612b6b6060860161280b565b905092959194509250565b60008060408385031215612b8957600080fd5b8235612b94816127f6565b91506020830135612977816127f6565b6020808252825182820181905260009190848201906040850190845b818110156127d157612c0583855161ffff81511682526001600160a01b0360208201511660208301526040810151151560408301526060810151151560608301525050565b9284019260809290920191600101612bc0565b60008060008060808587031215612c2e57600080fd5b8435612c39816127f6565b93506020850135612c49816127f6565b9250612c576040860161280b565b9150612b6b60608601612982565b600080600060608486031215612c7a57600080fd5b8335612c85816127f6565b92506020840135612c95816127f6565b929592945050506040919091013590565b815161ffff1681526020808301516001600160a01b03169082015260408083015115159082015260608083015115159082015260808101610626565b600060208284031215612cf457600080fd5b6115a68261280b565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612d5157612d51612d29565b5060010190565b8181038181111561062657610626612d29565b600060208284031215612d7d57600080fd5b81516115a6816127f6565b600060208284031215612d9a57600080fd5b5051919050565b82815260006020604081840152835180604085015260005b81811015612dd557858101830151858201606001528201612db9565b506000606082860101526060601f19601f830116850101925050509392505050565b600082612e1457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ee8dcadda0cd507ffffd4339815ce1787d7e238e4a0303caa9bb6ec910a6d51b64736f6c63430008140033000000000000000000000000e3f132867fc5cbb95d21c53c00647e8e7cd6cf97000000000000000000000000ded212b8bab662b98f49e757cbb409bb7808dc100000000000000000000000000000000000000000000000000000048c27395000