UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,020 lines 58.8 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.RewardedTokenLockerFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class RewardedTokenLockerFactory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(controller, initialRate, baselinePercentage, underlying, overrides) { return super.deploy(controller, initialRate, baselinePercentage, underlying, overrides || {}); } getDeployTransaction(controller, initialRate, baselinePercentage, underlying, overrides) { return super.getDeployTransaction(controller, initialRate, baselinePercentage, underlying, 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.RewardedTokenLockerFactory = RewardedTokenLockerFactory; const _abi = [ { inputs: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "uint256", name: "initialRate", type: "uint256", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, { internalType: "address", name: "underlying", type: "address", }, ], stateMutability: "nonpayable", type: "constructor", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "", type: "uint16", }, ], name: "BaselinePercentageUpdated", 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: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "underlyingAmountAdded", type: "uint256", }, { indexed: false, internalType: "uint256", name: "underlyingAmountTotal", type: "uint256", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: true, internalType: "uint32", name: "expiry", type: "uint32", }, { indexed: true, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "Locked", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, { indexed: false, internalType: "address", name: "token", type: "address", }, ], name: "ProviderAdded", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, ], name: "ProviderRemoved", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "rate", type: "uint256", }, ], name: "RateUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "Redeemed", 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: "uint256", name: "error", type: "uint256", }, ], name: "RewardAutolockFailed", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "account", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "enum AutolockMode", name: "mode", type: "uint8", }, ], name: "RewardAutolocked", type: "event", }, { inputs: [], name: "UNDERLYING_ASSET_ADDRESS", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], name: "addRewardProvider", outputs: [], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "bool", name: "allow", type: "bool", }, ], name: "allowAdd", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], name: "allowance", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "enum AutolockMode", name: "mode", type: "uint8", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, { internalType: "uint224", name: "param", type: "uint224", }, ], name: "applyAutolock", outputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "bool", name: "stop", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "approve", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "attachedToRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "balanceOf", outputs: [ { internalType: "uint256", name: "stakeAmount", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "balanceOfUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "balanceOfUnderlyingAndExpiry", outputs: [ { internalType: "uint256", name: "underlying", type: "uint256", }, { internalType: "uint32", name: "availableSince", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint32", name: "at", type: "uint32", }, ], name: "calcRewardFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "claimRewardFor", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "", type: "uint32", }, { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint256", name: "baseAmount", type: "uint256", }, { internalType: "uint256", name: "limit", type: "uint256", }, { internalType: "uint16", name: "minPct", type: "uint16", }, ], name: "claimRewardWithLimitFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "bool", name: "keepPull", type: "bool", }, { internalType: "uint256", name: "newLimit", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "lockedAmount", type: "uint256", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, ], name: "convertLockedToUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, { internalType: "uint32", name: "lockDuration", type: "uint32", }, ], name: "convertUnderlyingToLocked", outputs: [ { internalType: "uint256", name: "lockedAmount", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "detachedFromRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getBaselinePercentage", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getOwner", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getPoolName", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRewardController", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isRedeemable", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, { internalType: "uint32", name: "duration", type: "uint32", }, { internalType: "uint256", name: "referral", type: "uint256", }, ], name: "lock", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "lockAdd", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint32", name: "duration", type: "uint32", }, ], name: "lockExtend", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, ], name: "receiveBoostExcess", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, ], name: "redeem", outputs: [ { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "removeRewardProvider", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "factor", type: "uint16", }, ], name: "setBaselinePercentage", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "rate", type: "uint256", }, ], name: "setBoostRate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "paused", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "totalOfUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalSupply", outputs: [ { internalType: "uint256", name: "totalSupply_", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "transfer", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "transferFrom", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "scanLimit", type: "uint256", }, ], name: "update", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "baseline", type: "uint256", }, ], name: "updateBaseline", outputs: [ { internalType: "bool", name: "hasBaseline", type: "bool", }, { internalType: "uint256", name: "appliedRate", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x60806040523480156200001157600080fd5b506040516200428f3803806200428f833981016040819052620000349162000918565b600080546001600160a01b0319166001600160a01b03831617905583838362000075838383604051806020016040528060008152506200008260201b60201c565b5050505050505062000b1b565b600880546001600160a01b0319166001600160a01b03861617905561ffff821615620000b357620000b382620000cb565b8215620000c557620000c583620001b0565b50505050565b620000d5620001f6565b61ffff8116620000f157620000eb6000620001b0565b62000159565b620000ff60016064620009fb565b6200010c906064620009fb565b61ffff168161ffff161115620001595760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b6008805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b620001ba620001f6565b620001c58162000252565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b90602001620001a5565b6008546001600160a01b0316620002505760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000150565b565b6200025f6000806200026e565b506200026b81620003a3565b50565b60006200027f62093a8042620009be565b6005549091506c01000000000000000000000000900460ff1615620002f4578215620002ee5760405162461bcd60e51b815260206004820152601e60248201527f72652d656e74727920746f207374616b65206f7220746f2072656465656d0000604482015260640162000150565b6200039d565b6005544263ffffffff908116680100000000000000009092041614156200031b576200039d565b600080806200032b8486620003af565b9194509250905063ffffffff82161562000376576005805460ff60601b19166c0100000000000000000000000017905562000368838383620004b8565b6005805460ff60601b191690555b50506005805463ffffffff60401b1916680100000000000000004263ffffffff1602179055505b92915050565b6200026b8142620006b0565b60055463ffffffff9081169060009081908516831180620003d4575063ffffffff8316155b15620003e657506000905080620004b1565b50600554640100000000900463ffffffff1680620004425760055460ff90620004269062093a809068010000000000000000900463ffffffff16620009d5565b62000432919062000993565b6200043f90600162000993565b90505b600084118015620004635750836200046163ffffffff85168262000978565b115b156200048f576200047b63ffffffff84168562000978565b93508063ffffffff168410156200048f5750825b8463ffffffff168163ffffffff161115620004ad57849150620004b1565b8091505b9250925092565b63ffffffff83166000908152600460209081526040918290208251808401909352546001600160801b038082168452600160801b90910416908201525b8263ffffffff168463ffffffff16116200064b57620005226200051c62093a808662000a4a565b6200074f565b80602001516001600160801b03166002600082825462000543919062000a70565b9250508190555080600001516001600160801b0316600160008282546200056b919062000a70565b9091555060009050846200057f8162000ab2565b9550505b8263ffffffff168563ffffffff1611620006195763ffffffff85166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b9092041691830191909152909250151580620005f55750600082602001516001600160801b0316115b15620006045750600162000619565b84620006108162000ab2565b95505062000583565b8015620006275750620004f5565b60055463ffffffff640100000000909104811690861611156200064957600094505b505b6005805463ffffffff191663ffffffff8616908117909155158062000683575060055463ffffffff6401000000009091048116908516115b15620000c5576005805463ffffffff86166401000000000263ffffffff60201b1990911617905550505050565b600b546001600160e01b0316821415620006c8575050565b6001600160e01b03821115620006dd57600080fd5b600b5463ffffffff600160e01b909104811690821681146200074a57600b546001600160e01b0390811690620007169084906200075a16565b600b80546001600160e01b0319166001600160e01b0386811691909117909155620000c5908281169084908690620007d916565b505050565b6200026b816200088a565b600b5463ffffffff600160e01b90910481169082161015620007b45760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000150565b600b805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b8163ffffffff168163ffffffff161415620007f357505050565b6000620007ff620008fb565b9050806200080d5750505050565b620008176200090c565b62000823908562000978565b935062000840816ec097ce7bc90715b34b9f1000000000620009be565b6200084c908562000a28565b93506200085a838362000a8a565b6200086c9063ffffffff168562000a28565b600c60008282546200087f919062000978565b909155505050505050565b600080620008b0600b546001600160e01b03811691600160e01b90910463ffffffff1690565b9092509050620008c0836200075a565b620008cd828285620007d9565b600c54620008dd90600162000978565b63ffffffff9093166000908152600d60205260409020929092555050565b60006200090760015490565b905090565b60006200090760025490565b600080600080608085870312156200092e578384fd5b84516200093b8162000b05565b60208601516040870151919550935061ffff811681146200095a578283fd5b60608601519092506200096d8162000b05565b939692955090935050565b600082198211156200098e576200098e62000ad9565b500190565b600063ffffffff808316818516808303821115620009b557620009b562000ad9565b01949350505050565b600082620009d057620009d062000aef565b500490565b600063ffffffff80841680620009ef57620009ef62000aef565b92169190910492915050565b600061ffff8083168185168183048111821515161562000a1f5762000a1f62000ad9565b02949350505050565b600081600019048311821515161562000a455762000a4562000ad9565b500290565b600063ffffffff8083168185168183048111821515161562000a1f5762000a1f62000ad9565b60008282101562000a855762000a8562000ad9565b500390565b600063ffffffff8381169083168181101562000aaa5762000aaa62000ad9565b039392505050565b600063ffffffff8083168181141562000acf5762000acf62000ad9565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146200026b57600080fd5b6137648062000b2b6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063893d20e811610130578063b6fe2e9c116100b8578063dd62ed3e1161007c578063dd62ed3e14610571578063e1ad46eb14610587578063f078b8071461059a578063f459aa46146105d4578063ff85a2ba146105e757600080fd5b8063b6fe2e9c146104fc578063b9d121f71461050f578063c00ba29e1461053c578063d29939831461054f578063d9e5103f1461056957600080fd5b8063a8346a8c116100ff578063a8346a8c14610488578063a9059cbb14610252578063af920582146104c6578063b16a19de146104d9578063b187bd26146104ea57600080fd5b8063893d20e8146104105780638abc37d31461043057806392efda791461046457806395a2251f1461047557600080fd5b806332ca11e9116101be57806358f107e51161018257806358f107e514610389578063679aefce146103cf5780636f499047146103d757806370a08231146103ea57806382ab890a146103fd57600080fd5b806332ca11e9146103085780633af9e6691461031b5780634800df8c1461034d5780634d25c4f11461036057806355f4f1971461038157600080fd5b806316c38b3c1161020557806316c38b3c146102b457806318160ddd146102c75780631bd5ad36146102cf5780631dd0f483146102e257806323b872dd146102f557600080fd5b80630746363d14610237578063095ea7b3146102525780630a5e1019146102755780630ca2103d1461028a575b600080fd5b61023f61061c565b6040519081526020015b60405180910390f35b610265610260366004613258565b610631565b6040519015158152602001610249565b61028861028336600461340f565b610645565b005b61029d6102983660046133df565b610667565b604080519215158352602083019190915201610249565b6102886102c2366004613371565b6106c4565b61023f610736565b6102886102dd3660046133df565b6107c4565b6102886102f0366004613197565b6107d8565b6102656103033660046131eb565b6107e0565b61023f610316366004613258565b6107f4565b61023f610329366004613197565b6001600160a01b03166000908152600660205260409020546001600160c01b031690565b61028861035b3660046133c5565b6108d0565b600854600160a01b900461ffff1660405161ffff9091168152602001610249565b61023f6108e1565b61028861039736600461322b565b3360009081526007602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b61023f6108f0565b61023f6103e536600461340f565b6108fa565b61023f6103f8366004613197565b610981565b61028861040b3660046133df565b6109c5565b6104186109d0565b6040516001600160a01b039091168152602001610249565b61044361043e36600461333d565b6109da565b60408051938452602084019290925263ffffffff1690820152606001610249565b6008546001600160a01b0316610418565b61023f610483366004613197565b610a13565b61049b6104963660046132f6565b610a2e565b6040805194855263ffffffff9093166020850152901515918301919091526060820152608001610249565b600854600160b01b900460ff1615610265565b6000546001600160a01b0316610418565b600854600160b01b900460ff16610265565b61028861050a3660046131b3565b610a5c565b61052261051d366004613197565b610a9a565b6040805192835263ffffffff909116602083015201610249565b61023f61054a366004613465565b610b03565b6040805160208101825260008152905161024991906134fb565b61023f610b71565b61023f61057f3660046131b3565b600092915050565b61023f610595366004613431565b610bed565b6105ad6105a8366004613283565b610c58565b604080516001600160a01b0390941684526020840192909252151590820152606001610249565b61023f6105e236600461340f565b610e4d565b6105fa6105f5366004613197565b610ebc565b6040805193845263ffffffff9092166020840152151590820152606001610249565b6000610626610edf565b50600090565b905090565b600061063b610f26565b5060005b92915050565b61064d610edf565b610658600080610f5e565b50610663828261106f565b5050565b600080610672610edf565b600854600160a01b900461ffff1661069757600061068e61128b565b91509150915091565b6008546106b0908490600160a01b900461ffff1661129f565b90506106bb8161139b565b60019150915091565b6106cc6113e3565b60085460ff600160b01b909104161515811515146106fc576008805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b6000808061075161074a62093a804261358f565b6000611413565b509150915060015492508063ffffffff166000141561076f57505090565b8063ffffffff168263ffffffff16116107bf5763ffffffff82166000908152600460205260409020546107ab906001600160801b031684613626565b9250816107b7816136a5565b92505061076f565b505090565b6107cc610edf565b6107d58161139b565b50565b6107d5611502565b60006107ea610f26565b5060009392505050565b600080821161083c5760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260076020908152604080832033845290915290205460ff166108a85760405162461bcd60e51b815260206004820152601660248201527510511117d513d7d313d0d2d7d49154d5149250d5115160521b6044820152606401610833565b6000806108bb3386866000806001611544565b915091506108c881611b98565b509392505050565b6108d8610edf565b6107d581611d17565b60006108eb610edf565b610626565b600061062c61128b565b600063077f880063ffffffff831611156109165763077f880091505b62093a8061092762049d4084613546565b61093191906135a3565b915061094062093a8083613603565b915063077f880063ffffffff8316101561097a5763ffffffff821661096963077f8800856135e4565b610973919061358f565b905061063f565b5090919050565b60008061098d83611de5565b91505063ffffffff81164263ffffffff16106109ac5750600092915050565b6109b583611e25565b6001600160e01b03169392505050565b610663600082610f5e565b600061062c611ea1565b60008060004263ffffffff168463ffffffff1610156109f857600080fd5b610a028585611f1e565b9093506000925090505b9250925092565b6000610a1d611f76565b610a2682611fbb565b90505b919050565b600080600080610a3c610edf565b610a4888888888611fc7565b93509350935093505b945094509450949050565b610a64611502565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b6044820152606401610833565b6001600160a01b0381166000908152600660205260408120546001600160c01b03169081610acd57506000928392509050565b6001600160a01b038316600090815260066020526040902054829061068e9062093a8090600160e01b900463ffffffff16613603565b6000808263ffffffff1611610b4a5760405162461bcd60e51b815260206004820152600d60248201526c2d22a927afa22aa920aa24a7a760991b6044820152606401610833565b600080610b5d3333600087600080611544565b91509150610b6a81611b98565b5092915050565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610bb557600080fd5b505afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062c91906133f7565b6000808411610c305760405162461bcd60e51b815260206004820152600f60248201526e5a45524f5f554e4445524c59494e4760881b6044820152606401610833565b600080610c4233338888886001611544565b91509150610c4f81611b98565b50949350505050565b6000806000610c65610edf565b60006002876005811115610c8957634e487b7160e01b600052602160045260246000fd5b1415610c9457610dbc565b6004876005811115610cb657634e487b7160e01b600052602160045260246000fd5b1415610cda57846001600160e01b03164210610cd55760019150600097505b610dbc565b6003876005811115610cfc57634e487b7160e01b600052602160045260246000fd5b1415610d4757610d3d88610d2e8b6001600160a01b03166000908152600660205260409020546001600160c01b031690565b876001600160e01b03166120c8565b9098509150610dbc565b6005876005811115610d6957634e487b7160e01b600052602160045260246000fd5b1415610dab5763ffffffff8616610d87576001915060009750610dbc565b610da488610d948b610981565b876001600160e01b03168961210d565b9750610dbc565b600080600093509350935050610e42565b87610dce576000809350935050610e42565b610ddd308a8a89600080611544565b9150508015610e3a57886001600160a01b03167f571b9a025379810f4e55817c06336ccae0fe94a8c57f704f30804f110aca48858883604051610e219291906134dd565b60405180910390a2600080600193509350935050610e42565b308893509350505b955095509592505050565b600063077f880063ffffffff83161115610e695763077f880091505b62093a80610e7a62049d4084613546565b610e8491906135a3565b9150610e9362093a8083613603565b915063077f880063ffffffff8316101561097a5763077f880061096963ffffffff8416856135e4565b6000806000610ec9610edf565b610ed28461214d565b9250925092509193909250565b6008546001600160a01b0316331460405180604001604052806002815260200161039360f41b815250906107d55760405162461bcd60e51b815260040161083391906134fb565b60405162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b6044820152606401610833565b6000610f6d62093a804261358f565b600554909150600160601b900460ff1615610fd5578215610fd05760405162461bcd60e51b815260206004820152601e60248201527f72652d656e74727920746f207374616b65206f7220746f2072656465656d00006044820152606401610833565b61063f565b6005544263ffffffff908116600160401b909204161415610ff55761063f565b60008060006110048486611413565b9194509250905063ffffffff821615611043576005805460ff60601b1916600160601b179055611035838383612170565b6005805460ff60601b191690555b5050600580546bffffffff00000000000000001916600160401b4263ffffffff16021790555092915050565b42600063ffffffff8316158061109157508163ffffffff168363ffffffff1610155b1561109e575060016110c3565b6110a8838361363d565b905063077f880063ffffffff821611156110c3575063077f88005b600062093a806001816110d68686613546565b6110e09190613546565b6110ea919061363d565b6110f491906135a3565b6110ff906001613546565b905061110e62093a8082613603565b915061111a838361363d565b91506003548561112a919061352e565b9450600061113e63ffffffff84168761358f565b905061115063ffffffff8416826135e4565b61115a9087613626565b6003558061116a57505050505050565b6111738461234e565b8060026000828254611185919061352e565b909155505063ffffffff82166000908152600460205260409020546111ba90600160801b90046001600160801b03168261352e565b90506001600160801b038111156111d057600080fd5b63ffffffff808316600081815260046020526040902080546001600160801b03808616600160801b0291161790556005549091161180611216575060055463ffffffff16155b15611231576005805463ffffffff191663ffffffff84161790555b60055463ffffffff808416600160201b90920416108061125e5750600554600160201b900463ffffffff16155b15611283576005805467ffffffff000000001916600160201b63ffffffff8516021790555b505050505050565b600061062c600b546001600160e01b031690565b60008215806112ac575081155b156112b95750600061063f565b8160026112c8600160646135ba565b6112d39060646135ba565b6112dd919061356e565b6112ed9061ffff16600019613626565b6112f7919061358f565b83111560405180604001604052806002815260200161068760f31b815250906113335760405162461bcd60e51b815260040161083391906134fb565b50611340600160646135ba565b61134b9060646135ba565b61ffff16600261135d600160646135ba565b6113689060646135ba565b611372919061356e565b61ffff1661138084866135e4565b61138a919061352e565b611394919061358f565b9392505050565b6113a3612357565b6113ac816123a8565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020015b60405180910390a150565b6114116113ee611ea1565b336001604051806040016040528060028152602001611b9b60f11b8152506123bd565b565b60055463ffffffff9081169060009081908516831180611437575063ffffffff8316155b1561144757506000905080610a0c565b50600554600160201b900463ffffffff16806114965760055460ff9061147e9062093a8090600160401b900463ffffffff166135a3565b6114889190613546565b611493906001613546565b90505b6000841180156114b45750836114b263ffffffff85168261352e565b115b156114dc576114c963ffffffff84168561352e565b93508063ffffffff168410156114dc5750825b8463ffffffff168163ffffffff1611156114f857849150610a0c565b8091509250925092565b61150b336123ee565b60405180604001604052806002815260200161383160f01b815250906107d55760405162461bcd60e51b815260040161083391906134fb565b6000806001600160a01b0388166115895760405162461bcd60e51b81526020600482015260096024820152685a45524f5f46524f4d60b81b6044820152606401610833565b6001600160a01b0387166115c95760405162461bcd60e51b81526020600482015260076024820152665a45524f5f544f60c81b6044820152606401610833565b60006115d760016000610f5e565b90506115e24261234e565b6001600160a01b0388166000908152600660209081526040808320815160608101835290546001600160c01b03811680835263ffffffff600160c01b8304811695840195909552600160e01b90910490931691810191909152919089018981108061165357506001600160c01b0381115b1561166957600060039550955050505050611b8d565b8061167f57600060019550955050505050611b8d565b6001600160c01b03168252600062093a8063ffffffff8a1610156116d35762093a8060016116ad824261352e565b6116b79190613626565b6116c191906135a3565b6116cc906001613546565b9050611702565b62093a8062049d406116eb63ffffffff8c164261352e565b6116f5919061352e565b6116ff91906135a3565b90505b61170d60ff85613546565b63ffffffff168163ffffffff16111561173157600060029550955050505050611b8d565b8363ffffffff16836040015163ffffffff161115611798576000836020015163ffffffff161161176057600080fd5b6117698b611e25565b6001600160e01b031691508063ffffffff16836040015163ffffffff161115611793575060408201515b6117c1565b63ffffffff89166117b457600060019550955050505050611b8d565b63ffffffff421660208401525b602083015160009063ffffffff166117dc62093a8084613603565b63ffffffff166117ec9190613626565b905063077f880081101561182757835163077f8800906118169083906001600160c01b03166135e4565b611820919061358f565b9650611835565b83516001600160c01b031696505b5063ffffffff81166000908152600460205260409020546001600160801b031686018681108061186b57506001600160801b0381115b156118825760006004965096505050505050611b8d565b821561192b578163ffffffff16846040015163ffffffff1614156118b1576118aa8382613626565b9050611913565b60408085015163ffffffff166000908152600460205220546118dd9084906001600160801b0316613626565b60408581015163ffffffff16600090815260046020522080546001600160801b0319166001600160801b03929092169190911790555b82600160008282546119259190613626565b90915550505b8463ffffffff16846040015163ffffffff16116119635761195e8c62093a8086604001516119599190613603565b612483565b600092505b63ffffffff8216604085810182905260009182526004602052812080546001600160801b0319166001600160801b038416179055600180548992906119a990849061352e565b90915550505050604082015160055463ffffffff918216911611806119d4575060055463ffffffff16155b156119f85760408201516005805463ffffffff191663ffffffff9092169190911790555b604082015160055463ffffffff918216600160201b9091049091161080611a2c5750600554600160201b900463ffffffff16155b15611a5c5760408201516005805463ffffffff909216600160201b0267ffffffff00000000199092169190911790555b848114611a6d57611a6d8a866124b7565b6001600160a01b038a166000908152600660209081526040918290208451815492860151938601516001600160c01b039091166001600160e01b031990931692909217600160c01b63ffffffff94851602176001600160e01b0316600160e01b93909216929092021790558515611af657600054611af6906001600160a01b03168c308c6124e1565b8662093a808360400151611b0a9190613603565b63ffffffff168b6001600160a01b03167f4592e698fd320f5fbd57e2e644656600e0f491140171015537b782e83bcbe1f88e8d87600001518b604051611b7d94939291906001600160a01b0394909416845260208401929092526001600160c01b03166040830152606082015260800190565b60405180910390a4506000925050505b965096945050505050565b6004811415611be25760405162461bcd60e51b81526020600482015260166024820152754c4f434b5f4552525f4c4f434b5f4f564552464c4f5760501b6044820152606401610833565b6003811415611c335760405162461bcd60e51b815260206004820152601c60248201527f4c4f434b5f4552525f554e4445524c59494e475f4f564552464c4f57000000006044820152606401610833565b6002811415611c845760405162461bcd60e51b815260206004820152601e60248201527f4c4f434b5f4552525f4455524154494f4e5f49535f544f4f5f4c4152474500006044820152606401610833565b6001811415611cc95760405162461bcd60e51b81526020600482015260116024820152701393d512125391d7d254d7d313d0d2d151607a1b6044820152606401610833565b80156107d55760405162461bcd60e51b815260206004820152601960248201527f554e4b4e4f574e5f5245434f56455241424c455f4552524f52000000000000006044820152606401610833565b611d1f612357565b61ffff8116611d3757611d32600061139b565b611d95565b611d43600160646135ba565b611d4e9060646135ba565b61ffff168161ffff161115611d955760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b6044820152606401610833565b6008805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020016113d8565b6001600160a01b038116600090815260066020526040812054819063ffffffff600160c01b820481169161068e9162093a8091600160e01b900416613603565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03851681526009835283812084519283018552546001600160c01b038116835263ffffffff600160c01b8204811694840194909452600160e01b90049092169281019290925290516001600160c01b031692915050565b60085460408051630b6b5afb60e11b815290516000926001600160a01b0316916316d6b5f6916004808301926020929190829003018186803b158015611ee657600080fd5b505afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062c91906133a9565b6000806000611f2c85611de5565b91505063ffffffff8116611f47576000809250925050611f6f565b8063ffffffff168463ffffffff161115611f5f578093505b611f69858561254c565b92509250505b9250929050565b600854604080518082019091526002815261393160f01b602082015290600160b01b900460ff16156107d55760405162461bcd60e51b815260040161083391906134fb565b6000610a2633836125f7565b600080600080611fd960016000610f5e565b506000611fe589611de5565b91505063ffffffff811661200757600080600080945094509450945050610a51565b4263ffffffff808316908216101561202f576120238a8261273d565b9197509550935061204e565b6120398a8361273d565b5090965094506120488a612830565b50600093505b612058898761352e565b955087861161206c5750869150610a519050565b61ffff8716156120a257612084868861ffff1661129f565b61208e908961352e565b97508786116120a25750869150610a519050565b6120b56120af8988613626565b8661106f565b5086945084915050945094509450949050565b6000808284106120de5750600090506001612105565b6120e88484613626565b9250828511156120fd57508190506001612105565b508390508181145b935093915050565b600082841061211e57506000612145565b61213161212b8585613626565b836108fa565b925082851115612142575081612145565b50835b949350505050565b60008060006121628460006000196000611fc7565b509196909550909350915050565b63ffffffff83166000908152600460209081526040918290208251808401909352546001600160801b038082168452600160801b90910416908201525b8263ffffffff168463ffffffff16116122ed576121d56121d062093a8086613603565b6128ad565b80602001516001600160801b0316600260008282546121f49190613626565b9250508190555080600001516001600160801b03166001600082825461221a9190613626565b90915550600090508461222c816136a5565b9550505b8263ffffffff168563ffffffff16116122bf5763ffffffff85166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b90920416918301919091529092501515806122a05750600082602001516001600160801b0316115b156122ad575060016122bf565b846122b7816136a5565b955050612230565b80156122cb57506121ad565b60055463ffffffff600160201b909104811690861611156122eb57600094505b505b6005805463ffffffff191663ffffffff86169081179091551580612323575060055463ffffffff600160201b9091048116908516115b15612348576005805467ffffffff000000001916600160201b63ffffffff8716021790555b50505050565b6107d5816128b6565b6008546001600160a01b03166114115760405162461bcd60e51b815260206004820152601660248201527518dbdb9d1c9bdb1b195c881a5cc81c995c5d5a5c995960521b6044820152606401610833565b6123b3600080610f5e565b506107d5816128f1565b6123c88484846128fb565b81906123e75760405162461bcd60e51b815260040161083391906134fb565b5050505050565b6008546000906001600160a01b031615801590610a26575060085460405163ce91a05960e01b81526001600160a01b0384811660048301529091169063ce91a0599060240160206040518083038186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a26919061338d565b600080612490848461273d565b509150915061249e84612830565b50816124aa5750505050565b6123488483836000612916565b60008060006124cf85856001600160e01b0316612984565b9250925092506123e785848484612916565b6040516001600160a01b03808516602483015283166044820152606481018290526123489085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a46565b6001600160a01b03821660009081526009602052604081205481906001600160c01b031661257f57506000905080611f6f565b6001600160a01b0384166000818152600960209081526040808320815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811683860152600160e01b9091041681830152938352600a909152812054909182916125e9919087612bc6565b909890975095505050505050565b60008061260660016000610f5e565b6001600160a01b038516600090815260066020908152604091829020825160608101845290546001600160c01b03811680835263ffffffff600160c01b8304811694840194909452600160e01b909104909216928101