UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

872 lines 66.9 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LendingPoolExtensionFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class LendingPoolExtensionFactory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(overrides) { return super.deploy(overrides || {}); } getDeployTransaction(overrides) { return super.getDeployTransaction(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.LendingPoolExtensionFactory = LendingPoolExtensionFactory; const _abi = [ { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "onBehalfOf", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowRateMode", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowRate", type: "uint256", }, { indexed: true, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "Borrow", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "onBehalfOf", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: true, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "Deposit", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "disabledFeatures", type: "uint16", }, ], name: "DisabledFeaturesUpdated", 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: true, internalType: "address", name: "target", type: "address", }, { indexed: true, internalType: "address", name: "initiator", type: "address", }, { indexed: true, internalType: "address", name: "asset", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "premium", type: "uint256", }, { indexed: false, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "FlashLoan", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "premium", type: "uint16", }, ], name: "FlashLoanPremiumUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "extension", type: "address", }, ], name: "LendingPoolExtensionUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "collateralAsset", type: "address", }, { indexed: true, internalType: "address", name: "debtAsset", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "debtToCover", type: "uint256", }, { indexed: false, internalType: "uint256", name: "liquidatedCollateralAmount", type: "uint256", }, { indexed: false, internalType: "address", name: "liquidator", type: "address", }, { indexed: false, internalType: "bool", name: "receiveDeposit", type: "bool", }, ], name: "LiquidationCall", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "RebalanceStableBorrowRate", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "repayer", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Repay", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "underlying", type: "address", }, { indexed: false, internalType: "uint256", name: "liquidityRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "stableBorrowRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "variableBorrowRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "liquidityIndex", type: "uint256", }, { indexed: false, internalType: "uint256", name: "variableBorrowIndex", type: "uint256", }, ], name: "ReserveDataUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "ReserveUsedAsCollateralDisabled", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "ReserveUsedAsCollateralEnabled", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "rateMode", type: "uint256", }, ], name: "Swap", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { 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: "Withdraw", type: "event", }, { inputs: [], name: "REVISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "interestRateMode", type: "uint256", }, { internalType: "uint256", name: "referral", type: "uint256", }, { internalType: "address", name: "onBehalfOf", type: "address", }, ], name: "borrow", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "interestRateMode", type: "uint256", }, { internalType: "uint16", name: "referral", type: "uint16", }, { internalType: "address", name: "onBehalfOf", type: "address", }, ], name: "borrow", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "receiver", type: "address", }, { internalType: "address[]", name: "assets", type: "address[]", }, { internalType: "uint256[]", name: "amounts", type: "uint256[]", }, { internalType: "uint256[]", name: "modes", type: "uint256[]", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "bytes", name: "params", type: "bytes", }, { internalType: "uint256", name: "referral", type: "uint256", }, ], name: "flashLoan", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "receiver", type: "address", }, { internalType: "address[]", name: "assets", type: "address[]", }, { internalType: "uint256[]", name: "amounts", type: "uint256[]", }, { internalType: "uint256[]", name: "modes", type: "uint256[]", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "bytes", name: "params", type: "bytes", }, { internalType: "uint16", name: "referral", type: "uint16", }, ], name: "flashLoan", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getDisabledFeatures", outputs: [ { internalType: "uint16", name: "disabledFeatures", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getLendingPoolExtension", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { components: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "depositTokenAddress", type: "address", }, { internalType: "address", name: "stableDebtAddress", type: "address", }, { internalType: "address", name: "variableDebtAddress", type: "address", }, { internalType: "address", name: "strategy", type: "address", }, { internalType: "bool", name: "externalStrategy", type: "bool", }, ], internalType: "struct DataTypes.InitReserveData", name: "data", type: "tuple", }, ], name: "initReserve", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "collateralAsset", type: "address", }, { internalType: "address", name: "debtAsset", type: "address", }, { internalType: "address", name: "user", type: "address", }, { internalType: "uint256", name: "debtToCover", type: "uint256", }, { internalType: "bool", name: "receiveDeposit", type: "bool", }, ], name: "liquidationCall", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "configuration", type: "uint256", }, ], name: "setConfiguration", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "disabledFeatures", type: "uint16", }, ], name: "setDisabledFeatures", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "premium", type: "uint16", }, ], name: "setFlashLoanPremium", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "extension", type: "address", }, ], name: "setLendingPoolExtension", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "val", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "strategy", type: "address", }, { internalType: "bool", name: "isExternal", type: "bool", }, ], name: "setReserveStrategy", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "receiver", type: "address", }, { internalType: "address[]", name: "assets", type: "address[]", }, { internalType: "uint256[]", name: "amounts", type: "uint256[]", }, { internalType: "uint256[]", name: "modes", type: "uint256[]", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "bytes", name: "params", type: "bytes", }, { internalType: "uint256", name: "referral", type: "uint256", }, ], name: "trustedFlashLoan", outputs: [], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x60806040526200001360016000196200002f565b60005560006001553480156200002857600080fd5b5062000053565b6000828210156200004e57634e487b7160e01b81526011600452602481fd5b500390565b61564280620000636000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c8063a77898d3116100a2578063b8d2927611610071578063b8d2927614610213578063b952c6ad14610226578063d34ac80314610239578063dde43cba1461024c578063fd367dc41461026257600080fd5b8063a77898d3146101a9578063ab9c4b5d146101d0578063afb83b53146101e3578063b187bd26146101f657600080fd5b8063532bd1d3116100de578063532bd1d31461015d5780637f9cb3be14610170578063a2b86e7b14610183578063a415bcad1461019657600080fd5b8062a718a91461010f5780630db2bb821461012457806316c38b3c14610137578063171b531c1461014a575b600080fd5b61012261011d366004614cf3565b61027d565b005b610122610132366004614d5a565b610aa5565b61012261014536600461504a565b610c0c565b61012261015836600461512c565b610c74565b61012261016b366004614e99565b610e68565b61012261017e366004615143565b610ea9565b610122610191366004615003565b610f72565b6101226101a4366004614fb5565b611057565b600b54640100000000900461ffff1660405161ffff90911681526020015b60405180910390f35b6101226101de366004614da4565b611104565b6101226101f1366004615143565b61113c565b600b54600160481b900460ff1660405190151581526020016101c7565b610122610221366004614f8a565b611196565b610122610234366004614e99565b6111c3565b610122610247366004614cbb565b61125e565b6102546112ed565b6040519081526020016101c7565b6007546040516001600160a01b0390911681526020016101c7565b6102856112fc565b600b546040805180820190915260028152611c1b60f11b6020820152906401000000009004600116156102d45760405162461bcd60e51b81526004016102cb9190615349565b60405180910390fd5b506001600160a01b038086166000908152600860209081526040808320888516845281842094881684526009909252909120909190610311614b52565b6040805160208082018352845482526006548351631f94a27560e31b815293516103aa948c946008949093600a936001600160a01b039091169263fca513a8926004808301939192829003018186803b15801561036d57600080fd5b505afa158015610381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a59190614cd7565b611341565b610140860152506103c19250899150859050611892565b60408301819052602083018290526101408301516103e69287928792879290916119a0565b6004848101546001600160a01b0390811661016084018190526040516364b2517960e11b8152918a169282019290925263c964a2f29060240160206040518083038186803b15801561043757600080fd5b505afa15801561044b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046f919061515d565b815260408101516020820151610493916113889161048d919061537c565b90611b00565b6060820181905286116104a657856104ac565b80606001515b6080820181905281516104c791869186918d918d9190611bfe565b6101208301819052610100830191909152608082015111156104ef5761012081015160808201525b846105bd576101608101516040516370a0823160e01b81526001600160a01b0391821660048201526000918b16906370a082319060240160206040518083038186803b15801561053e57600080fd5b505afa158015610552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610576919061515d565b905081610100015181101560405180604001604052806002815260200161343560f01b815250906105ba5760405162461bcd60e51b81526004016102cb9190615349565b50505b6105c78389611ede565b806080015181604001511061066357600683015460808201516001850154604051637a94c56560e11b81526001600160a01b038b811660048301526024820193909352600160801b9091046001600160801b0316604482015291169063f5298aca90606401600060405180830381600087803b15801561064657600080fd5b505af115801561065a573d6000803e3d6000fd5b50505050610783565b6040810151156106f757600683015460408281015160018601549151637a94c56560e11b81526001600160a01b038b811660048301526024820192909252600160801b9092046001600160801b031660448301529091169063f5298aca90606401600060405180830381600087803b1580156106de57600080fd5b505af11580156106f2573d6000803e3d6000fd5b505050505b6005830154604082015160808301516001600160a01b0390921691639dc29fac918a916107249190615522565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561076a57600080fd5b505af115801561077e573d6000803e3d6000fd5b505050505b600483015460808201516107a69185918b916001600160a01b0316906000611f27565b84156108cd5760006107b8858b611f47565b610160830151610100840151604051632cf33f4960e11b81526001600160a01b038c811660048301523360248301526044820192909252606481018490526000608482015292935016906359e67e929060a401602060405180830381600087803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085d9190615066565b156108c757336000908152600960205260409020600786015481546002600160a01b90920460011b6101fe169190911b17815560405133906001600160a01b038d16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3505b5061099e565b60006108d9858b612045565b6101608301516101008401519192506108f89187918d91600090611f27565b610160820151610100830151604051632cf33f4960e11b81526001600160a01b038b81166004830152336024830152604482019290925260648101849052600160848201529116906359e67e929060a401602060405180830381600087803b15801561096357600080fd5b505af1158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b9190615066565b50505b80516101008201511415610a0d57600784015482546002600160a01b90920460011b6101fe169190911b19168255866001600160a01b0316896001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b60048301546080820151610a33916001600160a01b038b81169233929190911690612076565b608080820151610100830151604080519283526020830191909152339082015286151560608201526001600160a01b03808a16928b821692918d16917fe413a321e8681d831f4dbccbca790d2952b56f977908e45be37335533e005286910160405180910390a4505050505050505050565b610aad6120d6565b610ab683612110565b816001600160a01b0316630297ec396040518163ffffffff1660e01b815260040160206040518083038186803b158015610aef57600080fd5b505afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190615066565b905080610b3357600080fd5b6001600160a01b038381166000908152600860205260409020600701541615610b8b576001600160a01b038316600090815260086020526040902054600160501b161515151581151514610b8657600080fd5b610bda565b6001600160a01b038316600090815260086020908152604091829020825191820190925290548152610bbd8183612169565b6001600160a01b0384166000908152600860205260409020905190555b506001600160a01b03918216600090815260086020526040902060070180546001600160a01b03191691909216179055565b610c14612179565b600b8054821515600160481b0269ff0000000000000000001990911617905560405133907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add8590610c6990841515815260200190565b60405180910390a250565b610c7c6120d6565b610c92610c8c6020830183614cbb565b3b151590565b6040518060400160405280600281526020016106e760f31b81525090610ccb5760405162461bcd60e51b81526004016102cb9190615349565b50610d008160086000610ce16020840184614cbb565b6001600160a01b031681526020810191909152604001600020906121af565b610d15610d106020830183614cbb565b612310565b610d2560c0820160a0830161504a565b15610e65576000610d3c60a0830160808401614cbb565b6001600160a01b0316634e89a711610d576020850185614cbb565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610d9657600080fd5b505afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614cd7565b90506001600160a01b038116610de357600080fd5b610df06020830183614cbb565b6001600160a01b0316816001600160a01b031614610e63576001600160a01b0381166000908152600c6020908152604090912090610e3090840184614cbb565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b505b50565b610e706112fc565b610e78612445565b610e9c8b8b8b8b8b8b8b8b8b8b8b600b60029054906101000a900461ffff16612517565b5050505050505050505050565b610eb16127bc565b610ebd600160646154d9565b610ec89060646154d9565b61ffff168161ffff1611158015610ee3575060008161ffff16115b604051806040016040528060028152602001611c1960f11b81525090610f1c5760405162461bcd60e51b81526004016102cb9190615349565b50600b805463ffff000019166201000061ffff8416908102919091179091556040519081527f876436c7d7760ab7ca2621348606d7dcfa4f214281312bdf36612e3d0ca56b40906020015b60405180910390a150565b610f7a6112fc565b6010610f85816127f4565b600b8054600160401b900460ff16906008610f9f8361559d565b825460ff91821661010093840a90810292021916179091556040805191820181526001600160a01b03808a168084523360208086019190915287831685850152606085018b9052608085018a905260009182526008905291909120600401541660a082015260c08101859052600160e082015261101c915061285c565b600b8054600160401b900460ff1690600861103683615565565b91906101000a81548160ff021916908360ff16021790555050505050505050565b61105f6112fc565b601061106a816127f4565b600b8054600160401b900460ff169060086110848361559d565b825460ff91821661010093840a90810292021916179091556040805191820181526001600160a01b03808a168084523360208086019190915287831685850152606085018b9052608085018a905260009182526008905291909120600401541660a082015261ffff851660c0820152600160e082015261101c915061285c565b61110c6112fc565b611114612445565b610e9c8b8b8b8b8b8b8b8b8b8b8b61ffff16600b60029054906101000a900461ffff16612517565b6111446127bc565b600b805465ffff00000000191664010000000061ffff8416908102919091179091556040519081527f9b9955eb05be2a3c2136e1e0856020d6dbd392f373bcf373da75c00bcaf78af490602001610f67565b61119e6120d6565b6111a782612110565b6001600160a01b03909116600090815260086020526040902055565b604080518082019091526002815261383360f01b6020820152600654611201916001600160a01b039091169033906804000000000004000090612dd3565b600b54604080518082019091526002815261383760f01b60208201529060ff600160381b9091048116106112485760405162461bcd60e51b81526004016102cb9190615349565b50610e9c8b8b8b8b8b8b8b8b8b8b8b6000612517565b6112666127bc565b60408051808201909152600281526106e760f31b6020820152813b61129e5760405162461bcd60e51b81526004016102cb9190615349565b50600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f0e030638e522ffbf19f7b85c12bb287a749bfacb4c42a960b393073eaa96de7390602001610f67565b60006112f7612dfd565b905090565b600b546040805180820190915260028152610d8d60f21b602082015290600160481b900460ff1615610e655760405162461bcd60e51b81526004016102cb9190615349565b600080600080600061135288511590565b1561136d575060009350839250829150819050600019611885565b61140a604051806102400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b031681526020016000151581526020016000151581525090565b88515b80156117e45760038116611420576117cd565b8151600090815260208a81526040808320546001600160a01b03166101e086018190528352908d9052902061145481612e35565b5060a0870181905260e08701929092525060c085019190915261147890600a615431565b6040848101919091526101e0840151905163b3596f0760e01b81526001600160a01b039182166004820152908a169063b3596f079060240160206040518083038186803b1580156114c857600080fd5b505afa1580156114dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611500919061515d565b602084015260e083015115801590611524575082518b5160019190911b1c60021615155b15611654578060040160009054906101000a90046001600160a01b03166001600160a01b031663c964a2f28e6040518263ffffffff1660e01b815260040161157b91906001600160a01b0391909116815260200190565b60206040518083038186803b15801561159357600080fd5b505afa1580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb919061515d565b60608401819052604084015160208501516000926115e891615503565b6115f291906153da565b9050808461012001818151611607919061537c565b90525060c08401516116199082615503565b846101600181815161162b919061537c565b90525060e084015161163d9082615503565b846101800181815161164f919061537c565b905250505b82518b51600191821b1c16156117cb5760068101546040516370a0823160e01b81526001600160a01b038f81166004830152909116906370a082319060240160206040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e3919061515d565b8160050160009054906101000a90046001600160a01b03166001600160a01b03166370a082318f6040518263ffffffff1660e01b815260040161173591906001600160a01b0391909116815260200190565b60206040518083038186803b15801561174d57600080fd5b505afa158015611761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611785919061515d565b61178f919061537c565b608084018190526040840151602085015190916117ab91615503565b6117b591906153da565b83610140018181516117c7919061537c565b9052505b505b81516117da90600161537c565b825260021c61140d565b506101208101511561182b57806101200151816101600181815161180891906153da565b905250610120810151610180820180516118239083906153da565b90525061183c565b600061018082018190526101608201525b611856816101200151826101400151836101800151612e81565b610100820181905261012082015161014083015161016084015161018090940151919850965091945090925090505b9550955095509550959050565b60058101546040516370a0823160e01b81526001600160a01b03848116600483015260009283929116906370a082319060240160206040518083038186803b1580156118dd57600080fd5b505afa1580156118f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611915919061515d565b60068401546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a082319060240160206040518083038186803b15801561195c57600080fd5b505afa158015611970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611994919061515d565b915091505b9250929050565b8554600160381b16151580156119bc57508454600160381b1615155b604051806040016040528060018152602001601960f91b815250906119f45760405162461bcd60e51b81526004016102cb9190615349565b506040805180820190915260028152611a1960f11b6020820152670de0b6b3a76400008410611a365760405162461bcd60e51b81526004016102cb9190615349565b50855460009060101c61ffff16118015611a775750600786015460408051602081019091528554908190526002600160a01b90920460011b6101fe161c1615155b60405180604001604052806002815260200161343360f01b81525090611ab05760405162461bcd60e51b81526004016102cb9190615349565b5081151580611abe57508015155b604051806040016040528060028152602001610d0d60f21b81525090611af75760405162461bcd60e51b81526004016102cb9190615349565b50505050505050565b6000821580611b0d575081155b15611b1a57506000611bf8565b816002611b29600160646154d9565b611b349060646154d9565b611b3e91906153b9565b611b4e9061ffff16600019615522565b611b5891906153da565b83111560405180604001604052806002815260200161068760f31b81525090611b945760405162461bcd60e51b81526004016102cb9190615349565b50611ba1600160646154d9565b611bac9060646154d9565b61ffff166002611bbe600160646154d9565b611bc99060646154d9565b611bd391906153b9565b61ffff16611be18486615503565b611beb919061537c565b611bf591906153da565b90505b92915050565b6000806000806000600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5457600080fd5b505afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c9190614cd7565b9050611cce6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405163b3596f0760e01b81526001600160a01b038b8116600483015283169063b3596f079060240160206040518083038186803b158015611d0f57600080fd5b505afa158015611d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d47919061515d565b6040828101919091525163b3596f0760e01b81526001600160a01b038a8116600483015283169063b3596f079060240160206040518083038186803b158015611d8f57600080fd5b505afa158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc7919061515d565b6060820152611dd58c612e35565b5060c0850152602084015250508a5460301c60ff1660a08201819052611dfc90600a615431565b8160400151611e0b9190615503565b611e3e82602001518360c00151600a611e249190615431565b8b8560600151611e349190615503565b61048d9190615503565b611e4891906153da565b60808201819052871015611ec257869350611ebb81602001518260c00151600a611e729190615431565b8360600151611e819190615503565b60a0840151611e9190600a615431565b878560400151611ea19190615503565b611eab9190615503565b611eb591906153da565b90612eaf565b9250611ecd565b806080015193508792505b50919a909950975050505050505050565b8154600160501b1615611f1957600382015464ffffffffff428116600160801b909204161015611f1457611f128282612f98565b505b610e63565b611f2282613159565b505050565b8454600160501b16611f4057611f40858585858561323d565b5050505050565b600382015460009064ffffffffff600160801b9091048116904216811415611f7e57505060018201546001600160801b0316611bf8565b8354600160501b161561201257600784015460405163643fa94b60e01b81526001600160a01b0385811660048301529091169063643fa94b9060240160206040518083038186803b158015611fd257600080fd5b505afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a919061515d565b915050611bf8565b6001840154600285015461203d916001600160801b0390811691612037911684613604565b90613646565b949350505050565b60006120578354600160501b16151590565b1561206d576120668383612f98565b9050611bf8565b611bf583613159565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526120d09085906136ed565b50505050565b604080518082019091526002815261323760f01b602082015260065461210e916001600160a01b039091169033906202000090612dd3565b565b6001600160a01b0381811660009081526008602090815260409182902060040154825180840190935260018352600d60fa1b91830191909152909116610e635760405162461bcd60e51b81526004016102cb9190615349565b610e6382600160501b198361386d565b6040805180820190915260028152611b9b60f11b602082015260065461210e916001600160a01b03909116903390600190612dd3565b6004820154604080518082019091526002815261199960f11b6020820152906001600160a01b0316156121f55760405162461bcd60e51b81526004016102cb9190615349565b507b033b2e3c9fd0803ce800000000000000033b2e3c9fd0803ce800000060018301556122286040820160208301614cbb565b6004830180546001600160a01b0319166001600160a01b039290921691909117905561225a6060820160408301614cbb565b6005830180546001600160a01b0319166001600160a01b039290921691909117905561228c6080820160608301614cbb565b6006830180546001600160a01b0319166001600160a01b03929092169190911790556122be60a0820160808301614cbb565b6007830180546001600160a01b0319166001600160a01b039290921691909117905560408051602081019091528254815261230961230260c0840160a0850161504a565b8290612169565b5190915550565b600b54604080518082019091526002815261363560f01b6020820152660100000000000090910460ff16906080821061235c5760405162461bcd60e51b81526004016102cb9190615349565b506001600160a01b038216600090815260086020526040812060070154600160a01b900460ff161515806123c5575060008052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3546001600160a01b038481169116145b905080611f22576001600160a01b0383166000818152600860209081526040808320600701805460ff60a01b1916600160a01b60ff891602179055858352600a909152902080546001600160a01b0319169091179055612426826001615394565b600b60066101000a81548160ff021916908360ff160217905550505050565b600b54604080518082019091526002808252611c1b60f11b602083015290916401000000009004161561248b5760405162461bcd60e51b81526004016102cb9190615349565b50600b54604080518082019091526002815261383760f01b602082015290600160381b900460ff16156124d15760405162461bcd60e51b81526004016102cb9190615349565b50600b54604080518082019091526002815261383560f01b602082015290600160401b900460ff1615610e655760405162461bcd60e51b81526004016102cb9190615349565b60408051808201909152600281526106e760f31b60208201528c3b61254f5760405162461bcd60e51b81526004016102cb9190615349565b50600b8054600160381b900460ff1690600761256a8361559d565b825460ff91821661010093840a9081029202191617909155604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e08101829052918201819052610120820181905261014082015290506126558c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061388592505050565b61ffff821661012082018190526001600160a01b0380881661010084015260e083018590528e16808352612690918e908e908e908e906138c3565b8160c0018190525080600001516001600160a01b031663920f5c848d8d8d8d8660c00151338c8c6040518963ffffffff1660e01b81526004016126da989796959493929190615282565b602060405180830381600087803b1580156126f457600080fd5b505af1158015612708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272c9190615066565b604051806040016040528060028152602001611b1b60f11b815250906127655760405162461bcd60e51b81526004016102cb9190615349565b5061277a818d8d8d8d8d8d8860c00151613aa5565b50600b8054600160381b900460ff1690600761279583615565565b91906101000a81548160ff021916908360ff16021790555050505050505050505050505050565b604080518082019091526002815261333360f01b602082015260065461210e916001600160a01b039091169033906202000290612dd3565b6127fc613d91565b600b546401000000009004811661ffff1615806128235750600b54600160381b900460ff16155b60405180604001604052806002815260200161383760f01b81525090610e635760405162461bcd60e51b81526004016102cb9190615349565b80516001600160a01b03908116600090815260086020908152604080832081860151851684526009835281842082518084018452858152808501959095526006548351631f94a27560e31b81529351929691959491169263fca513a89260048083019392829003018186803b1580156128d457600080fd5b505afa1580156128e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290c9190614cd7565b6001600160a01b03168152825460301c60ff1661292a90600a615431565b60608501518251865160405163b3596f0760e01b81526001600160a01b03918216600482015291169063b3596f079060240160206040518083038186803b15801561297457600080fd5b505afa158015612988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ac919061515d565b6129b69190615503565b6129c091906153da565b602082018190528451604086015160608701516080880151600b5486516129fd968a9594939092909161ffff909116906008908b90600a90613dd6565b8351612a0a908490611ede565b600080600186608001516002811115612a3357634e487b7160e01b600052602160045260246000fd5b6002811115612a5257634e487b7160e01b600052602160045260246000fd5b1415612b16576003850154600586015460208801516040808a015160608b0151915163b3f1c93d60e01b81526001600160a01b039384166004820152908316602482015260448101919091526001600160801b03909316606484018190529450169063b3f1c93d90608401602060405180830381600087803b158015612ad757600080fd5b505af1158015612aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0f9190615066565b9050612bd0565b6006850154602087015160408089015160608a015160018a0154925163b3f1c93d60e01b81526001600160a01b03948516600482015291841660248301526044820152600160801b9091046001600160801b0316606482015291169063b3f1c93d90608401602060405180830381600087803b158015612b9557600080fd5b505af1158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190615066565b90505b8015612bfb576007850154612bfb908590600160a01b900460ff168154600191821b9190911b179055565b612c2a86600001518760a0015160008960e00151612c1a576000612c20565b89606001515b8993929190611f27565b8560e0015115612cc85760a086015160208701516060880151604051634efecaa560e01b81526001600160a01b0392831660048201526024810191909152911690634efecaa590604401602060405180830381600087803b158015612c8e57600080fd5b505af1158015612ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc6919061515d565b505b8560c0015186604001516001600160a01b031687600001516001600160a01b03167f445cc7189b699aba312bd54ce4e386e25919e7992981f28a29855412132fce9c89602001518a606001518b6080015160016002811115612d3a57634e487b7160e01b600052602160045260246000fd5b8d608001516002811115612d5e57634e487b7160e01b600052602160045260246000fd5b6002811115612d7d57634e487b7160e01b600052602160045260246000fd5b14612d9c5760028c0154600160801b90046001600160801b0316612d9e565b885b604080516001600160a01b039095168552602085019390935291830152606082015260800160405180910390a4505050505050565b612dde848484614304565b8190611f405760405162461bcd60e51b81526004016102cb9190615349565b60405162461bcd60e51b815260206004820152600a602482015269494d504f535349424c4560b01b60448201526000906064016102cb565b6000806000806000612e6f866000015461ffff81811692601083901c821692602081901c831692603082901c60ff169260409290921c1690565b939a9299509097509550909350915050565b600082612e915750600019612ea8565b612ea583612e9f8685611b00565b9061431f565b90505b9392505050565b604080518082019091526002815261035360f41b602082015260009082612ee95760405162461bcd60e51b81526004016102cb9190615349565b50600182811c90612efb9060646154d9565b612f069060646154d9565b61ffff16612f1682600019615522565b612f2091906153da565b84111560405180604001604052806002815260200161068760f31b81525090612f5c5760405162461bcd60e51b81526004016102cb9190615349565b508281612f6b600160646154d9565b612f769060646154d9565b612f849061ffff1687615503565b612f8e919061537c565b61203d91906153da565b600782015460038301546040516307907b4f60e11b81526001600160a01b038481166004830152600160801b90920464ffffffffff16602482015260009283921690630f20f69e9060440160c060405180830381600087803b158015612ffd57600080fd5b505af1158015613011573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130359190615082565b9050428160a0015164ffffffffff16111561304f57600080fd5b600384015460a082015164ffffffffff908116600160801b9092041614156130a157600184015481516001600160801b039081169116141561309c57516001600160801b03169050611bf8565b6130f5565b600384015460a082015164ffffffffff600160801b90920482169116116130c757600080fd5b60a081015160038501805464ffffffffff909216600160801b0264ffffffffff60801b199092169190911790555b6020810151604082015160608301516001600160801b03908116600160801b90810292821692909217600288015560808401516003880180549183166001600160801b03199283161790559351811692160290911681176001850155905092915050565b6000808260060160009054906101000a90046001600160a01b03166001600160a01b031663b1bf962d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156131ac57600080fd5b505afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e4919061515d565b60018401546003850154919250600160801b8082046001600160801b03908116939216910464ffffffffff1660008061322088878688876143d9565b91509150613232888787858588614536565b509695505050505050565b61327d6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600586015460408051637b98f4df60e11b815281516001600160a01b039093169263f731e9be92600480840193919291829003018186803b1580156132c157600080fd5b505afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f99190615175565b60a0830152602080830191909152600187015460068801546040805163b1bf962d60e01b8152905161339c94600160801b9094046001600160801b0316936001600160a01b039093169263b1bf962d9260048082019391829003018186803b15801561336457600080fd5b505afa158015613378573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612037919061515d565b60c082018190526007870154602083015160a08401518954604080516329db497d60e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052606482018a9052608482019590955260a481019690965260c4860192909252811c61ffff1660e4850152519116916329db497d91610104808301926060929190829003018186803b15801561343557600080fd5b505afa158015613449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346d9190615198565b60808401526060830152604080830182905280518082019091526002815261353360f01b6020820152906001600160801b0310156134be5760405162461bcd60e51b81526004016102cb9190615349565b506060810151604080518082019091526002815261353560f01b6020820152906001600160801b0310156135055760405162461bcd60e51b81526004016102cb9190615349565b5060808101516040805180820190915260028152610d4d60f21b6020820152906001600160801b03101561354c5760405162461bcd60e51b81526004016102cb9190615349565b5060408181015160608084015160038a01805460016001