UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,069 lines 62 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.RewardBoosterFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class RewardBoosterFactory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(accessController, rewardMinter, overrides) { return super.deploy(accessController, rewardMinter, overrides || {}); } getDeployTransaction(accessController, rewardMinter, overrides) { return super.getDeployTransaction(accessController, rewardMinter, overrides || {}); } attach(address) { return super.attach(address); } connect(signer) { return super.connect(signer); } static connect(address, signerOrProvider) { return new contracts_1.Contract(address, _abi, signerOrProvider); } } exports.RewardBoosterFactory = RewardBoosterFactory; const _abi = [ { inputs: [ { internalType: "contract IMarketAccessController", name: "accessController", type: "address", }, { internalType: "contract IRewardMinter", name: "rewardMinter", type: "address", }, ], stateMutability: "nonpayable", type: "constructor", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "baseline", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "mask", type: "uint256", }, ], name: "BaselineUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "pool", type: "address", }, { indexed: false, internalType: "uint256", name: "mask", type: "uint256", }, { indexed: false, internalType: "uint32", name: "pctFactor", type: "uint32", }, ], name: "BoostFactorSet", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "by", type: "address", }, { indexed: false, internalType: "bool", name: "paused", type: "bool", }, ], name: "EmergencyPaused", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "minBoostPct", type: "uint16", }, ], name: "MinBoostUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "account", type: "address", }, { indexed: false, internalType: "enum AutolockMode", name: "mode", type: "uint8", }, { indexed: false, internalType: "uint32", name: "lockDuration", type: "uint32", }, { indexed: false, internalType: "uint224", name: "param", type: "uint224", }, ], name: "RewardAutolockConfigured", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "minter", type: "address", }, ], name: "RewardMinterSet", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "pool", type: "address", }, { indexed: false, internalType: "uint256", name: "mask", type: "uint256", }, ], name: "RewardPoolAdded", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "pool", type: "address", }, { indexed: false, internalType: "uint256", name: "mask", type: "uint256", }, ], name: "RewardPoolRemoved", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: true, internalType: "address", name: "fromPool", type: "address", }, ], name: "RewardsAllocated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "RewardsClaimed", type: "event", }, { inputs: [ { internalType: "contract IManagedRewardPool", name: "pool", type: "address", }, ], name: "addRewardPool", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint256", name: "allocated", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "enum AllocationMode", name: "mode", type: "uint8", }, ], name: "allocatedByPool", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "timestamp", type: "uint256", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, ], name: "autolockAccumulateTill", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "maxAmount", type: "uint256", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, ], name: "autolockAccumulateUnderlying", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "autolockDefault", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "minAmount", type: "uint256", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, ], name: "autolockKeepUpBalance", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "autolockOf", outputs: [ { internalType: "enum AutolockMode", name: "mode", type: "uint8", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, { internalType: "uint256", name: "param", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint32", name: "minLockDuration", type: "uint32", }, ], name: "autolockProlongate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "autolockStop", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "balanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "claimReward", outputs: [ { internalType: "uint256", name: "claimed", type: "uint256", }, { internalType: "uint256", name: "extra", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "receiver", type: "address", }, { internalType: "uint256", name: "includeMask", type: "uint256", }, ], name: "claimRewardTo", outputs: [ { internalType: "uint256", name: "claimed", type: "uint256", }, { internalType: "uint256", name: "extra", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "claimablePools", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "claimableReward", outputs: [ { internalType: "uint256", name: "claimable", type: "uint256", }, { internalType: "uint256", name: "extra", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint256", name: "includeMask", type: "uint256", }, ], name: "claimableRewardFor", outputs: [ { internalType: "uint256", name: "claimable", type: "uint256", }, { internalType: "uint256", name: "extra", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "disableAutolock", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "enum AutolockMode", name: "mode", type: "uint8", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, { internalType: "uint224", name: "param", type: "uint224", }, ], name: "enableAutolockAndSetDefault", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint32", name: "at", type: "uint32", }, ], name: "explainReward", outputs: [ { components: [ { internalType: "uint256", name: "amountClaimable", type: "uint256", }, { internalType: "uint256", name: "amountExtra", type: "uint256", }, { internalType: "uint256", name: "maxBoost", type: "uint256", }, { internalType: "uint256", name: "boostLimit", type: "uint256", }, { internalType: "uint32", name: "latestClaimAt", type: "uint32", }, { components: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "extra", type: "uint256", }, { internalType: "address", name: "pool", type: "address", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "uint32", name: "factor", type: "uint32", }, { internalType: "enum RewardType", name: "rewardType", type: "uint8", }, ], internalType: "struct RewardExplainEntry[]", name: "allocations", type: "tuple[]", }, ], internalType: "struct RewardExplained", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getAccessController", outputs: [ { internalType: "contract IMarketAccessController", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getBoostExcessTarget", outputs: [ { internalType: "address", name: "target", type: "address", }, { internalType: "bool", name: "mintExcess", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "pool", type: "address", }, ], name: "getBoostFactor", outputs: [ { internalType: "uint32", name: "pctFactor", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getBoostPool", outputs: [ { internalType: "address", name: "pool", type: "address", }, { internalType: "uint256", name: "mask", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getMinBoost", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "pool", type: "address", }, ], name: "getPoolMask", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getPools", outputs: [ { internalType: "contract IManagedRewardPool[]", name: "", type: "address[]", }, { internalType: "uint256", name: "ignoreMask", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "allMask", type: "uint256", }, ], name: "getPoolsByMask", outputs: [ { internalType: "address[]", name: "pools", type: "address[]", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRewardMinter", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isAutolockEnabled", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "addr", type: "address", }, ], name: "isConfigAdmin", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "addr", type: "address", }, ], name: "isRateAdmin", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract IManagedRewardPool", name: "pool", type: "address", }, ], name: "removeRewardPool", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract IManagedRewardPool[]", name: "pools", type: "address[]", }, { internalType: "uint16[]", name: "pcts", type: "uint16[]", }, { internalType: "uint256", name: "baseline", type: "uint256", }, ], name: "setBaselinePercentagesAndRate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "target", type: "address", }, { internalType: "bool", name: "mintExcess", type: "bool", }, ], name: "setBoostExcessTarget", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "pool", type: "address", }, { internalType: "uint32", name: "pctFactor", type: "uint32", }, ], name: "setBoostFactor", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "pool", type: "address", }, ], name: "setBoostPool", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "includeMask", type: "uint256", }, ], name: "setClaimablePools", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address[]", name: "accounts", type: "address[]", }, { internalType: "uint256", name: "includeMask", type: "uint256", }, ], name: "setClaimablePoolsFor", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "minBoostPct", type: "uint16", }, ], name: "setMinBoost", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "paused", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract IRewardMinter", name: "minter", type: "address", }, ], name: "setRewardMinter", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "updateBoostPool", type: "bool", }, ], name: "setUpdateBoostPoolRate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "baseline", type: "uint256", }, ], name: "updateBaseline", outputs: [ { internalType: "uint256", name: "totalRate", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x60806040523480156200001157600080fd5b50604051620044a7380380620044a7833981016040819052620000349162000066565b600080546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055620000bd565b6000806040838503121562000079578182fd5b82516200008681620000a4565b60208401519092506200009981620000a4565b809150509250929050565b6001600160a01b0381168114620000ba57600080fd5b50565b6143da80620000cd6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80637adab08d11610151578063bea9a054116100c3578063cf0a230a11610087578063cf0a230a146105b5578063d44ec8b9146105d5578063d49ebe8f146105e8578063ddebfb92146105fb578063e95034251461060e578063e9cce4d31461062157600080fd5b8063bea9a05414610561578063c7d6ad5a14610574578063ca5b594614610587578063cbb207da1461058f578063ce91a059146105a257600080fd5b8063a7a0b84a11610115578063a7a0b84a146104ed578063b0286b1814610500578063b10fb7aa14610513578063b187bd261461053b578063b6de34c914610546578063b88a802f1461055957600080fd5b80637adab08d146104995780639184a75f146104a15780639cb9a554146104b45780639d0812fe146104c7578063a6c3b8e8146104da57600080fd5b806345a03035116101ea57806356fe702d116101ae57806356fe702d1461042157806365eea7fd14610442578063673a2a1f1461044a5780636eb859811461046057806370a082311461047357806372463e3f1461048657600080fd5b806345a03035146103ac5780634b4739ea146103d75780634dfdd3e5146103ea5780635174c4e6146103fb57806352284ea11461040e57600080fd5b806326fd27121161023157806326fd2712146103175780632803b7b1146103375780632fd1fc831461035f578063364c28311461037757806339b5ea5f1461039957600080fd5b80630ca2103d1461026e5780630df8b0e31461029457806311bf2c20146102ca57806316c38b3c146102dd57806316d6b5f6146102f2575b600080fd5b61028161027c366004613de6565b610634565b6040519081526020015b60405180910390f35b6102ab600a54600b546001600160a01b0390911691565b604080516001600160a01b03909316835260208301919091520161028b565b6102816102d8366004613b30565b610741565b6102f06102eb366004613d2e565b61078e565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161028b565b61032a610325366004613de6565b61080d565b60405161028b9190613f60565b61034a610345366004613b84565b610962565b6040805192835260208301919091520161028b565b610367610985565b604051901515815260200161028b565b61038a610385366004613b30565b6109bb565b60405161028b93929190614031565b6102f06103a7366004613e43565b610b3a565b600c54604080516001600160a01b0383168152600160b01b90920460ff16151560208301520161028b565b6102f06103e5366004613cbd565b610c04565b6001546001600160a01b03166102ff565b6102f0610409366004613d77565b610dfd565b6102f061041c366004613b30565b610e15565b600c54600160a01b900461ffff1660405161ffff909116815260200161028b565b6102f0611125565b610452611135565b60405161028b929190613fad565b61036761046e366004613b30565b6111a2565b610281610481366004613b30565b6111d5565b6102f0610494366004613dc4565b611216565b6102f06112db565b6102f06104af366004613e43565b6112eb565b6102816104c2366004613b30565b611361565b6102f06104d5366004613b4c565b61136e565b6102f06104e8366004613b30565b6113c6565b6102f06104fb366004613b30565b6116a6565b6102f061050e366004613bf1565b6116fc565b610526610521366004613b30565b6117e4565b60405163ffffffff909116815260200161028b565b60075460ff16610367565b61034a610554366004613b84565b611805565b61034a611871565b6102f061056f366004613c46565b611899565b6102f0610582366004613ee6565b61190f565b6102f061191d565b6102f061059d366004613d2e565b61192b565b6103676105b0366004613b30565b611951565b6105c86105c3366004613c46565b61197e565b60405161028b91906140cf565b6102f06105e3366004613e43565b6119f2565b6102f06105f6366004613de6565b611a62565b6102f0610609366004613c73565b611a7f565b61034a61061c366004613b30565b611afe565b6102f061062f366004613b30565b611b19565b600061063e611bc0565b61064a82600654611c02565b600655604080518082019091526002815261070760f31b6020820152909150828211156106935760405162461bcd60e51b815260040161068a9190614056565b60405180910390fd5b50600154604051637ee9914160e11b8152306004820152602481018390526001600160a01b039091169063fdd3228290604401600060405180830381600087803b1580156106e057600080fd5b505af11580156106f4573d6000803e3d6000fd5b5050600654604080518681526020810186905280820192909252517f18c675fa7ed56fd1568a92bfa0c5d6993152c61c09bc673f68c14f165e2820bb9350908190036060019150a1919050565b6001600160a01b038116600090815260036020526040812054806107685750600092915050565b600161077781620100006142a7565b821661078391906142a7565b6001901b9392505050565b6040805180820190915260028152611b9b60f11b60208201526000546107c4916001600160a01b03909116903390600190611d2c565b6007805460ff191682151590811790915560405190815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b60606005541961082783600254600019600190911b011690565b1691506000825b801561085357600181161561084b5781610847816142d5565b9250505b60011c61082e565b508067ffffffffffffffff81111561087b57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108a4578160200160208202803683370190505b5091506000905080835b835183101561095a57600181161561094557600282815481106108e157634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b031684848151811061091f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015282610941816142d5565b9350505b6109508260016141b3565b915060011c6108ae565b505050919050565b600080610979846109738686611d5d565b42611d75565b915091505b9250929050565b600080600954600160e01b900460ff1660058111156109b457634e487b7160e01b600052602160045260246000fd5b1415905090565b6001600160a01b038116600090815260086020908152604080832081516060810190925280546001600160e01b038116835284938493849390929091830190600160e01b900460ff166005811115610a2357634e487b7160e01b600052602160045260246000fd5b6005811115610a4257634e487b7160e01b600052602160045260246000fd5b81529054600160e81b900460ff166020909101529050600081602001516005811115610a7e57634e487b7160e01b600052602160045260246000fd5b1415610b03576040805160608101909152600980546001600160e01b03811683526020830190600160e01b900460ff166005811115610acd57634e487b7160e01b600052602160045260246000fd5b6005811115610aec57634e487b7160e01b600052602160045260246000fd5b81529054600160e81b900460ff1660209091015290505b60208101516040820151610b1d9060ff1662093a80614266565b9151909662ffffff90921695506001600160e01b03169350915050565b60008211610b835760405162461bcd60e51b81526020600482015260166024820152751b5a5b88185b5bdd5b9d081a5cc81c995c5d5a5c995960521b604482015260640161068a565b60008163ffffffff1611610bd95760405162461bcd60e51b815260206004820152601960248201527f6c6f636b206475726174696f6e20697320726571756972656400000000000000604482015260640161068a565b6001600160e01b03821115610bf3576001600160e01b0391505b610c003360058385611ddb565b5050565b610c0c611bc0565b838214610c4f5760405162461bcd60e51b81526020600482015260116024820152700dad2e6dac2e8c6d0cac840d8cadccee8d607b1b604482015260640161068a565b60065460005b85811015610ddb576000610c97888884818110610c8257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906102d89190613b30565b905080610cb65760405162461bcd60e51b815260040161068a906140a9565b878783818110610cd657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ceb9190613b30565b6001600160a01b0316634800df8c878785818110610d1957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610d2e9190613dc4565b6040516001600160e01b031960e084901b16815261ffff9091166004820152602401600060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050506000868684818110610da457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610db99190613dc4565b61ffff161115610dc857918217915b5080610dd3816142d5565b915050610c55565b5060068190556000198214610df557610df382610634565b505b505050505050565b610e05611f08565b610e10838383611f4a565b505050565b610e1d611f08565b6001600160a01b038116610e6a5760405162461bcd60e51b81526020600482015260146024820152731c995dd85c99081c1bdbdb081c995c5d5a5c995960621b604482015260640161068a565b6001600160a01b03811660009081526003602052604090205480610e8c575050565b60006001610e9d81620100006142a7565b8316610ea991906142a7565b9050826001600160a01b031660028281548110610ed657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614610f2a5760405162461bcd60e51b815260206004820152600f60248201526e1d5b995e1c1958dd1959081c1bdbdb608a1b604482015260640161068a565b600060028281548110610f4d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918516808252600383526040808320839055600580546001871b9081179091558151630746363d60e01b815291519094630746363d926004808201939182900301818787803b158015610fc757600080fd5b505af1158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff9190613dfe565b905080156110d1576001600160ff1b038111156110575760405162461bcd60e51b815260206004820152601660248201527532bc31b2b9b9b4bb32903232b0b63637b1b0ba34b7b760511b604482015260640161068a565b6001546001600160a01b031663ab6de7798661107284614313565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156110b857600080fd5b505af11580156110cc573d6000803e3d6000fd5b505050505b6110da85612075565b846001600160a01b03167ff157e68e2245c70cbc79c5da7477f57616bf886825f65d57b9ff756847672e7b8360405161111591815260200190565b60405180910390a2505050505b50565b611133336001600080611ddb565b565b6060600060026005548180548060200260200160405190810160405280929190818152602001828054801561119357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611175575b50505050509150915091509091565b600080546001600160a01b03166111c257506001600160a01b0316301490565b6111cf82628000106120a3565b92915050565b60006001600160a01b0382166111ed57506000919050565b6000806111ff84610973866000611d5d565b909250905061120e81836141b3565b949350505050565b61121e6120bb565b61122a6001606461423c565b61123590606461423c565b61ffff168161ffff1611156112845760405162461bcd60e51b81526020600482015260156024820152740dad2dc40c4dedee6e840d2e640e8dede40d0d2ced605b1b604482015260640161068a565b600c805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fe6770ba09738c7d37f16c136778ec1630906e7f29695a18252b372702710119a906020015b60405180910390a150565b6112e3611f08565b6111336120d3565b42821161133a5760405162461bcd60e51b815260206004820152601c60248201527f6675747572652074696d657374616d7020697320726571756972656400000000604482015260640161068a565b6001600160e01b03821115611354576001600160e01b0391505b610c003360048385611ddb565b60006111cf826000611d5d565b611376611f08565b600c80546001600160a01b0319166001600160a01b0384161790558080156113a657506001600160a01b03821615155b600c8054911515600160b01b0260ff60b01b199092169190911790555050565b6113ce611f08565b6001600160a01b03811661141b5760405162461bcd60e51b81526020600482015260146024820152731c995dd85c99081c1bdbdb081c995c5d5a5c995960621b604482015260640161068a565b6001600160a01b038116600090815260036020526040902054156114765760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b604482015260640161068a565b60025460ff10156114ba5760405162461bcd60e51b815260206004820152600e60248201526d746f6f206d616e7920706f6f6c7360901b604482015260640161068a565b60028054600180820183557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace820180546001600160a01b0319166001600160a01b0386169081179091559254600084815260036020908152604080832093909355600680549490951b93841790945581516355f4f19760e01b815291519294909390926355f4f19792600480820193929182900301818787803b15801561156057600080fd5b505af1158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190613dfe565b9050801561165e576001600160ff1b038111156115f75760405162461bcd60e51b815260206004820152601760248201527f65786365737369766520707265616c6c6f636174696f6e000000000000000000604482015260640161068a565b60015460405163ab6de77960e01b81526001600160a01b038581166004830152602482018490529091169063ab6de77990604401600060405180830381600087803b15801561164557600080fd5b505af1158015611659573d6000803e3d6000fd5b505050505b826001600160a01b03167f305b52f8a9bfeffbe21e94adcd199148b2e85fc8305a3d121d99d078937df7d98360405161169991815260200190565b60405180910390a2505050565b6116ae611f08565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f2ad2d6dc5545aec43acc94f1b5c82f80a64f6c7ffae5eb863a8b3d02d1bf973e906020016112d0565b336000908152600360205260408120549061171b6001620100006142a7565b821690508061173c5760405162461bcd60e51b815260040161068a906140a9565b60109190911c908415611796576117558686848761213d565b60405185815233906001600160a01b038816907f311f9037d22bffc94ed576587a0a76d15ce73b8ae0536c7f6319477740d5e8f29060200160405180910390a35b60008360028111156117b857634e487b7160e01b600052602160045260246000fd5b14156117c55750506117de565b610df5866117d46001846142a7565b6001901b856122fb565b50505050565b6001600160a01b03811660009081526003602052604081205460101c6111cf565b600080611810612397565b6001600160a01b03841661185d5760405162461bcd60e51b81526020600482015260146024820152731c9958d95a5d995c881a5cc81c995c5d5a5c995960621b604482015260640161068a565b6109793361186b3386611d5d565b866123d5565b60008061187c612397565b6118913361188b336000611d5d565b336123d5565b915091509091565b6118a16120bb565b600a546001600160a01b03838116911614156118ff5760405162461bcd60e51b815260206004820152601960248201527f666163746f7220666f722074686520626f6f737420706f6f6c00000000000000604482015260640161068a565b610c00828263ffffffff16612459565b611122336002836000611ddb565b611133336000806000611ddb565b611933611f08565b600c8054911515600160b81b0260ff60b81b19909216919091179055565b600080546001600160a01b031661197157506001600160a01b0316301490565b6111cf82628000086120a3565b6119bd6040518060c0016040528060008152602001600081526020016000815260200160008152602001600063ffffffff168152602001606081525090565b4263ffffffff168263ffffffff1610156119d657600080fd5b6119eb836119e5856000612516565b84612577565b9392505050565b60008211611a3b5760405162461bcd60e51b81526020600482015260166024820152751b585e08185b5bdd5b9d081a5cc81c995c5d5a5c995960521b604482015260640161068a565b6001600160e01b03821115611a55576001600160e01b0391505b610c003360038385611ddb565b611a6c3382611d5d565b3360009081526004602052604090205550565b611a87611f08565b815b80156117de5780611a99816142be565b9150506000848483818110611abe57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ad39190613b30565b9050611adf8184611d5d565b6001600160a01b03909116600090815260046020526040902055611a89565b600080611b1083610973856000611d5d565b91509150915091565b611b21611f08565b600a546001600160a01b0382811691161415611b3a5750565b600a546001600160a01b031615611b6257600a54611b62906001600160a01b03166000612459565b6001600160a01b038116611b7a576000600b55611ba0565b611b8981640200000000612459565b611b9281610741565b600b819055611ba057600080fd5b600a80546001600160a01b0383166001600160a01b031990911617905550565b611bc9336111a2565b60405180604001604052806002815260200161383960f01b815250906111225760405162461bcd60e51b815260040161068a9190614056565b600080600b5460001480611c205750600c54600160b81b900460ff16155b15611c3857611c2f8484612b93565b9150915061097e565b611c4784600b54198516612b93565b9350915083821015611cc657600a546001600160a01b0316631bd5ad36611c6e84876142a7565b6040518263ffffffff1660e01b8152600401611c8c91815260200190565b600060405180830381600087803b158015611ca657600080fd5b505af1158015611cba573d6000803e3d6000fd5b50505050839150611d25565b600a54604051630dead69b60e11b8152600060048201526001600160a01b0390911690631bd5ad3690602401600060405180830381600087803b158015611d0c57600080fd5b505af1158015611d20573d6000803e3d6000fd5b505050505b5092909150565b611d37848484612cb4565b8190611d565760405162461bcd60e51b815260040161068a9190614056565b5050505050565b6000600b5419611d6d8484612516565b169392505050565b6000806001600160a01b038516611dc35760405162461bcd60e51b81526020600482015260126024820152711a1bdb19195c881a5cc81c995c5d5a5c995960721b604482015260640161068a565b611dce858585612ccf565b915091505b935093915050565b6040518060600160405280826001600160e01b03168152602001846005811115611e1557634e487b7160e01b600052602160045260246000fd5b8152602001611e2384612f76565b60ff1690526001600160a01b0385166000908152600860209081526040909120825181546001600160e01b039091166001600160e01b031982168117835592840151919283916001600160e81b03191617600160e01b836005811115611e9957634e487b7160e01b600052602160045260246000fd5b0217905550604091820151815460ff909116600160e81b0260ff60e81b19909116179055516001600160a01b038516907f26369aeb03f92f843d03b2ab158aa7d61ff073ae0b9523458b923bdefdda535890611efa90869086908690613ffe565b60405180910390a250505050565b611f1133611951565b60405180604001604052806002815260200161383160f01b815250906111225760405162461bcd60e51b815260040161068a9190614056565b6000836005811115611f6c57634e487b7160e01b600052602160045260246000fd5b11611f7657600080fd5b6040518060600160405280826001600160e01b03168152602001846005811115611fb057634e487b7160e01b600052602160045260246000fd5b8152602001611fbe84612f76565b60ff1690528051600980546001600160e01b031981166001600160e01b0390931692831782556020840151919283916001600160e81b03191617600160e01b83600581111561201d57634e487b7160e01b600052602160045260246000fd5b0217905550604091820151815460ff909116600160e81b0260ff60e81b199091161790555130907f26369aeb03f92f843d03b2ab158aa7d61ff073ae0b9523458b923bdefdda53589061169990869086908690613ffe565b600a546001600160a01b038281169116141561112257600a80546001600160a01b03191690556000600b5550565b600080546119eb906001600160a01b03168484612cb4565b6120c433611951565b80611bc95750611bc9336111a2565b60408051606081018252600080825260208201819052908201819052600980546001600160f01b0319169055905130917f26369aeb03f92f843d03b2ab158aa7d61ff073ae0b9523458b923bdefdda535891612133919081908190613ffe565b60405180910390a2565b82612147576117de565b640200000000821415612187576001600160a01b0384166000908152600d60205260408120805485929061217c9084906141b3565b909155506117de9050565b6001600160a01b0384166000908152600e6020908152604091829020825160608101845290546001600160701b038082168352600160701b82041692820192909252600160e01b90910463ffffffff16918101829052906121ef5763ffffffff421660408201525b80516000906122089086906001600160701b03166141b3565b90506001600160701b0381111561221e57600080fd5b6001600160701b03811682528315612287576122438563ffffffff8087169061304c16565b82602001516001600160701b03160190506001600160701b038016811015612279576001600160701b0381166020830152612287565b6001600160701b0360208301525b506001600160a01b0385166000908152600e60209081526040918290208351815492850151939094015163ffffffff16600160e01b026001600160e01b036001600160701b03948516600160701b026001600160e01b03199094169490951693909317919091179290921617905550505050565b612306838383613141565b600281600281111561232857634e487b7160e01b600052602160045260246000fd5b14156123375761233783613186565b6001600160a01b0383166000908152600e6020526040902054600160e01b900463ffffffff16610e105750506001600160a01b03166000908152600e6020526040902080546001600160e01b0316600160e01b4263ffffffff1602179055565b600754604080518082019091526002815261393160f01b60208201529060ff16156111225760405162461bcd60e51b815260040161068a9190614056565b6000806123e28585613194565b90925090508115611dd3576123f8858484613588565b61240290826141b3565b9050826001600160a01b0316856001600160a01b03167f9310ccfcb8de723f578a9e4282ea9f521f05ae40dc08f3068dfad528a65ee3c78460405161244991815260200190565b60405180910390a3935093915050565b6001600160f01b038111156124a65760405162461bcd60e51b815260206004820152601360248201527265786365737369766520706f6f6c20696e666f60681b604482015260640161068a565b60006124b66001620100006142a7565b6001600160a01b038416600090815260036020526040902054169050806124ef5760405162461bcd60e51b815260040161068a906140a9565b6001600160a01b03909216600090815260036020526040902060109190911b919091179055565b60008161254257506005546001600160a01b0383166000908152600460205260409020549019166111cf565b6005546001600160a01b0384166000908152600460205260409020546002549119916001901b60001901841617169392505050565b6125b66040518060c0016040528060008152602001600081526020016000815260200160008152602001600063ffffffff168152602001606081525090565b6001600160a01b0384166000908152600e6020908152604080832081516060808201845291546001600160701b03808216808452600160701b8304909116958301869052600160e01b90910463ffffffff16938201849052608087019390935290850192909252835290845b801561264757600181161561263f578161263b816142d5565b9250505b60011c612622565b508067ffffffffffffffff81111561266f57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156126d657816020015b6126c36040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b81526020019060019003908161268d5790505b5060a0840152506000805b8515612b1557600186166126f457612afc565b60006126ff826135e1565b604051638abc37d360e01b81526001600160a01b038a8116600483015263ffffffff89166024830152919250600091829190841690638abc37d39060440160606040518083038186803b15801561275557600080fd5b505afa158015612769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278d9190613e16565b8960a0015188815181106127b157634e487b7160e01b600052603260045260246000fd5b60200260200101516060018163ffffffff1663ffffffff16815250819350829450505050808760a0015186815181106127fa57634e487b7160e01b600052603260045260246000fd5b60200260200101516020018181525050808760200181815161281c91906141b3565b90525060a087015180518491908790811061284757634e487b7160e01b600052603260045260246000fd5b6020026020010151604001906001600160a01b031690816001600160a01b031681525050818760a00151868151811061289057634e487b7160e01b600052603260045260246000fd5b602090810291909101015152600a546001600160a01b03848116911614156129b55760018760a0015186815181106128d857634e487b7160e01b600052603260045260246000fd5b602002602001015160a00190600181111561290357634e487b7160e01b600052602160045260246000fd5b9081600181111561292457634e487b7160e01b600052602160045260246000fd5b905250600c5460a08801518051600160a01b90920461ffff16918790811061295c57634e487b7160e01b600052603260045260246000fd5b60200260200101516080019063ffffffff16908163ffffffff168152505081600d60008c6001600160a01b03166001600160a01b03168152602001908152602001600020546129ab91906141b3565b6040880152612aeb565b60008760a0015186815181106129db57634e487b7160e01b600052603260045260246000fd5b602002602001015160a001906001811115612a0657634e487b7160e01b600052602160045260246000fd5b90816001811115612a2757634e487b7160e01b600052602160045260246000fd5b905250612a33836117e4565b8760a001518681518110612a5757634e487b7160e01b600052603260045260246000fd5b602090810291909101015163ffffffff9091166080909101528115612aeb578187600001818151612a8891906141b3565b90525060a08701518051612ad6919087908110612ab557634e487b7160e01b600052603260045260246000fd5b60200260200101516080015163ffffffff168361304c90919063ffffffff16565b87606001818151612ae791906141b3565b9052505b84612af5816142d5565b9550505050505b612b078160016141b3565b60019690961c9590506126e1565b506040830151600c54612b339190600160a01b900461ffff1661304c565b83606001818151612b4491906141b3565b9052506060830151604084015111612b7257604083015183518490612b6a9083906141b3565b905250612b8a565b606083015183518490612b869083906141b3565b9052505b50509392505050565b60055419166000808060015b848111612caa57808516612bbc5780612bb757612caa565b612c95565b60008060028460ff1681548110612be357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154604051630ca2103d60e01b8152600481018a90526001600160a01b0390911690630ca2103d906024016040805180830381600087803b158015612c3157600080fd5b505af1158015612c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c699190613d4a565b9150915080600014612c8657612c7f81876141b3565b955