0 txs
1 call
constructor
constructor(address _feeSigner, address _feeCollector, uint32 _twapInterval)
functions
BASIS_POINTS
viewfunction BASIS_POINTS() view returns (uint256)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
FEE_FIXED_TOKEN
viewfunction FEE_FIXED_TOKEN() view returns (string)
FEE_PERCENTAGE
viewfunction FEE_PERCENTAGE() view returns (string)
feeCollector
viewfunction feeCollector() view returns (address)
feeConfigs
viewfunction feeConfigs(string) view returns (uint256 lockedTokenPercentage, address feeTokenAddress, uint256 feeTokenAmount)
feeSigner
viewfunction feeSigner() view returns (address)
getCurrentPrice
viewfunction getCurrentPrice(address poolAddress, bool isToken0) view returns (uint256)
getLockInfo
viewfunction getLockInfo(uint256 lockId) view returns (address token, uint256 totalAmount, address owner, address operator, uint256 withdrawnAmount, uint256 initialPrice, uint256 lockTimestamp, uint256 unlockTime, tuple[] unlockStages)
getUnlockedAmount
viewfunction getUnlockedAmount(uint256 lockId) view returns (uint256)
locks
viewfunction locks(uint256) view returns (address token, address poolAddress, address owner, address operator, uint256 totalAmount, uint256 withdrawnAmount, uint256 initialPrice, bool isToken0, uint256 unlockTime, uint256 lockTimestamp)
MAX_STAGES
viewfunction MAX_STAGES() view returns (uint256)
nextLockId
viewfunction nextLockId() view returns (uint256)
owner
viewfunction owner() view returns (address)
revokedSignatures
viewfunction revokedSignatures(bytes32) view returns (bool)
twapInterval
viewfunction twapInterval() view returns (uint32)
lock
payablefunction lock(address token, address poolAddress, address operator, uint256 amount, uint256 unlockTime, tuple[] stages, string feeType) payable returns (uint256 lockId)
lockWithCustomFee
payablefunction lockWithCustomFee(address token, address poolAddress, address operator, uint256 amount, uint256 unlockTime, tuple[] stages, tuple customFee, bytes signature) payable returns (uint256 lockId)
renounceOwnership
nonpayablefunction renounceOwnership()
revokeCustomFee
nonpayablefunction revokeCustomFee(tuple customFee)
setFeeCollector
nonpayablefunction setFeeCollector(address _feeCollector)
setFeeConfig
nonpayablefunction setFeeConfig(string feeName, uint256 lockedTokenPercentage, address feeTokenAddress, uint256 feeTokenAmount)
setFeeSigner
nonpayablefunction setFeeSigner(address _feeSigner)
setTWAPInterval
nonpayablefunction setTWAPInterval(uint32 _interval)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw(uint256 lockId)
events
CustomFeeRevoked
event CustomFeeRevoked(address indexed user, uint256 lockedTokenPercentage, address feeTokenAddress, uint256 feeTokenAmount)
EIP712DomainChanged
event EIP712DomainChanged()
FeeCollected
event FeeCollected(address indexed user, address indexed token, uint256 percentageFee, address feeTokenAddress, uint256 feeTokenAmount)
FeeCollectorUpdated
event FeeCollectorUpdated(address indexed newFeeCollector)
FeeConfigUpdated
event FeeConfigUpdated(string indexed feeName, uint256 lockedTokenPercentage, address feeTokenAddress, uint256 feeTokenAmount)
FeeSignerUpdated
event FeeSignerUpdated(address indexed newFeeSigner)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
StageUnlocked
event StageUnlocked(address indexed user, uint256 indexed lockId, uint256 stageIndex, uint256 priceMultiplier, uint256 unlockPercentage)
TokensLocked
event TokensLocked(address indexed user, address indexed operator, uint256 indexed lockId, address token, uint256 amount, uint256 initialPrice, uint256 stageCount)
TokensWithdrawn
event TokensWithdrawn(address indexed user, uint256 indexed lockId, uint256 amount, uint256 currentPrice)
TWAPIntervalUpdated
event TWAPIntervalUpdated(uint32 newInterval)
errors
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
InsufficientFeePayment
error InsufficientFeePayment()
InvalidAddress
error InvalidAddress()
InvalidAmount
error InvalidAmount()
InvalidPercentageSum
error InvalidPercentageSum()
InvalidPriceMultiplier
error InvalidPriceMultiplier()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
InvalidStageCount
error InvalidStageCount()
InvalidUnlockTime
error InvalidUnlockTime()
NoTokensToWithdraw
error NoTokensToWithdraw()
NotOwnerOrOperator
error NotOwnerOrOperator()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SignatureRevoked
error SignatureRevoked()
StringTooLong
error StringTooLong(string str)
creation bytecode
0x61016060405260016006553480156200001757600080fd5b5060405162003913380380620039138339810160408190526200003a916200042d565b604080518082018252601381527f50726963654261736564546f6b656e4c6f636b00000000000000000000000000602080830191909152825180840190935260018352603160f81b90830152903380620000af57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000ba8162000344565b5060018055620000cc82600262000394565b61012052620000dd81600362000394565b61014052815160208084019190912060e052815190820120610100524660a0526200016b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b0383166200019c5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038216620001c45760405163e6c4247b60e01b815260040160405180910390fd5b60048054600580546001600160a01b0319166001600160a01b03868116919091179091556001600160c01b03199091166401000000009186169190910263ffffffff19161763ffffffff831617905560408051606081018252600a8082526000602080840182905283850191909152835180850185529182526970657263656e7461676560b01b9082015291519091600891620002629190620004a9565b908152604080516020928190038301812084518155848401516001820180546001600160a01b0319166001600160a01b03909216919091179055938201516002909401939093556060830181526000808452828401526701aa535d3d0c00008382015280518082018252600b81526a3334bc32b22fba37b5b2b760a91b9281019290925251600891620002f591620004a9565b908152604080516020928190038301902083518155918301516001830180546001600160a01b0319166001600160a01b0390921691909117905591909101516002909101555062000692915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602083511015620003b457620003ac83620003cd565b9050620003c7565b81620003c184826200056c565b5060ff90505b92915050565b600080829050601f81511115620003fb578260405163305a27a960e01b8152600401620000a6919062000638565b805162000408826200066d565b179392505050565b80516001600160a01b03811681146200042857600080fd5b919050565b6000806000606084860312156200044357600080fd5b6200044e8462000410565b92506200045e6020850162000410565b9150604084015163ffffffff811681146200047857600080fd5b809150509250925092565b60005b83811015620004a057818101518382015260200162000486565b50506000910152565b60008251620004bd81846020870162000483565b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004f257607f821691505b6020821081036200051357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056757600081815260208120601f850160051c81016020861015620005425750805b601f850160051c820191505b8181101562000563578281556001016200054e565b5050505b505050565b81516001600160401b03811115620005885762000588620004c7565b620005a081620005998454620004dd565b8462000519565b602080601f831160018114620005d85760008415620005bf5750858301515b600019600386901b1c1916600185901b17855562000563565b600085815260208120601f198616915b828110156200060957888601518255948401946001909101908401620005e8565b5085821015620006285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200065981604085016020870162000483565b601f01601f19169190910160400192915050565b80516020808301519190811015620005135760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051613226620006ed60003960006120f8015260006120c6015260006124950152600061246d015260006123c8015260006123f20152600061241c01526132266000f3fe6080604052600436106101805760003560e01c806384b0196e116100d1578063d88c15171161008a578063e1f1c4a711610064578063e1f1c4a71461052b578063e5a6715714610541578063f2fde38b14610554578063f4dadc611461057457600080fd5b8063d88c1517146104d6578063deafa926146104f6578063df5e76951461051657600080fd5b806384b0196e146103fb5780638da5cb5b146104235780639f4e3c4714610441578063a42dce8014610461578063c415b95c14610481578063c9102afd146104a157600080fd5b80632e1a7d4d1161013e57806361c70a151161011857806361c70a151461039d5780636518a0b3146103b0578063715018a6146103c65780637e1aa178146103db57600080fd5b80632e1a7d4d146103145780633c1d5df0146103345780634b21b9dc1461036657600080fd5b80620b46f81461018557806307569339146101d1578063095bf90f146102115780630c928949146102845780630e1edfdf146102b25780631ec4036e146102f2575b600080fd5b34801561019157600080fd5b506101bb6040518060400160405280600a81526020016970657263656e7461676560b01b81525081565b6040516101c891906127e7565b60405180910390f35b3480156101dd57600080fd5b506004546101f99064010000000090046001600160a01b031681565b6040516001600160a01b0390911681526020016101c8565b34801561021d57600080fd5b5061026161022c3660046128da565b805160208183018101805160088252928201919093012091528054600182015460029092015490916001600160a01b03169083565b604080519384526001600160a01b039092166020840152908201526060016101c8565b34801561029057600080fd5b506102a461029f366004612939565b610655565b6040519081526020016101c8565b3480156102be57600080fd5b506102e26102cd36600461296e565b60096020526000908152604090205460ff1681565b60405190151581526020016101c8565b3480156102fe57600080fd5b5061031261030d3660046129fd565b6108aa565b005b34801561032057600080fd5b5061031261032f36600461296e565b61094c565b34801561034057600080fd5b506004546103519063ffffffff1681565b60405163ffffffff90911681526020016101c8565b34801561037257600080fd5b506101bb6040518060400160405280600b81526020016a3334bc32b22fba37b5b2b760a91b81525081565b6102a46103ab366004612add565b6109da565b3480156103bc57600080fd5b506102a460065481565b3480156103d257600080fd5b50610312610a61565b3480156103e757600080fd5b506103126103f6366004612b8c565b610a75565b34801561040757600080fd5b50610410610afc565b6040516101c89796959493929190612ba9565b34801561042f57600080fd5b506000546001600160a01b03166101f9565b34801561044d57600080fd5b506102a461045c36600461296e565b610b42565b34801561046d57600080fd5b5061031261047c366004612b8c565b610cb3565b34801561048d57600080fd5b506005546101f9906001600160a01b031681565b3480156104ad57600080fd5b506104c16104bc36600461296e565b610d2c565b6040516101c899989796959493929190612c3f565b3480156104e257600080fd5b506103126104f1366004612ceb565b610e4e565b34801561050257600080fd5b50610312610511366004612d11565b610ef2565b34801561052257600080fd5b506102a4600581565b34801561053757600080fd5b506102a461271081565b6102a461054f366004612d72565b610fd2565b34801561056057600080fd5b5061031261056f366004612b8c565b6110fe565b34801561058057600080fd5b506105f561058f36600461296e565b60076020819052600091825260409091208054600182015460028301546003840154600485015460058601546006870154978701546009880154600a909801546001600160a01b03978816999688169895881697909416959294919360ff90911691908a565b604080516001600160a01b039b8c168152998b1660208b0152978a1697890197909752979094166060870152608086019290925260a085015260c0840152151560e0830152610100820192909252610120810191909152610140016101c8565b604080516002808252606082018352600092839291906020830190803683375050600454825192935063ffffffff169183915060009061069757610697612e34565b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106106c6576106c6612e34565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd9061070a908590600401612e4a565b600060405180830381865afa158015610727573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261074f9190810190612f03565b50905060008160008151811061076757610767612e34565b60200260200101518260018151811061078257610782612e34565b60200260200101516107949190612fe5565b6004549091506000906107ad9063ffffffff1683613028565b905060008260060b1280156107d957506004546107d39063ffffffff1660030b83613066565b60060b15155b156107ec57806107e881613088565b9150505b60006107f782611139565b9050600060c06108106001600160a01b038416806130ab565b61082290670de0b6b3a76400006130ab565b901c9050871561089757600081116108715760405162461bcd60e51b815260206004820152600d60248201526c5072696365206973207a65726f60981b60448201526064015b60405180910390fd5b61088a816ec097ce7bc90715b34b9f10000000006130c2565b96505050505050506108a4565b95506108a4945050505050565b92915050565b6108b2611559565b60006108bd82611586565b600081815260096020908152604091829020805460ff1916600117905584519085015185830151606087015193519495506001600160a01b03909216937f64116023a6e4de0fdb9c83f1396d968b341777d268a235bb9c2f6a64558e02639361094093919283526001600160a01b03919091166020830152604082015260600190565b60405180910390a25050565b610954611617565b600081815260076020526040902060038101546001600160a01b0316331480159061098c575060028101546001600160a01b03163314155b156109aa57604051634c7bb68760e11b815260040160405180910390fd5b80600901544211156109c4576109bf82611641565b6109cd565b6109cd826117d8565b506109d760018055565b50565b60006109e4611617565b60006008836040516109f691906130d6565b9081526040805191829003602090810183206060840183528054845260018101546001600160a01b03169184019190915260020154908201529050610a3c8987836119ea565b610a4a898989898989611c81565b915050610a5660018055565b979650505050505050565b610a69611559565b610a73600061206f565b565b610a7d611559565b6001600160a01b038116610aa45760405163e6c4247b60e01b815260040160405180910390fd5b60048054640100000000600160c01b0319166401000000006001600160a01b038416908102919091179091556040517ff41c068032717dbbbe0fe81ce3d3c36c4b1177b4462abe277dcfdb93ff4f90ef90600090a250565b600060608060008060006060610b106120bf565b610b186120f1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600081815260076020526040812060048101548203610b645750600092915050565b8060090154421115610b8b5780600501548160040154610b8491906130f2565b9392505050565b60018101546007820154600091610bb0916001600160a01b039091169060ff16610655565b90506000805b6008840154811015610c9a576000846008018281548110610bd957610bd9612e34565b60009182526020909120600390910201600281015490915060ff1615610c2b5761271081600101548660040154610c1091906130ab565b610c1a91906130c2565b610c249084613105565b9250610c87565b600061271082600001548760060154610c4491906130ab565b610c4e91906130c2565b9050808510610c855761271082600101548760040154610c6e91906130ab565b610c7891906130c2565b610c829085613105565b93505b505b5080610c9281613118565b915050610bb6565b506005830154610caa90826130f2565b95945050505050565b610cbb611559565b6001600160a01b038116610ce25760405163e6c4247b60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040517fe5693914d19c789bdee50a362998c0bc8d035a835f9871da5d51152f0582c34f90600090a250565b60008060008060008060008060606000600760008c815260200190815260200160002090508060000160009054906101000a90046001600160a01b031681600401548260020160009054906101000a90046001600160a01b03168360030160009054906101000a90046001600160a01b03168460050154856006015486600a015487600901548860080180805480602002602001604051908101604052809291908181526020016000905b82821015610e285760008481526020908190206040805160608101825260038602909201805483526001808201548486015260029091015460ff161515918301919091529083529092019101610dd7565b505050509050995099509950995099509950995099509950509193959799909294969850565b610e56611559565b603c8163ffffffff1611610ea45760405162461bcd60e51b81526020600482015260156024820152740496e74657276616c206d757374206265203e20363605c1b6044820152606401610868565b6004805463ffffffff191663ffffffff83169081179091556040519081527f74c9856afebb40c05def34cf2d9ddb7dd6c96792d37a0c8b05f7091caf444d8f9060200160405180910390a150565b610efa611559565b6040518060600160405280848152602001836001600160a01b0316815260200182815250600885604051610f2e91906130d6565b908152604080516020928190038301812084518155928401516001840180546001600160a01b0319166001600160a01b03909216919091179055920151600290910155610f7c9085906130d6565b604080519182900382208583526001600160a01b0385166020840152908201839052907f29d14584b647a54a45ff605103fd7507470b5f70de9c39b3af247305da6bc3619060600160405180910390a250505050565b6000610fdc611617565b82516001600160a01b0316331461100657604051638baa579f60e01b815260040160405180910390fd5b600061101184611586565b60008181526009602052604090205490915060ff1615611044576040516308f807e560e11b815260040160405180910390fd5b600061104f8261211e565b9050600061105d828661214b565b6004549091506001600160a01b03808316640100000000909204161461109657604051638baa579f60e01b815260040160405180910390fd5b600060405180606001604052808860200151815260200188604001516001600160a01b03168152602001886060015181525090506110d58d8b836119ea565b6110e38d8d8d8d8d8d611c81565b9450505050506110f260018055565b98975050505050505050565b611106611559565b6001600160a01b03811661113057604051631e4fbdf760e01b815260006004820152602401610868565b6109d78161206f565b60008060008360020b12611150578260020b61115d565b8260020b61115d90613131565b905061116c620d89e71961314d565b60020b8111156111a25760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610868565b6000816001166000036111b957600160801b6111cb565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561120a576080611205826ffff97272373d413259a46990580e213a6130ab565b901c90505b600482161561123457608061122f826ffff2e50f5f656932ef12357cf3c7fdcc6130ab565b901c90505b600882161561125e576080611259826fffe5caca7e10e4e61c3624eaa0941cd06130ab565b901c90505b6010821615611288576080611283826fffcb9843d60f6159c9db58835c9266446130ab565b901c90505b60208216156112b25760806112ad826fff973b41fa98c081472e6896dfb254c06130ab565b901c90505b60408216156112dc5760806112d7826fff2ea16466c96a3843ec78b326b528616130ab565b901c90505b6080821615611306576080611301826ffe5dee046a99a2a811c461f1969c30536130ab565b901c90505b61010082161561133157608061132c826ffcbe86c7900a88aedcffc83b479aa3a46130ab565b901c90505b61020082161561135c576080611357826ff987a7253ac413176f2b074cf7815e546130ab565b901c90505b610400821615611387576080611382826ff3392b0822b70005940c7a398e4b70f36130ab565b901c90505b6108008216156113b25760806113ad826fe7159475a2c29b7443b29c7fa6e889d96130ab565b901c90505b6110008216156113dd5760806113d8826fd097f3bdfd2022b8845ad8f792aa58256130ab565b901c90505b612000821615611408576080611403826fa9f746462d870fdf8a65dc1f90e061e56130ab565b901c90505b61400082161561143357608061142e826f70d869a156d2a1b890bb3df62baf32f76130ab565b901c90505b61800082161561145e576080611459826f31be135f97d08fd981231505542fcfa66130ab565b901c90505b6201000082161561148a576080611485826f09aa508b5b7a84e1c677de54f3e99bc96130ab565b901c90505b620200008216156114b55760806114b0826e5d6af8dedb81196699c329225ee6046130ab565b901c90505b620400008216156114df5760806114da826d2216e584f5fa1ea926041bedfe986130ab565b901c90505b62080000821615611507576080611502826b048a170391f7dc42444e8fa26130ab565b901c90505b60008460020b13156115225761151f816000196130c2565b90505b6115316401000000008261316f565b1561153d576001611540565b60005b6115519060ff16602083901c613105565b949350505050565b6000546001600160a01b03163314610a735760405163118cdaa760e01b8152336004820152602401610868565b60007fc634b811962d68c8585e67f6f81126d6e16bfd358af4d38b4aefa726291718a482600001518360200151846040015185606001516040516020016115fa9594939291909485526001600160a01b03938416602086015260408501929092529091166060830152608082015260a00190565b604051602081830303815290604052805190602001209050919050565b60026001540361163a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b600081815260076020526040812090805b600883015481101561173057600083600801828154811061167557611675612e34565b60009182526020909120600390910201600281015490915060ff1661171d5760028101805460ff191660019081179091558101546004850154612710916116bb916130ab565b6116c591906130c2565b6116cf9084613105565b81546001830154604080518681526020810193909352820152909350859033907f99985d783674a00eb46606621b1e34c5eb634f76d7b593881fca99ac756256ab9060600160405180910390a35b508061172881613118565b915050611652565b508060000361175257604051637dd28aa760e11b815260040160405180910390fd5b808260050160008282546117669190613105565b909155505060028201548254611789916001600160a01b03918216911683612175565b6002820154604080518381526000602082015285926001600160a01b0316917fb3ad69dc1d2c6b1f5f5b0927ffd8ee8f1437a156253c8f6dccc75e6f8e4fd38b910160405180910390a3505050565b6000818152600760208190526040822060018101549181015490929161180c916001600160a01b039091169060ff16610655565b90506000805b600884015481101561192c57600084600801828154811061183557611835612e34565b60009182526020909120600390910201600281015490915060ff166118de5760006127108260000154876006015461186d91906130ab565b61187791906130c2565b90508085106118dc5760028201805460ff19166001908117909155825490830154604080518681526020810193909352820152879033907f99985d783674a00eb46606621b1e34c5eb634f76d7b593881fca99ac756256ab9060600160405180910390a35b505b600281015460ff1615611919576127108160010154866004015461190291906130ab565b61190c91906130c2565b6119169084613105565b92505b508061192481613118565b915050611812565b50600083600501548261193f91906130f2565b90508060000361196257604051637dd28aa760e11b815260040160405180910390fd5b808460050160008282546119769190613105565b909155505060028401548454611999916001600160a01b03918216911683612175565b6002840154604080518381526020810186905287926001600160a01b0316917fb3ad69dc1d2c6b1f5f5b0927ffd8ee8f1437a156253c8f6dccc75e6f8e4fd38b910160405180910390a35050505050565b805160009015611a2d57815161271090611a0490856130ab565b611a0e91906130c2565b600554909150611a2d906001600160a01b0386811691339116846121d9565b604082015115611c225760208201516001600160a01b0316611bb9578160400151341015611a6e5760405163481fdfa360e11b815260040160405180910390fd5b60055460408381015190516000926001600160a01b031691908381818185875af1925050503d8060008114611abf576040519150601f19603f3d011682016040523d82523d6000602084013e611ac4565b606091505b5050905080611b0b5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610868565b8260400151341115611bb35760408301516000903390611b2b90346130f2565b604051600081818185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5050905080611bb15760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b6044820152606401610868565b505b50611c22565b3415611bfa5760405162461bcd60e51b815260206004820152601060248201526f115512081b9bdd081858d8d95c1d195960821b6044820152606401610868565b60055460408301516020840151611c22926001600160a01b03918216923392909116906121d9565b60208083015160408085015181518581526001600160a01b03938416948101949094529083015285169033907f4bc8151c051441255339d01fbaeb38cf109cbfd75e9a5c62fb8f1dfb37fe6fd69060600160405180910390a350505050565b60006001600160a01b038716611caa5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038616611cd15760405163e6c4247b60e01b815260040160405180910390fd5b83600003611cf25760405163162908e360e11b815260040160405180910390fd5b428311611d12576040516352aba6d360e11b815260040160405180910390fd5b611d1b82612218565b6000866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7f9190613183565b90506000876001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de59190613183565b90506000826001600160a01b03168a6001600160a01b031603611e0a57506001611e44565b816001600160a01b03168a6001600160a01b031603611e2b57506000611e44565b60405163e6c4247b60e01b815260040160405180910390fd5b6000611e508a83610655565b600680549192506000611e6283613118565b91905055945060006007600087815260200190815260200160002090508b8160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a8160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550338160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550898160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088816004018190555060008160050181905550818160060181905550828160070160006101000a81548160ff0219169083151502179055508781600901819055504281600a018190555060005b8751811015611fef5781600801888281518110611f8f57611f8f612e34565b602090810291909101810151825460018082018555600094855293839020825160039092020190815591810151928201929092556040909101516002909101805460ff191691151591909117905580611fe781613118565b915050611f70565b506120056001600160a01b038d1633308c6121d9565b8651604080516001600160a01b038f81168252602082018d90528183018690526060820193909352905188928d169133917f80498959ee6af5ce3c016bbb3fa8188d5421df67fc3a29d8f66d5263ca4c95649181900360800190a450505050509695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60606120ec7f00000000000000000000000000000000000000000000000000000000000000006002612310565b905090565b60606120ec7f00000000000000000000000000000000000000000000000000000000000000006003612310565b60006108a461212b6123bb565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061215b86866124e6565b92509250925061216b8282612533565b5090949350505050565b6040516001600160a01b038381166024830152604482018390526121d491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506125f0565b505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526122129186918216906323b872dd906084016121a2565b50505050565b80518015806122275750600581115b1561224557604051636156c5bb60e11b815260040160405180910390fd5b60008060005b838110156122ed578185828151811061226657612266612e34565b602002602001015160000151116122905760405163b7054b6d60e01b815260040160405180910390fd5b8481815181106122a2576122a2612e34565b60200260200101516000015191508481815181106122c2576122c2612e34565b602002602001015160200151836122d99190613105565b9250806122e581613118565b91505061224b565b5061271082146122125760405163376ed8d960e21b815260040160405180910390fd5b606060ff831461232a5761232383612661565b90506108a4565b818054612336906131a0565b80601f0160208091040260200160405190810160405280929190818152602001828054612362906131a0565b80156123af5780601f10612384576101008083540402835291602001916123af565b820191906000526020600020905b81548152906001019060200180831161239257829003601f168201915b505050505090506108a4565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561241457507f000000000000000000000000000000000000000000000000000000000000000046145b1561243e57507f000000000000000000000000000000000000000000000000000000000000000090565b6120ec604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080600083516041036125205760208401516040850151606086015160001a612512888285856126a0565b95509550955050505061252c565b50508151600091506002905b9250925092565b6000826003811115612547576125476131da565b03612550575050565b6001826003811115612564576125646131da565b036125825760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612596576125966131da565b036125b75760405163fce698f760e01b815260048101829052602401610868565b60038260038111156125cb576125cb6131da565b036125ec576040516335e2f38360e21b815260048101829052602401610868565b5050565b600080602060008451602086016000885af180612613576040513d6000823e3d81fd5b50506000513d9150811561262b578060011415612638565b6001600160a01b0384163b155b1561221257604051635274afe760e01b81526001600160a01b0385166004820152602401610868565b6060600061266e8361276f565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156126db5750600091506003905082612765565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561272f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661275b57506000925060019150829050612765565b9250600091508190505b9450945094915050565b600060ff8216601f8111156108a457604051632cd44ac360e21b815260040160405180910390fd5b60005b838110156127b257818101518382015260200161279a565b50506000910152565b600081518084526127d3816020860160208601612797565b601f01601f19169290920160200192915050565b602081526000610b8460208301846127bb565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715612833576128336127fa565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612862576128626127fa565b604052919050565b600082601f83011261287b57600080fd5b813567ffffffffffffffff811115612895576128956127fa565b6128a8601f8201601f1916602001612839565b8181528460208386010111156128bd57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156128ec57600080fd5b813567ffffffffffffffff81111561290357600080fd5b6115518482850161286a565b6001600160a01b03811681146109d757600080fd5b8035801515811461293457600080fd5b919050565b6000806040838503121561294c57600080fd5b82356129578161290f565b915061296560208401612924565b90509250929050565b60006020828403121561298057600080fd5b5035919050565b60006080828403121561299957600080fd5b6040516080810181811067ffffffffffffffff821117156129bc576129bc6127fa565b60405290508082356129cd8161290f565b81526020838101359082015260408301356129e78161290f565b6040820152606092830135920191909152919050565b600060808284031215612a0f57600080fd5b610b848383612987565b600067ffffffffffffffff821115612a3357612a336127fa565b5060051b60200190565b600082601f830112612a4e57600080fd5b81356020612a63612a5e83612a19565b612839565b82815260609283028501820192828201919087851115612a8257600080fd5b8387015b85811015612ad05781818a031215612a9e5760008081fd5b612aa6612810565b8135815285820135868201526040612abf818401612924565b908201528452928401928101612a86565b5090979650505050505050565b600080600080600080600060e0888a031215612af857600080fd5b8735612b038161290f565b96506020880135612b138161290f565b95506040880135612b238161290f565b9450606088013593506080880135925060a088013567ffffffffffffffff80821115612b4e57600080fd5b612b5a8b838c01612a3d565b935060c08a0135915080821115612b7057600080fd5b50612b7d8a828b0161286a565b91505092959891949750929550565b600060208284031215612b9e57600080fd5b8135610b848161290f565b60ff60f81b881681526000602060e081840152612bc960e084018a6127bb565b8381036040850152612bdb818a6127bb565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612c2d57835183529284019291840191600101612c11565b50909c9b505050505050505050505050565b600061012080830160018060a01b03808e16855260208d818701526040828e16818801526060838e16818901528c60808901528b60a08901528a60c08901528960e0890152856101008901528495508851935083855261014088019550828901945060005b84811015612cd35785518051885284810151858901528301511515838801529581019594830194600101612ca4565b505050505050809150509a9950505050505050505050565b600060208284031215612cfd57600080fd5b813563ffffffff81168114610b8457600080fd5b60008060008060808587031215612d2757600080fd5b843567ffffffffffffffff811115612d3e57600080fd5b612d4a8782880161286a565b945050602085013592506040850135612d628161290f565b9396929550929360600135925050565b600080600080600080600080610160898b031215612d8f57600080fd5b8835612d9a8161290f565b97506020890135612daa8161290f565b96506040890135612dba8161290f565b9550606089013594506080890135935060a089013567ffffffffffffffff80821115612de557600080fd5b612df18c838d01612a3d565b9450612e008c60c08d01612987565b93506101408b0135915080821115612e1757600080fd5b50612e248b828c0161286a565b9150509295985092959890939650565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015612e8857835163ffffffff1683529284019291840191600101612e66565b50909695505050505050565b600082601f830112612ea557600080fd5b81516020612eb5612a5e83612a19565b82815260059290921b84018101918181019086841115612ed457600080fd5b8286015b84811015612ef8578051612eeb8161290f565b8352918301918301612ed8565b509695505050505050565b60008060408385031215612f1657600080fd5b825167ffffffffffffffff80821115612f2e57600080fd5b818501915085601f830112612f4257600080fd5b81516020612f52612a5e83612a19565b82815260059290921b84018101918181019089841115612f7157600080fd5b948201945b83861015612f9f5785518060060b8114612f905760008081fd5b82529482019490820190612f76565b91880151919650909350505080821115612fb857600080fd5b50612fc585828601612e94565b9150509250929050565b634e487b7160e01b600052601160045260246000fd5b600682810b9082900b03667fffffffffffff198112667fffffffffffff821317156108a4576108a4612fcf565b634e487b7160e01b600052601260045260246000fd5b60008160060b8360060b8061303f5761303f613012565b667fffffffffffff1982146000198214161561305d5761305d612fcf565b90059392505050565b60008260060b8061307957613079613012565b808360060b0791505092915050565b60008160020b627fffff1981036130a1576130a1612fcf565b6000190192915050565b80820281158282048414176108a4576108a4612fcf565b6000826130d1576130d1613012565b500490565b600082516130e8818460208701612797565b9190910192915050565b818103818111156108a4576108a4612fcf565b808201808211156108a4576108a4612fcf565b60006001820161312a5761312a612fcf565b5060010190565b6000600160ff1b820161314657613146612fcf565b5060000390565b60008160020b627fffff19810361316657613166612fcf565b60000392915050565b60008261317e5761317e613012565b500690565b60006020828403121561319557600080fd5b8151610b848161290f565b600181811c908216806131b457607f821691505b6020821081036131d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220decf910155179ad777f5d8c43ae6e099b4a628fe5c82f3ebeeb58cdc029b27ad64736f6c63430008140033000000000000000000000000333a16307d8bef80616f719e958af5c76290ca85000000000000000000000000521faacdfa097ad35a32387727e468f7fd032fd6000000000000000000000000000000000000000000000000000000000000012c