0 txs
373 calls
constructor
constructor()
functions
baseWeights
viewfunction baseWeights(uint256, address, uint8, address) view returns (uint256)
epochNext
purefunction epochNext(uint256 _timestamp) pure returns (uint256)
epochStart
purefunction epochStart(uint256 _timestamp) pure returns (uint256)
epochVoteEnd
purefunction epochVoteEnd(uint256 _timestamp) pure returns (uint256)
epochVoteStart
purefunction epochVoteStart(uint256 _timestamp) pure returns (uint256)
getAllLpRewardTokens
viewfunction getAllLpRewardTokens() view returns (address[])
getVoteDetails
viewfunction getVoteDetails(uint256 _tokenId, address _lpAsset) view returns (tuple)
governor
viewfunction governor() view returns (address)
isAlive
viewfunction isAlive(address) view returns (bool)
isWhitelistedNFT
viewfunction isWhitelistedNFT(uint256) view returns (bool)
isWhitelistedToken
viewfunction isWhitelistedToken(address) view returns (bool)
lastVoted
viewfunction lastVoted(uint256) view returns (uint256)
lpTokens
viewfunction lpTokens(uint256) view returns (address)
markets
viewfunction markets(uint256) view returns (address marketAddress, uint8 side)
marketsLength
viewfunction marketsLength() view returns (uint256)
marketToRewardAccumulators
viewfunction marketToRewardAccumulators(address, uint8) view returns (address)
marketVote
viewfunction marketVote(uint256, address, uint256) view returns (address)
marketVoteSide
viewfunction marketVoteSide(uint256, address, uint256) view returns (uint8)
maxVotingNum
viewfunction maxVotingNum() view returns (uint256)
mpo
viewfunction mpo() view returns (address)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
rewardAccumulatorToBribe
viewfunction rewardAccumulatorToBribe(address) view returns (address)
totalWeight
viewfunction totalWeight(address) view returns (uint256)
usedWeights
viewfunction usedWeights(uint256, address) view returns (uint256)
ve
viewfunction ve() view returns (address)
votes
viewfunction votes(uint256, address, uint8, address) view returns (uint256)
weights
viewfunction weights(address, uint8, address) view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addMarkets
nonpayablefunction addMarkets(tuple[] _markets)
claimBribes
nonpayablefunction claimBribes(address[] _bribes, address[][] _tokens, uint256 _tokenId)
distributeRewards
nonpayablefunction distributeRewards()
initialize
nonpayablefunction initialize(address[] _tokens, address _mpo, address _rewardToken, address _ve)
poke
nonpayablefunction poke(uint256 _tokenId)
renounceOwnership
nonpayablefunction renounceOwnership()
reset
nonpayablefunction reset(uint256 _tokenId)
setBribes
nonpayablefunction setBribes(address[] _rewardAccumulators, address[] _bribes)
setGovernor
nonpayablefunction setGovernor(address _governor)
setLpTokens
nonpayablefunction setLpTokens(address[] _lpTokens)
setMarketRewardAccumulators
nonpayablefunction setMarketRewardAccumulators(address[] _markets, uint8[] _marketSides, address[] _rewardAccumulators)
setMaxVotingNum
nonpayablefunction setMaxVotingNum(uint256 _maxVotingNum)
setMpo
nonpayablefunction setMpo(address _mpo)
toggleDistributionTimelockAlive
nonpayablefunction toggleDistributionTimelockAlive(bool _isAlive)
toggleRewardAccumulatorAlive
nonpayablefunction toggleRewardAccumulatorAlive(address _market, uint8 _marketSide, bool _isAlive)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
vote
nonpayablefunction vote(uint256 _tokenId, address[] _marketVote, uint8[] _marketVoteSide, uint256[] _weights)
whitelistNFT
nonpayablefunction whitelistNFT(uint256 _tokenId, bool _bool)
whitelistToken
nonpayablefunction whitelistToken(address _token, bool _bool)
events
Abstained
event Abstained(address indexed voter, address indexed pool, uint256 indexed tokenId, uint256 weight, uint256 totalWeight, uint256 timestamp)
BribesSet
event BribesSet(address[] indexed rewardAccumulators, address[] indexed bribes)
DistributionTimelockAliveToggled
event DistributionTimelockAliveToggled(bool isAlive)
GovernorSet
event GovernorSet(address indexed governor)
Initialized
event Initialized(address[] tokens, address mpo, address rewardToken, address ve, address governor)
Initialized
event Initialized(uint8 version)
LpTokensSet
event LpTokensSet(address[] indexed lpTokens)
MarketRewardAccumulatorsSet
event MarketRewardAccumulatorsSet(address[] indexed markets, uint8[] indexed marketSides, address[] indexed rewardAccumulators)
MarketsAdded
event MarketsAdded((address marketAddress, uint8 side)[] markets)
MaxVotingNumSet
event MaxVotingNumSet(uint256 indexed maxVotingNum)
MpoSet
event MpoSet(address indexed mpo)
NotifyReward
event NotifyReward(address indexed sender, address indexed reward, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
RewardAccumulatorAliveToggled
event RewardAccumulatorAliveToggled(address indexed market, uint8 indexed marketSide, bool isAlive)
Voted
event Voted(address indexed voter, address indexed pool, uint256 indexed tokenId, uint256 weight, uint256 totalWeight, uint256 timestamp)
WhitelistNFT
event WhitelistNFT(address indexed whitelister, uint256 indexed tokenId, bool indexed _bool)
WhitelistToken
event WhitelistToken(address indexed whitelister, address indexed token, bool indexed _bool)
errors
AlreadyVotedOrDeposited
error AlreadyVotedOrDeposited()
DistributeWindow
error DistributeWindow()
MarketAlreadyExists
error MarketAlreadyExists()
MaximumVotingNumberTooLow
error MaximumVotingNumberTooLow()
MismatchedArrayLengths
error MismatchedArrayLengths()
NonZeroVotes
error NonZeroVotes()
NotDistributeWindow
error NotDistributeWindow()
NotGovernor
error NotGovernor()
NotOwner
error NotOwner()
NotWhitelistedNFT
error NotWhitelistedNFT()
RewardAccumulatorDoesNotExist
error RewardAccumulatorDoesNotExist(address _pool)
RewardAccumulatorNotAlive
error RewardAccumulatorNotAlive(address _rewardAccumulator)
SameValue
error SameValue()
TokensArrayEmpty
error TokensArrayEmpty()
TooManyPools
error TooManyPools()
UnequalLengths
error UnequalLengths()
ZeroAddress
error ZeroAddress()
ZeroWeight
error ZeroWeight()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6148d080620000f46000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80637dc5421a11610167578063ce62db09116100ce578063e34e8fd011610087578063e34e8fd0146106be578063e8b3fd57146106d1578063ebb1d413146106da578063f2fde38b146106fa578063f3594be01461070d578063faeb7bd51461072d57600080fd5b8063ce62db0914610631578063d46005b114610651578063d4e2616f14610664578063d58b15d414610687578063e2819d5c1461069a578063e30c3978146106ad57600080fd5b8063ab37f48611610120578063ab37f486146105a1578063b1283e77146105c4578063bd31251f146105e5578063c42cf535146105f8578063c975fec41461060b578063caa5c5d41461061e57600080fd5b80637dc5421a14610515578063880e36fc1461054f5780638da5cb5b146105625780639fdc1c7e14610573578063a540254414610586578063aa9354a31461058e57600080fd5b806332145f901161020b5780636eb172e3116101c45780636eb172e3146104c45780636f4a2cd0146104d75780636f59dd8f146104df578063715018a6146104f25780637715ee75146104fa57806379ba50971461050d57600080fd5b806332145f901461042f57806339e9f3b6146104425780633d3b6f351461045557806352ed72c31461046857806366a5e7e21461049c5780636e13fffe146104af57600080fd5b80631f8507161161025d5780631f8507161461039257806324f52f4f146103a5578063290a9127146103b85780632935df9e146103e957806330331b2f14610409578063310bd74b1461041c57600080fd5b806304d5a8cf146102a557806309b7617b146102eb5780630c340a24146103245780630ffb1d8b146103375780631703e5f91461034c5780631bb5e2dc1461037f575b600080fd5b6102ce6102b3366004613abb565b60d1602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6103166102f9366004613ad8565b60d760209081526000928352604080842090915290825290205481565b6040519081526020016102e2565b60cb546102ce906001600160a01b031681565b61034a610345366004613b16565b610767565b005b61036f61035a366004613abb565b60db6020526000908152604090205460ff1681565b60405190151581526020016102e2565b6102ce61038d366004613b44565b6107a0565b60c9546102ce906001600160a01b031681565b61034a6103b3366004613ba8565b6107ca565b6103166103c6366004613c55565b60d260209081526000938452604080852082529284528284209052825290205481565b6103fc6103f7366004613ad8565b610a07565b6040516102e29190613d4a565b61034a610417366004613b44565b610d65565b61034a61042a366004613b44565b610e07565b61034a61043d366004613b44565b610f63565b610316610450366004613b44565b6110be565b60cc546102ce906001600160a01b031681565b6102ce610476366004613ded565b60dc6020908152600092835260408084209091529082529020546001600160a01b031681565b6102ce6104aa366004613e22565b6110d1565b6104b7611116565b6040516102e29190613e94565b61034a6104d2366004613ea7565b611178565b61034a6112e2565b61034a6104ed366004613ffc565b611517565b61034a6115ca565b61034a610508366004614030565b6115de565b61034a611758565b61031661052336600461410c565b60d360209081526000948552604080862082529385528385208152918452828420909152825290205481565b61031661055d366004613b44565b6117cf565b6033546001600160a01b03166102ce565b61034a61058136600461415d565b6117e0565b60d054610316565b61031661059c366004613b44565b611c37565b61036f6105af366004613abb565b60d96020526000908152604090205460ff1681565b6105d76105d2366004613b44565b611c46565b6040516102e2929190614200565b61034a6105f3366004613abb565b611c7b565b61034a610606366004613abb565b611cf4565b61034a61061936600461421d565b611d6d565b61034a61062c366004614288565b611eaf565b61064461063f366004613e22565b611f21565b6040516102e291906142a5565b61034a61065f3660046142b3565b611f71565b61036f610672366004613b44565b60da6020526000908152604090205460ff1681565b610316610695366004613b44565b612181565b61034a6106a836600461432f565b612195565b6065546001600160a01b03166102ce565b61034a6106cc366004614354565b61220e565b61031660cf5481565b6103166106e8366004613abb565b60ce6020526000908152604090205481565b61034a610708366004613abb565b61233b565b61031661071b366004613b44565b60d86020526000908152604090205481565b61031661073b36600461410c565b60d460209081526000948552604080862082529385528385208152918452828420909152825290205481565b60cb546001600160a01b0316331461079257604051633b8d9d7560e21b815260040160405180910390fd5b61079c82826123ac565b5050565b60cd81815481106107b057600080fd5b6000918252602090912001546001600160a01b0316905081565b60cb546001600160a01b031633146107f557604051633b8d9d7560e21b815260040160405180910390fd5b8483811461081657604051632b477e7160e11b815260040160405180910390fd5b81811461083657604051632b477e7160e11b815260040160405180910390fd5b60005b8181101561098d5783838281811061085357610853614392565b90506020020160208101906108689190613abb565b60dc60008a8a8581811061087e5761087e614392565b90506020020160208101906108939190613abb565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008888858181106108c7576108c7614392565b90506020020160208101906108dc91906143a8565b60018111156108ed576108ed613c9e565b60018111156108fe576108fe613c9e565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160db600086868581811061094857610948614392565b905060200201602081019061095d9190613abb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610839565b50828260405161099e9291906143c3565b604051809103902085856040516109b6929190614405565b604051809103902088886040516109ce9291906143c3565b604051908190038120907fff4266c7dba361bc4ce6e86cc8fd87b2d5e94e60527231375cc8fb565f8b32b290600090a450505050505050565b610a326040518060800160405280606081526020016060815260200160608152602001600081525090565b600083815260d5602090815260408083206001600160a01b038616845290915281205490816001600160401b03811115610a6e57610a6e613f1b565b604051908082528060200260200182016040528015610a97578160200160208202803683370190505b5090506000826001600160401b03811115610ab457610ab4613f1b565b604051908082528060200260200182016040528015610add578160200160208202803683370190505b5090506000836001600160401b03811115610afa57610afa613f1b565b604051908082528060200260200182016040528015610b23578160200160208202803683370190505b50905060005b84811015610d1c57600088815260d5602090815260408083206001600160a01b038b1684529091529020805482908110610b6557610b65614392565b9060005260206000200160009054906101000a90046001600160a01b0316848281518110610b9557610b95614392565b6001600160a01b0392831660209182029290920181019190915260008a815260d682526040808220938b1682529290915220805482908110610bd957610bd9614392565b90600052602060002090602091828204019190069054906101000a900460ff16838281518110610c0b57610c0b614392565b60200260200101906001811115610c2457610c24613c9e565b90816001811115610c3757610c37613c9e565b905250600088815260d3602052604081208551909190869084908110610c5f57610c5f614392565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000848381518110610c9b57610c9b614392565b60200260200101516001811115610cb457610cb4613c9e565b6001811115610cc557610cc5613c9e565b81526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610d0957610d09614392565b6020908102919091010152600101610b29565b50600087815260d7602090815260408083206001600160a01b038a1684528252918290205482516080810184529586529085019390935283015260608201529150505b92915050565b60cb546001600160a01b03163314610d9057604051633b8d9d7560e21b815260040160405180910390fd5b600a811015610db257604051632db4ddc160e11b815260040160405180910390fd5b60cf548103610dd45760405163c23f6ccb60e01b815260040160405180910390fd5b60cf81905560405181907f570570b221cb14706e1bd90180bd79e47d0375cf953ccd13f34fcaa1073646d190600090a250565b610e0f612403565b600081815260d860205260409020548190610e2f4262093a808106900390565b11610e4d5760405163cade311f60e01b815260040160405180910390fd5b62093a80429081069003610e10014211610e7a57604051635a780bad60e01b815260040160405180910390fd5b60c9546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190614438565b6001600160a01b031614610f0e576040516330cd747160e01b815260040160405180910390fd5b60005b60cd54811015610f5457610f4c8360cd8381548110610f3257610f32614392565b6000918252602090912001546001600160a01b031661245c565b600101610f11565b5050610f606001609755565b50565b610f6b612403565b62093a80429081069003610e10014211610f9857604051635a780bad60e01b815260040160405180910390fd5b60c9546040516339f890b560e21b815260048101839052600091829182916001600160a01b03169063e7e242d490602401600060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261100e91908101906144b4565b92509250925060005b83518110156110b0576000670de0b6b3a764000083838151811061103d5761103d614392565b602002602001015185848151811061105757611057614392565b602002602001015161106991906145b2565b61107391906145c9565b90506110a78660cd848154811061108c5761108c614392565b6000918252602090912001546001600160a01b031683612902565b50600101611017565b50505050610f606001609755565b600062093a8082068203610e1001610d5f565b60d560205282600052604060002060205281600052604060002081815481106110f957600080fd5b6000918252602090912001546001600160a01b0316925083915050565b606060cd80548060200260200160405190810160405280929190818152602001828054801561116e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611150575b5050505050905090565b60cb546001600160a01b031633146111a357604051633b8d9d7560e21b815260040160405180910390fd5b60005b818110156112a45760008383838181106111c2576111c2614392565b9050604002018036038101906111d891906145eb565b90506111ec81600001518260200151612bb6565b1561120a57604051630313b28560e01b815260040160405180910390fd5b60d080546001808201835560009290925282517fe89d44c8fd6a9bac8af33ce47f56337617d449bf7ff3956b618c646de829cbcb90910180546001600160a01b031981166001600160a01b039093169283178255602085015185949293909284926001600160a81b03191690911790600160a01b90849081111561129057611290613c9e565b021790555050600190920191506111a69050565b507f5577e527c22d6c9a43929d204c9bfc33fa089326ce69b3ca9f8cc52caf1cb33282826040516112d6929190614647565b60405180910390a15050565b60cb546001600160a01b0316331461130d57604051633b8d9d7560e21b815260040160405180910390fd5b60dd5460ff16801561132d575062093a80429081069003620891c0014211155b1561134b576040516355bf6a7160e01b815260040160405180910390fd5b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b891906146b0565b905060006113c4612c71565b905060005b60d05481101561151257600061143260d083815481106113eb576113eb614392565b60009182526020909120015460d080546001600160a01b03909216918590811061141757611417614392565b600091825260209091200154600160a01b900460ff16612cdc565b905080156115095761150960dc600060d0858154811061145457611454614392565b60009182526020808320909101546001600160a01b03168352820192909252604001812060d080549192918690811061148f5761148f614392565b600091825260209091200154600160a01b900460ff1660018111156114b6576114b6613c9e565b60018111156114c7576114c7613c9e565b81526020810191909152604001600020546001600160a01b0316846114ec84886145b2565b6114f691906145c9565b60ca546001600160a01b03169190612dc8565b506001016113c9565b505050565b61151f612e1a565b80516000036115755760405162461bcd60e51b815260206004820152601e60248201527f4c70546f6b656e732061727261792063616e6e6f7420626520656d707479000060448201526064015b60405180910390fd5b80516115889060cd9060208401906139ed565b508060405161159791906146c9565b604051908190038120907f46475a5acc517188c629ae24ba62499dcb1de5aed40b269f5d0ab378fc3d447790600090a250565b6115d2612e1a565b6115dc6000612e74565b565b6115e6612403565b81518351146116085760405163332ac86360e21b815260040160405180910390fd5b3360c9546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190614438565b6001600160a01b0316146116a1576040516330cd747160e01b815260040160405180910390fd5b825160005b8181101561174c578481815181106116c0576116c0614392565b60200260200101516001600160a01b031663f5f8d365848684815181106116e9576116e9614392565b60200260200101516040518363ffffffff1660e01b815260040161170e929190614708565b600060405180830381600087803b15801561172857600080fd5b505af115801561173c573d6000803e3d6000fd5b5050600190920191506116a69050565b50506115126001609755565b60655433906001600160a01b031681146117c65760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161156c565b610f6081612e74565b600062093a80808306830301610d5f565b6117e8612403565b600087815260d8602052604090205487906118084262093a808106900390565b116118265760405163cade311f60e01b815260040160405180910390fd5b62093a80429081069003610e1001421161185357604051635a780bad60e01b815260040160405180910390fd5b61188e6040518060a0016040528060006001600160a01b03168152602001600081526020016060815260200160608152602001606081525090565b3380825260c9546040516331a9108f60e11b8152600481018c90526001600160a01b0390911690636352211e90602401602060405180830381865afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190614438565b6001600160a01b031614611926576040516330cd747160e01b815260040160405180910390fd5b86851415806119355750848314155b806119405750828714155b1561195e5760405163332ac86360e21b815260040160405180910390fd5b60cf548711156119815760405163ebcfae4b60e01b815260040160405180910390fd5b4260208201819052620891c062093a8082068203011080156119b25750600089815260da602052604090205460ff16155b156119d057604051630392978d60e41b815260040160405180910390fd5b6000805b88811015611a0a578585828181106119ee576119ee614392565b9050602002013582611a009190614721565b91506001016119d4565b5060005b60cd54811015611a3757611a2f8b60cd8381548110610f3257610f32614392565b600101611a0e565b5060208281015160008c815260d89092526040918290205560c95490516339f890b560e21b8152600481018c90526001600160a01b039091169063e7e242d490602401600060405180830381865afa158015611a97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611abf91908101906144b4565b60808501526060840152604083015260005b826040015151811015611c2057611c188b84604001518381518110611af857611af8614392565b6020026020010151670de0b6b3a764000086608001518581518110611b1f57611b1f614392565b602002602001015187606001518681518110611b3d57611b3d614392565b6020026020010151611b4f91906145b2565b611b5991906145c9565b8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250612e8d915050565b600101611ad1565b50505050611c2e6001609755565b50505050505050565b600062093a8082068203610d5f565b60d08181548110611c5657600080fd5b6000918252602090912001546001600160a01b0381169150600160a01b900460ff1682565b611c83612e1a565b6001600160a01b038116611caa5760405163d92e233d60e01b815260040160405180910390fd5b60cc80546001600160a01b0319166001600160a01b0383169081179091556040517f676e14d1d2e92c005e4dcfbba61af630b9ca19e16f69be0371d88b368f2b2cb390600090a250565b611cfc612e1a565b6001600160a01b038116611d235760405163d92e233d60e01b815260040160405180910390fd5b60cb80546001600160a01b0319166001600160a01b0383169081179091556040517f1cbb37f5a02c38ab13773cb770fae505cce417a4d81560117389e3a9f7e001f290600090a250565b60cb546001600160a01b03163314611d9857604051633b8d9d7560e21b815260040160405180910390fd5b80838114611db957604051632b477e7160e11b815260040160405180910390fd5b60005b81811015611e4f57838382818110611dd657611dd6614392565b9050602002016020810190611deb9190613abb565b60d16000888885818110611e0157611e01614392565b9050602002016020810190611e169190613abb565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b03191692909116919091179055600101611dbc565b508282604051611e609291906143c3565b60405180910390208585604051611e789291906143c3565b604051908190038120907f3cbe37144c7485400be82bfd3641a31b2f85267b60edcf9ef2ec012b5c4eef4890600090a35050505050565b60cb546001600160a01b03163314611eda57604051633b8d9d7560e21b815260040160405180910390fd5b60dd805460ff19168215159081179091556040519081527f6efa5ade2635e3df319c8c9b1b674023447896f669114b6191c2a96b1659d34d9060200160405180910390a150565b60d66020528260005260406000206020528160005260406000208181548110611f4957600080fd5b906000526020600020906020918282040191900692509250509054906101000a900460ff1681565b600054610100900460ff1615808015611f915750600054600160ff909116105b80611fab5750303b158015611fab575060005460ff166001145b61200e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161156c565b6000805460ff191660011790558015612031576000805461ff0019166101001790555b6120396135f7565b612041613626565b84600081900361206357604051620d28ef60eb1b815260040160405180910390fd5b60005b818110156120a75761209f88888381811061208357612083614392565b90506020020160208101906120989190613abb565b60016123ac565b600101612066565b5060cc80546001600160a01b03199081166001600160a01b038881169190911790925560ca8054821687841617905560c9805482169286169290921790915560cb8054339216821790556040517f4a3eb0674631610761ddae0e34a5390318f5ec24f3b1ef5ea015f4dff914e4c99161212a918a918a918a918a918a9190614734565b60405180910390a1508015612179576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b600062093a8082068203620891c001610d5f565b60cb546001600160a01b031633146121c057604051633b8d9d7560e21b815260040160405180910390fd5b600082815260da6020526040808220805460ff191684151590811790915590513392859184917f8a6ff732c8641e1e34d771e1f8b1673e988c1abdfb694ebdf6c910a5e3d0d85391a4505050565b60cb546001600160a01b0316331461223957604051633b8d9d7560e21b815260040160405180910390fd5b6001600160a01b038316600090815260dc602052604081208184600181111561226457612264613c9e565b600181111561227557612275613c9e565b81526020810191909152604001600020546001600160a01b03169050806122ba576040516323b5f32160e21b81526001600160a01b038516600482015260240161156c565b6001600160a01b038116600090815260db60205260409020805460ff19168315151790558260018111156122f0576122f0613c9e565b846001600160a01b03167f1e5b8e1351cfab07ad44bc6532bf1bb2dccdddc5bbda4d8109aa55064e63d0fb8460405161232d911515815260200190565b60405180910390a350505050565b612343612e1a565b606580546001600160a01b0383166001600160a01b031990911681179091556123746033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b038216600081815260d96020526040808220805460ff1916851515908117909155905190929133917f44948130cf88523dbc150908a47dd6332c33a01a3869d7f2fa78e51d5a5f9c579190a45050565b6002609754036124555760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161156c565b6002609755565b600082815260d5602090815260408083206001600160a01b03851680855290835281842086855260d6845282852091855292528220815491929091905b818110156128215760008482815481106124b5576124b5614392565b600091825260208220015485546001600160a01b0390911692508590849081106124e1576124e1614392565b6000918252602080832081830401548b845260d3825260408085206001600160a01b0388168652909252908320601f9092166101000a900460ff1692508183600181111561253157612531613c9e565b600181111561254257612542613c9e565b8152602080820192909252604090810160009081206001600160a01b038c16825290925290205490508015612816576001600160a01b038316600090815260d260205260408120829184600181111561259d5761259d613c9e565b60018111156125ae576125ae613c9e565b815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546125ee91906147ac565b9091555050600089815260d3602090815260408083206001600160a01b038716845290915281209083600181111561262857612628613c9e565b600181111561263957612639613c9e565b8152602080820192909252604090810160009081206001600160a01b03808d1683529084528282208290558616815260dc909252812060d191908185600181111561268657612686613c9e565b600181111561269757612697613c9e565b815260208082019290925260409081016000908120546001600160a01b03908116855292840194909452918201909220549051635ae2fb3960e11b81528a8316600482015260248101849052604481018c905291169063b5c5f67290606401600060405180830381600087803b15801561271057600080fd5b505af1158015612724573d6000803e3d6000fd5b505050506001600160a01b038816600090815260ce6020526040812080548392906127509084906147ac565b90915550506001600160a01b038316600081815260d2602052604081208b929133917fadab630928b1d46214641293704a312ee7ad87e03ae14a7fd95e7308b93998df918691908860018111156127a9576127a9613c9e565b60018111156127ba576127ba613c9e565b815260200190815260200160002060008e6001600160a01b03166001600160a01b03168152602001908152602001600020544260405161280d939291909283526020830191909152604082015260600190565b60405180910390a45b505050600101612499565b50600085815260d7602090815260408083206001600160a01b03881680855290835281842084905588845260d58352818420908452909152812061286491613a52565b600085815260d6602090815260408083206001600160a01b0388168452909152812061288f91613a70565b60c954604051632d27a2cd60e11b815260048101879052600060248201526001600160a01b0390911690635a4f459a90604401600060405180830381600087803b1580156128dc57600080fd5b505af11580156128f0573d6000803e3d6000fd5b505050505050505050565b6001609755565b600083815260d5602090815260408083206001600160a01b038616845282528083208054825181850281018501909352808352919290919083018282801561297357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612955575b505050600087815260d6602090815260408083206001600160a01b038a168452825280832080548251818502810185019093528083529697509295909450919250830182828015612a1357602002820191906000526020600020906000905b82829054906101000a900460ff1660018111156129f1576129f1613c9e565b8152602060019283018181049485019490930390920291018084116129d25790505b505050505090506000825190506000816001600160401b03811115612a3a57612a3a613f1b565b604051908082528060200260200182016040528015612a63578160200160208202803683370190505b5090506000805b83811015612b565760d460008a81526020019081526020016000206000878381518110612a9957612a99614392565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000868381518110612ad557612ad5614392565b60200260200101516001811115612aee57612aee613c9e565b6001811115612aff57612aff613c9e565b81526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054838281518110612b4357612b43614392565b6020908102919091010152600101612a6a565b5060005b8551811015612b9257828181518110612b7557612b75614392565b602002602001015182612b889190614721565b9150600101612b5a565b50612b9d888861245c565b612bac88888888888787612e8d565b5050505050505050565b60d054600090815b81811015612c6657846001600160a01b031660d08281548110612be357612be3614392565b6000918252602090912001546001600160a01b0316148015612c4e5750836001811115612c1257612c12613c9e565b60d08281548110612c2557612c25614392565b600091825260209091200154600160a01b900460ff166001811115612c4c57612c4c613c9e565b145b15612c5e57600192505050610d5f565b600101612bbe565b506000949350505050565b60d054600090815b81811015612cd757612cc360d08281548110612c9757612c97614392565b60009182526020909120015460d080546001600160a01b03909216918490811061141757611417614392565b612ccd9084614721565b9250600101612c79565b505090565b60cd54600090815b81811015612dc0576001600160a01b038516600090815260d26020526040812081866001811115612d1757612d17613c9e565b6001811115612d2857612d28613c9e565b8152602001908152602001600020600060cd8481548110612d4b57612d4b614392565b60009182526020808320909101546001600160a01b0316835282019290925260400181205460cd8054919350612da89184919086908110612d8e57612d8e614392565b6000918252602090912001546001600160a01b0316613655565b9050612db48186614721565b94505050600101612ce4565b505092915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526115129084906136de565b6033546001600160a01b031633146115dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161156c565b606580546001600160a01b0319169055610f60816137b0565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152845160005b8181101561352c57868181518110612ee557612ee5614392565b60209081029190910101516001600160a01b031660408401528551869082908110612f1257612f12614392565b602002602001015183606001906001811115612f3057612f30613c9e565b90816001811115612f4357612f43613c9e565b9052506040808401516001600160a01b0316600090815260dc60205290812060608501519091906001811115612f7b57612f7b613c9e565b6001811115612f8c57612f8c613c9e565b815260208082019290925260409081016000908120546001600160a01b0390811660808801819052825260d190935220541660c08401528451859082908110612fd757612fd7614392565b6020026020010151600003612fff576040516319a2a9bd60e01b815260040160405180910390fd5b60808301516001600160a01b031661303b5760408084015190516323b5f32160e21b81526001600160a01b03909116600482015260240161156c565b60808301516001600160a01b0316600090815260db602052604090205460ff16613089576080830151604051635daa415360e01b81526001600160a01b03909116600482015260240161156c565b838886838151811061309d5761309d614392565b60200260200101516130af91906145b2565b6130b991906145c9565b60a084015260008a815260d360209081526040808320818701516001600160a01b031684529091528120606085015190919060018111156130fc576130fc613c9e565b600181111561310d5761310d613c9e565b8152602080820192909252604090810160009081206001600160a01b038d168252909252902054156131525760405163315f6a3d60e01b815260040160405180910390fd5b60008a815260d5602090815260408083206001600160a01b038d8116808652918452828520888401518154600180820184559288528688200180546001600160a01b03191691909316179091558e855260d684528285209185529083529083206060870151815480840183559185529383902092810490920180549092601f166101000a60ff8102199091169184908111156131f0576131f0613c9e565b021790555060a08301516040808501516001600160a01b0316600090815260d26020529081206060860151909190600181111561322f5761322f613c9e565b600181111561324057613240613c9e565b815260200190815260200160002060008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546132809190614721565b909155505060a083015160008b815260d360209081526040808320818801516001600160a01b031684529091528120606086015190919060018111156132c8576132c8613c9e565b60018111156132d9576132d9613c9e565b815260200190815260200160002060008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133199190614721565b9250508190555084818151811061333257613332614392565b60209081029190910181015160008c815260d483526040808220878201516001600160a01b03168352909352918220606086015191929091600181111561337b5761337b613c9e565b600181111561338c5761338c613c9e565b8152602080820192909252604090810160009081206001600160a01b038e811680845291909452908290209390935560c086015160a08701519151630efe6a8b60e01b815260048101949094526024840191909152604483018d90521690630efe6a8b90606401600060405180830381600087803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b505050508260a001518360200181815161343b9190614721565b90525060a083015183518490613452908390614721565b90525060408084015160a08501516001600160a01b03909116600081815260d260205292832060608701518e94929333937f452d440efc30dfa14a0ef803ccb55936af860ec6a6960ed27f129bef913f296a93919260018111156134b8576134b8613c9e565b60018111156134c9576134c9613c9e565b815260200190815260200160002060008f6001600160a01b03166001600160a01b03168152602001908152602001600020544260405161351c939291909283526020830191909152604082015260600190565b60405180910390a4600101612ecb565b5060c954604051632d27a2cd60e11b8152600481018b9052600160248201526001600160a01b0390911690635a4f459a90604401600060405180830381600087803b15801561357a57600080fd5b505af115801561358e573d6000803e3d6000fd5b505083516001600160a01b038b16600090815260ce6020526040812080549294509250906135bd908490614721565b909155505050602090810151600098895260d782526040808a206001600160a01b039099168a529790915295909620949094555050505050565b600054610100900460ff1661361e5760405162461bcd60e51b815260040161156c906147bf565b6115dc613802565b600054610100900460ff1661364d5760405162461bcd60e51b815260040161156c906147bf565b6115dc613832565b60cc546040516315d5220f60e31b81526001600160a01b038381166004830152600092839291169063aea9107890602401602060405180830381865afa1580156136a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c791906146b0565b905060006136d582866145b2565b95945050505050565b6000613733826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138599092919063ffffffff16565b8051909150156115125780806020019051810190613751919061480a565b6115125760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161156c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166138295760405162461bcd60e51b815260040161156c906147bf565b6115dc33612e74565b600054610100900460ff166128fb5760405162461bcd60e51b815260040161156c906147bf565b60606138688484600085613872565b90505b9392505050565b6060824710156138d35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161156c565b600080866001600160a01b031685876040516138ef919061484b565b60006040518083038185875af1925050503d806000811461392c576040519150601f19603f3d011682016040523d82523d6000602084013e613931565b606091505b50915091506139428783838761394f565b925050505b949350505050565b606083156139be5782516000036139b7576001600160a01b0385163b6139b75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161156c565b5081613947565b61394783838151156139d35781518083602001fd5b8060405162461bcd60e51b815260040161156c9190614867565b828054828255906000526020600020908101928215613a42579160200282015b82811115613a4257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613a0d565b50613a4e929150613a91565b5090565b5080546000825590600052602060002090810190610f609190613a91565b50805460008255601f016020900490600052602060002090810190610f6091905b5b80821115613a4e5760008155600101613a92565b6001600160a01b0381168114610f6057600080fd5b600060208284031215613acd57600080fd5b813561386b81613aa6565b60008060408385031215613aeb57600080fd5b823591506020830135613afd81613aa6565b809150509250929050565b8015158114610f6057600080fd5b60008060408385031215613b2957600080fd5b8235613b3481613aa6565b91506020830135613afd81613b08565b600060208284031215613b5657600080fd5b5035919050565b60008083601f840112613b6f57600080fd5b5081356001600160401b03811115613b8657600080fd5b6020830191508360208260051b8501011115613ba157600080fd5b9250929050565b60008060008060008060608789031215613bc157600080fd5b86356001600160401b0380821115613bd857600080fd5b613be48a838b01613b5d565b90985096506020890135915080821115613bfd57600080fd5b613c098a838b01613b5d565b90965094506040890135915080821115613c2257600080fd5b50613c2f89828a01613b5d565b979a9699509497509295939492505050565b803560028110613c5057600080fd5b919050565b600080600060608486031215613c6a57600080fd5b8335613c7581613aa6565b9250613c8360208501613c41565b91506040840135613c9381613aa6565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b60028110613cd257634e487b7160e01b600052602160045260246000fd5b9052565b60008151808452602080850194506020840160005b83811015613d0e57613cfe878351613cb4565b9582019590820190600101613ceb565b509495945050505050565b60008151808452602080850194506020840160005b83811015613d0e57815187529582019590820190600101613d2e565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b80831015613d985783516001600160a01b03168252928401926001929092019190840190613d6f565b50838701519350601f19925082868203016040870152613db88185613cd6565b93505050604085015181858403016060860152613dd58382613d19565b92505050606084015160808401528091505092915050565b60008060408385031215613e0057600080fd5b8235613e0b81613aa6565b9150613e1960208401613c41565b90509250929050565b600080600060608486031215613e3757600080fd5b833592506020840135613e4981613aa6565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015613d0e5781516001600160a01b031687529582019590820190600101613e6f565b60208152600061386b6020830184613e5a565b60008060208385031215613eba57600080fd5b82356001600160401b0380821115613ed157600080fd5b818501915085601f830112613ee557600080fd5b813581811115613ef457600080fd5b8660208260061b8501011115613f0957600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613f5957613f59613f1b565b604052919050565b60006001600160401b03821115613f7a57613f7a613f1b565b5060051b60200190565b600082601f830112613f9557600080fd5b81356020613faa613fa583613f61565b613f31565b8083825260208201915060208460051b870101935086841115613fcc57600080fd5b602086015b84811015613ff1578035613fe481613aa6565b8352918301918301613fd1565b509695505050505050565b60006020828403121561400e57600080fd5b81356001600160401b0381111561402457600080fd5b61394784828501613f84565b60008060006060848603121561404557600080fd5b83356001600160401b038082111561405c57600080fd5b61406887838801613f84565b945060209150818601358181111561407f57600080fd5b8601601f8101881361409057600080fd5b803561409e613fa582613f61565b81815260059190911b8201840190848101908a8311156140bd57600080fd5b8584015b838110156140f5578035868111156140d95760008081fd5b6140e78d8983890101613f84565b8452509186019186016140c1565b50979a979950505050604095909501359450505050565b6000806000806080858703121561412257600080fd5b84359350602085013561413481613aa6565b925061414260408601613c41565b9150606085013561415281613aa6565b939692955090935050565b60008060008060008060006080888a03121561417857600080fd5b8735965060208801356001600160401b038082111561419657600080fd5b6141a28b838c01613b5d565b909850965060408a01359150808211156141bb57600080fd5b6141c78b838c01613b5d565b909650945060608a01359150808211156141e057600080fd5b506141ed8a828b01613b5d565b989b979a50959850939692959293505050565b6001600160a01b03831681526040810161386b6020830184613cb4565b6000806000806040858703121561423357600080fd5b84356001600160401b038082111561424a57600080fd5b61425688838901613b5d565b9096509450602087013591508082111561426f57600080fd5b5061427c87828801613b5d565b95989497509550505050565b60006020828403121561429a57600080fd5b813561386b81613b08565b60208101610d5f8284613cb4565b6000806000806000608086880312156142cb57600080fd5b85356001600160401b038111156142e157600080fd5b6142ed88828901613b5d565b909650945050602086013561430181613aa6565b9250604086013561431181613aa6565b9150606086013561432181613aa6565b809150509295509295909350565b6000806040838503121561434257600080fd5b823591506020830135613afd81613b08565b60008060006060848603121561436957600080fd5b833561437481613aa6565b925061438260208501613c41565b91506040840135613c9381613b08565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156143ba57600080fd5b61386b82613c41565b60008184825b858110156143fa5781356143dc81613aa6565b6001600160a01b0316835260209283019291909101906001016143c9565b509095945050505050565b60008184825b858110156143fa576144258361442084613c41565b613cb4565b602092830192919091019060010161440b565b60006020828403121561444a57600080fd5b815161386b81613aa6565b600082601f83011261446657600080fd5b81516020614476613fa583613f61565b8083825260208201915060208460051b87010193508684111561449857600080fd5b602086015b84811015613ff1578051835291830191830161449d565b6000806000606084860312156144c957600080fd5b83516001600160401b03808211156144e057600080fd5b818601915086601f8301126144f457600080fd5b81516020614504613fa583613f61565b82815260059290921b8401810191818101908a84111561452357600080fd5b948201945b8386101561454a57855161453b81613aa6565b82529482019490820190614528565b9189015191975090935050508082111561456357600080fd5b61456f87838801614455565b9350604086015191508082111561458557600080fd5b5061459286828701614455565b9150509250925092565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d5f57610d5f61459c565b6000826145e657634e487b7160e01b600052601260045260246000fd5b500490565b6000604082840312156145fd57600080fd5b604051604081018181106001600160401b038211171561461f5761461f613f1b565b604052823561462d81613aa6565b815261463b60208401613c41565b60208201529392505050565b6020808252818101839052600090604080840186845b878110156146a357813561467081613aa6565b6001600160a01b03168352614686828601613c41565b61469286850182613cb4565b50918301919083019060010161465d565b5090979650505050505050565b6000602082840312156146c257600080fd5b5051919050565b815160009082906020808601845b838110156146fc5781516001600160a01b0316855293820193908201906001016146d7565b50929695505050505050565b8281526040602082015260006138686040830184613e5a565b80820180821115610d5f57610d5f61459c565b60a0808252810186905260008760c08301825b8981101561477757823561475a81613aa6565b6001600160a01b0316825260209283019290910190600101614747565b506001600160a01b03978816602085015295871660408401525050918416606083015290921660809092019190915292915050565b81810381811115610d5f57610d5f61459c565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561481c57600080fd5b815161386b81613b08565b60005b8381101561484257818101518382015260200161482a565b50506000910152565b6000825161485d818460208701614827565b9190910192915050565b6020815260008251806020840152614886816040850160208701614827565b601f01601f1916919091016040019291505056fea2646970667358221220dfdb249332eda79933b7ef55c0d435fdd199ef93a37a15d042e24d70249856ec64736f6c63430008160033