UNPKG

@rsksmart/rif-marketplace-storage

Version:
747 lines 189 kB
{ "contractName": "TestStorageManager", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "agreementReference", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "AgreementFundsDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "agreementReference", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "AgreementFundsPayout", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "agreementReference", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "AgreementFundsWithdrawn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "agreementReference", "type": "bytes32" } ], "name": "AgreementStopped", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "period", "type": "uint64" }, { "indexed": false, "internalType": "uint128", "name": "price", "type": "uint128" } ], "name": "BillingPlanSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "bytes32[]", "name": "message", "type": "bytes32[]" } ], "name": "MessageEmitted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32[]", "name": "dataReference", "type": "bytes32[]" }, { "indexed": true, "internalType": "address", "name": "agreementCreator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "size", "type": "uint64" }, { "indexed": false, "internalType": "uint64", "name": "billingPeriod", "type": "uint64" }, { "indexed": false, "internalType": "uint128", "name": "billingPrice", "type": "uint128" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "availableFunds", "type": "uint256" } ], "name": "NewAgreement", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "capacity", "type": "uint64" } ], "name": "TotalCapacitySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32[]", "name": "dataReference", "type": "bytes32[]" }, { "internalType": "address", "name": "provider", "type": "address" } ], "name": "depositFunds", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "message", "type": "bytes32[]" } ], "name": "emitMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "dataReference", "type": "bytes32[]" }, { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "getAgreementReference", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "storer", "type": "address" } ], "name": "hasUtilizedCapacity", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isWhitelistedProvider", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isWhitelistedToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "dataReference", "type": "bytes32[]" }, { "internalType": "address", "name": "provider", "type": "address" }, { "internalType": "uint64", "name": "size", "type": "uint64" }, { "internalType": "uint64", "name": "billingPeriod", "type": "uint64" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32[][]", "name": "dataReferencesOfAgreementToPayOut", "type": "bytes32[][]" }, { "internalType": "address[]", "name": "creatorsOfAgreementToPayOut", "type": "address[]" }, { "internalType": "address", "name": "tokenOfAgreementsToPayOut", "type": "address" } ], "name": "newAgreement", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "offerRegistry", "outputs": [ { "internalType": "uint64", "name": "utilizedCapacity", "type": "uint64" }, { "internalType": "uint64", "name": "totalCapacity", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[][]", "name": "dataReferencesOfAgreementToPayOut", "type": "bytes32[][]" }, { "internalType": "address[]", "name": "creatorsOfAgreementToPayOut", "type": "address[]" }, { "internalType": "address", "name": "tokensOfAgreementsToPayOut", "type": "address" }, { "internalType": "address payable", "name": "provider", "type": "address" } ], "name": "payoutFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64[][]", "name": "billingPeriods", "type": "uint64[][]" }, { "internalType": "uint128[][]", "name": "billingPrices", "type": "uint128[][]" }, { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "name": "setBillingPlans", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "capacity", "type": "uint64" }, { "internalType": "uint64[][]", "name": "billingPeriods", "type": "uint64[][]" }, { "internalType": "uint128[][]", "name": "billingPrices", "type": "uint128[][]" }, { "internalType": "address[]", "name": "tokens", "type": "address[]" }, { "internalType": "bytes32[]", "name": "message", "type": "bytes32[]" } ], "name": "setOffer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "capacity", "type": "uint64" } ], "name": "setTotalCapacity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "providerAddress", "type": "address" }, { "internalType": "bool", "name": "isWhiteListed", "type": "bool" } ], "name": "setWhitelistedProvider", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "isWhiteListed", "type": "bool" } ], "name": "setWhitelistedTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "terminateOffer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "dataReference", "type": "bytes32[]" }, { "internalType": "address", "name": "provider", "type": "address" }, { "internalType": "address[]", "name": "tokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "withdrawFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "increment", "type": "uint256" } ], "name": "incrementTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newTime", "type": "uint256" } ], "name": "setTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "provider", "type": "address" } ], "name": "getOfferUtilizedCapacity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AgreementFundsDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AgreementFundsPayout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AgreementFundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"}],\"name\":\"AgreementStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"period\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"price\",\"type\":\"uint128\"}],\"name\":\"BillingPlanSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"message\",\"type\":\"bytes32[]\"}],\"name\":\"MessageEmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"agreementCreator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"billingPeriod\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"billingPrice\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"availableFunds\",\"type\":\"uint256\"}],\"name\":\"NewAgreement\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"capacity\",\"type\":\"uint64\"}],\"name\":\"TotalCapacitySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"depositFunds\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"message\",\"type\":\"bytes32[]\"}],\"name\":\"emitMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAgreementReference\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"getOfferUtilizedCapacity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"storer\",\"type\":\"address\"}],\"name\":\"hasUtilizedCapacity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"increment\",\"type\":\"uint256\"}],\"name\":\"incrementTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWhitelistedProvider\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWhitelistedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"billingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[][]\",\"name\":\"dataReferencesOfAgreementToPayOut\",\"type\":\"bytes32[][]\"},{\"internalType\":\"address[]\",\"name\":\"creatorsOfAgreementToPayOut\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"tokenOfAgreementsToPayOut\",\"type\":\"address\"}],\"name\":\"newAgreement\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"offerRegistry\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"utilizedCapacity\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"totalCapacity\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[][]\",\"name\":\"dataReferencesOfAgreementToPayOut\",\"type\":\"bytes32[][]\"},{\"internalType\":\"address[]\",\"name\":\"creatorsOfAgreementToPayOut\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"tokensOfAgreementsToPayOut\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"payoutFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[][]\",\"name\":\"billingPeriods\",\"type\":\"uint64[][]\"},{\"internalType\":\"uint128[][]\",\"name\":\"billingPrices\",\"type\":\"uint128[][]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"setBillingPlans\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"capacity\",\"type\":\"uint64\"},{\"internalType\":\"uint64[][]\",\"name\":\"billingPeriods\",\"type\":\"uint64[][]\"},{\"internalType\":\"uint128[][]\",\"name\":\"billingPrices\",\"type\":\"uint128[][]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"message\",\"type\":\"bytes32[]\"}],\"name\":\"setOffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newTime\",\"type\":\"uint256\"}],\"name\":\"setTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"capacity\",\"type\":\"uint64\"}],\"name\":\"setTotalCapacity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"providerAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWhiteListed\",\"type\":\"bool\"}],\"name\":\"setWhitelistedProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWhiteListed\",\"type\":\"bool\"}],\"name\":\"setWhitelistedTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"terminateOffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"depositFunds(address,uint256,bytes32[],address)\":{\"details\":\"- depositing funds to Agreement that is linked to terminated Offer is not possible - depositing funds to Agreement that already is expired (eq. ran out of funds at some point) is not possible. Call NewAgreement instead. The data needs to be re-provided though. - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\",\"params\":{\"dataReference\":\"data reference where should be deposited funds.\",\"provider\":\"the address of the provider of the Offer.\"}},\"emitMessage(bytes32[])\":{\"params\":{\"message\":\"the Provider may send a message (e.g. his nodeID). Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID\"}},\"getAgreementReference(bytes32[],address,address)\":{\"params\":{\"creator\":\"the creator of the agreement\",\"dataReference\":\"the dataReference of the agreement\",\"token\":\"the token, which is used as a means of payment for the agreement.\"}},\"newAgreement(bytes32[],address,uint64,uint64,address,uint256,bytes32[][],address[],address)\":{\"details\":\"- The to-be-pinned data reference's size in MB (rounded up) must be equal in size to param size. - Provider can reject to pin data reference when it exceeds specified size. - The ownership of Agreement is enforced with agreementReference structure which is calculated as: hash(msg.sender, dataReference) - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession. Contains execution of the transferFrom on external token contract before all the stage changes are performed. As a result if a token will perform a callback to the StorageManager, it may lead to a reentrancy attack. Hence additional attention should be paid while reviewing this method of a token before whitelisting.\",\"params\":{\"amount\":\"if token is set, this is the amount of tokens that is transfered\",\"billingPeriod\":\"the chosen period for billing.\",\"creatorsOfAgreementToPayOut\":\"the creators of agreements which must be payed out. Pass this when there is no capacity. The order should match the order of dataReferenceOfAgreementToPayOut and tokensOfAgreementToPayOut\",\"dataReference\":\"the reference to an Data Source, can be several things.\",\"dataReferencesOfAgreementToPayOut\":\"the data references of agreements which must be payed out. Pass this when there is no capacity. Order should equal order of creatorsOfAgreementToPayOut and tokensOfAgreementToPayOut\",\"provider\":\"the provider from which is proposed to take a Offer.\",\"size\":\"the size of the to-be-pinned file in MB (rounded up).\",\"token\":\"the token in which you want to make the agreement. By convention: address(0) is the native currency\",\"tokenOfAgreementsToPayOut\":\"the token address of agreements which must be payed out. Pass this when there is no capacity.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause()\":{\"details\":\"Called by a pauser to pause, triggers stopped state.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"payoutFunds(bytes32[][],address[],address,address)\":{\"details\":\"- Provider must call an expired agreement themselves as soon as the agreement is expired, to add back the capacity to their Offer. - Payout can be triggered by other events as well. Like in newAgreement call with either existing agreement or when other Agreements are passed to the agreementsReferencesToBePayedOut array.\",\"params\":{\"creatorsOfAgreementToPayOut\":\"the creators that made the agreement to pay\",\"dataReferencesOfAgreementToPayOut\":\"the data references of the agreement to pay\",\"tokensOfAgreementsToPayOut\":\"the tokens of the agreement to pay out\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setBillingPlans(uint64[][],uint128[][],address[])\":{\"details\":\"- setting the price to 0 means that a particular period is not offered, which can be used to remove a period from the offer. - make sure that any period * prices does not cause an overflow, as this can never be accepted and hence is pointless. - the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error) - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\",\"params\":{\"billingPeriods\":\"the offered periods. Length must be equal to billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\",\"billingPrices\":\"the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index\"}},\"setOffer(uint64,uint64[][],uint128[][],address[],bytes32[])\":{\"details\":\"- Use this function when initiating an Offer or when the users wants to change more than one parameter at once. - make sure that any period * prices does not cause an overflow, as this can never be accepted (REF_MAX_PRICE) and hence is pointless - only whitelisted tokens are allowed to make an offer for - if there are two tokens, and two billingPrice/periods pairs per token, then boundaries[0] == 1. This makes the first two billingPeriod/prices pairs to apply to the first token ([tokens[0]]) and the second pairs to the second token. - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\",\"params\":{\"billingPeriods\":\"the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\",\"billingPrices\":\"the prices for the offered periods. Each entry at index corresponds to the same index at periods. The first index of the multi dem array corresponds with the address in tokens at the same index\",\"capacity\":\"the amount of MB offered. If already active before and set to 0, existing contracts can't be prolonged / re-started, no new contracts can be started.\",\"message\":\"the Provider may include a message (e.g. his nodeID). Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID\",\"tokens\":\"the tokens for which an offer is made. By convention, address(0) is the native currency.\"}},\"setTotalCapacity(uint64)\":{\"params\":{\"capacity\":\"the new capacity\"}},\"setWhitelistedProvider(address,bool)\":{\"params\":{\"isWhiteListed\":\"whether you want to whitelist the provider or put it from the whitelist.\",\"providerAddress\":\"the providerAddress from whom you want to set the whitelisted\"}},\"setWhitelistedTokens(address,bool)\":{\"params\":{\"isWhiteListed\":\"whether you want to whitelist the token or put it from the whitelist.\",\"token\":\"the token from whom you want to set the whitelisted\"}},\"terminateOffer()\":{\"details\":\"no new Agreement can be created and no existing Agreement can be prolonged. All existing Agreement are still valid for the amount of periods still deposited.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause()\":{\"details\":\"Called by a pauser to unpause, returns to normal state.\"},\"withdrawFunds(bytes32[],address,address[],uint256[])\":{\"details\":\"- if amount is zero then all withdrawable funds are transferred (eq. all available funds minus funds for still non-payed out periods and current period) - if Agreement is terminated Consumer can withdraw all remaining funds - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\",\"params\":{\"amounts\":\"the value you want to withdraw for each token\",\"dataReference\":\"the data reference of agreement to be funds withdrawn from\",\"provider\":\"the address of the provider of the Offer.\",\"tokens\":\"the tokens in which to withdraw. By convention, address(0) is the native currency.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"depositFunds(address,uint256,bytes32[],address)\":{\"notice\":\">> FOR CONSUMERdeposits new funds to the Agreement.\"},\"emitMessage(bytes32[])\":{\"notice\":\">> FOR PROVIDER\"},\"getAgreementReference(bytes32[],address,address)\":{\"notice\":\"get the agreementReference. the agreementReference consists of the hash of the dataReference, msg.sender and the tokenAdddress, to allow: - multiple people to register an agreement for the same file - one person to register multiple agreements for the same file, but with different tokens - link the token to the agreement, such that we do the accounting properly\"},\"newAgreement(bytes32[],address,uint64,uint64,address,uint256,bytes32[][],address[],address)\":{\"notice\":\">> FOR CONSUMERnew Agreement for given Offer\"},\"payoutFunds(bytes32[][],address[],address,address)\":{\"notice\":\">> FOR PROVIDERpayout already earned funds of one or more Agreement\"},\"setBillingPlans(uint64[][],uint128[][],address[])\":{\"notice\":\">> FOR PROVIDERset the billing plans for an Offer.\"},\"setOffer(uint64,uint64[][],uint128[][],address[],bytes32[])\":{\"notice\":\">> FOR PROVIDERset the totalCapacity and billingPlans of a Offer.\"},\"setTotalCapacity(uint64)\":{\"notice\":\">> FOR PROVIDERsets total capacity of Offer.\"},\"setWhitelistedProvider(address,bool)\":{\"notice\":\"whitelist a provider or remove the provider from whitelist\"},\"setWhitelistedTokens(address,bool)\":{\"notice\":\"whitelist a token or remove the token from whitelist\"},\"terminateOffer()\":{\"notice\":\">> FOR PROVIDERstops the Offer. It sets the totalCapacity to 0 which indicates terminated Offer.\"},\"withdrawFunds(bytes32[],address,address[],uint256[])\":{\"notice\":\">> FOR CONSUMERwithdraw funds from Agreement.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/tests/TestStorageManager.sol\":\"TestStorageManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/StorageManager.sol\":{\"keccak256\":\"0xb39dec9f5da8aa5bf10ca169d3e1ea12d08678d2f9d999dcbd22f52711dab8f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07fab32db88ce5f2f79e08db9c81095fc398d8ce7ac8dde69e6885197396ebd1\",\"dweb:/ipfs/QmXHa2SsauGepF6TbDkGsMeqKYgxHsFKsrVWbvC8Cw5q1m\"]},\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/tests/TestStorageManager.sol\":{\"keccak256\":\"0x2db3efc997008d9ce7cbf5f3751942adca7dc1667fd6de2148230531938da393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36c642f6591ba97d776dacfe65f59ca476ad49f6225ab42d2a0726e21393c25e\",\"dweb:/ipfs/QmefTMYPhGbh7FvUt8AQ4GnyD9euNbV5DmNas2cq6P9sf3\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0xe81686511d62f18b2d9c693c2c94c0a789c690de63aa90e15451ebf65c5bfd3e\",\"urls\":[\"bzz-raw://1332ee1d2b096456bf2e5795b5871d0fed47be6a31c9a2f2cef9206a299565ea\",\"dweb:/ipfs/Qmdu1847Y4UL3gTjbLUManMGfxYEoyGPSodM3Br89SKzwx\"]},\"@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]},\"@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol\":{\"keccak256\":\"0x04a69a78363214b4e3055db8e620bed222349f0c81e9d1cbe769eb849b69b73f\",\"urls\":[\"bzz-raw://b3115459376196d6c2c3817439c169d9b052b27b70e8ee2e28963cda760736da\",\"dweb:/ipfs/QmXaNF5rmcDSAzBiFMQjf979qb9xNXqD9eZtgo4uM9VEis\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x2ad5473fe88d9ab30c6cd495ab8895daae8c4a48cf8231282a2d339387b35006\",\"urls\":[\"bzz-raw://a737c60474c063efc28e5922b6a1d073588c010eb67f883273d3ec29d8e52d6b\",\"dweb:/ipfs/QmWCeqeZhR45S1mcjPRYEMy1DCHMy9sXDfwYLPycFRh2Nk\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x3b21f2c8d626de3b9925ae33e972d8bf5c8b1bffb3f4ee94daeed7d0679036e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f8d45329fecbf0836ad7543330c3ecd0f8d0ffa42d4016278c3eb2215fdcdfe\",\"dweb:/ipfs/QmXWLT7GcnHtA5NiD6MFi2CV3EWJY4wv5mLNnypqYDrxL3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a\",\"dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xa6a15ddddcbf29d2922a1e0d4151b5d2d33da24b93cc9ebc12390e0d855532f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c119bcaecfa853d564ac88d312777f75fa1126a3bca88a3371adb0ad9f35cb0\",\"dweb:/ipfs/QmY9UPuXeSKq86Zh38fE43VGQPhKMN34mkuFSFqPcr6nvZ\"]}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b506135f1806100206000396000f3fe6080604052600436106101815760003560e01c806382c4dba5116100d1578063b58596931161008a578063dc4aac9e11610064578063dc4aac9e1461041f578063ec5cdf991461043f578063f2fde38b1461045f578063f650ca741461047f57610181565b8063b5859693146103d7578063bf317abb146103ec578063d245599e1461040c57610181565b806382c4dba5146103125780638456cb59146103325780638da5cb5b146103475780638f5c5fc8146103695780639aad18ca14610397578063ab37f486146103b757610181565b8063398887051161013e5780635c975abb116101185780635c975abb146102a6578063699ca55f146102c8578063715018a6146102e85780638129fc1c146102fd57610181565b806339888705146102515780633beb26c4146102715780633f4ba83a1461029157610181565b80631f3477a5146101865780632691c085146101a857806327beac27146101bb5780632fd09ef9146101f1578063325b29411461021157806337f4329d14610231575b600080fd5b34801561019257600080fd5b506101a66101a1366004612806565b61049f565b005b6101a66101b636600461260d565b61074e565b3480156101c757600080fd5b506101db6101d63660046125b9565b610a4b565b6040516101e89190612c99565b60405180910390f35b3480156101fd57600080fd5b506101a661020c366004612773565b610a6f565b34801561021d57600080fd5b506101a661022c3660046126f0565b610a7b565b34801561023d57600080fd5b506101a661024c366004612a32565b610b1d565b34801561025d57600080fd5b506101a661026c3660046125d5565b610bac565b34801561027d57600080fd5b506101a661028c3660046129f3565b610c0c565b34801561029d57600080fd5b506101a6610c11565b3480156102b257600080fd5b506102bb610c72565b6040516101e89190612c8e565b3480156102d457600080fd5b506101a66102e33660046129f3565b610c7b565b3480156102f457600080fd5b506101a6610c86565b34801561030957600080fd5b506101a6610d05565b34801561031e57600080fd5b506101a661032d3660046125d5565b610d97565b34801561033e57600080fd5b506101a6610df7565b34801561035357600080fd5b5061035c610e57565b6040516101e89190612b9d565b34801561037557600080fd5b506103896103843660046125b9565b610e66565b6040516101e89291906134f8565b3480156103a357600080fd5b506102bb6103b23660046125b9565b610e8c565b3480156103c357600080fd5b506102bb6103d23660046125b9565b610ea1565b3480156103e357600080fd5b506101a6610eb6565b3480156103f857600080fd5b506101db6104073660046127a5565b610f73565b6101a661041a3660046128f1565b610faa565b34801561042b57600080fd5b506101a661043a366004612676565b61141e565b34801561044b57600080fd5b506102bb61045a3660046125b9565b611464565b34801561046b57600080fd5b506101a661047a3660046125b9565b61148a565b34801561048b57600080fd5b506101a661049a366004612a0b565b611541565b6001600160a01b038316600090815260c960205260408120905b83518110156107465760008382815181106104d057fe5b6020026020010151905060008583815181106104e857fe5b6020026020010151905060006104ff893384610f73565b60008181526002808801602052604090912090810154919250906001600160401b03166105475760405162461bcd60e51b815260040161053e90613139565b60405180910390fd5b6002810154600090600160401b90046001600160801b031661056e575060018101546105f5565b600282015482546040805160a0810182526001600160801b03808416808352600160801b9094046001600160401b03908116602084015260018801549383019390935291841660608201819052600160401b909404821660808201526105f2939290920216906105ec906105e19061162c565b6001860154906116d8565b906116d8565b90505b846105fe578094505b8085111561061e5760405162461bcd60e51b815260040161053e90612f38565b600182015461062d90866116d8565b60018301558461064f5760405162461bcd60e51b815260040161053e90612f79565b61065884611723565b156106df576000336001600160a01b03168660405161067690612b9a565b60006040518083038185875af1925050503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50509050806106d95760405162461bcd60e51b815260040161053e906133c3565b506106f3565b6106f36001600160a01b0385163387611730565b836001600160a01b0316837f579b45b1ee6c41a979ca183763f8a18021bb54fcd590cf1be2821e4abe31fd8e8760405161072d9190612c99565b60405180910390a35050600190930192506104b9915050565b505050505050565b60975460ff16156107715760405162461bcd60e51b815260040161053e9061310f565b6001600160a01b038116600090815260cb6020526040902054819060ff166107ab5760405162461bcd60e51b815260040161053e906131d7565b60006107b8843388610f73565b6001600160a01b038716600090815260ca602052604090205490915060ff166107f35760405162461bcd60e51b815260040161053e9061318f565b6001600160a01b038316600090815260c9602052604090208054600160401b90046001600160401b03166108395760405162461bcd60e51b815260040161053e90612e91565b600082815260028083016020526040909120908101546001600160401b03166108745760405162461bcd60e51b815260040161053e90613139565b6002810154600160401b90046001600160801b03166108a55760405162461bcd60e51b815260040161053e90613222565b80546001600160a01b038916600090815260018401602090815260408083206001600160401b03600160801b86041684529091529020546001600160801b039081169116146109065760405162461bcd60e51b815260040161053e906130c4565b6002810154815461092b916001600160801b03909116906001600160401b031661178b565b6040805160a08101825283546001600160801b0380821683526001600160401b03600160801b9092048216602084015260018601549383019390935260028501549081166060830152600160401b9004909116608082015261099b906109909061162c565b6001840154906116d8565b10156109b95760405162461bcd60e51b815260040161053e90612ee6565b60006109c489611723565b905080156109d0573497505b60018201546109df90896117c5565b6001830155806109fe576109fe6001600160a01b038a1633308b6117ea565b886001600160a01b0316847f5ac5c9c49f143d64d36d4eb69c1624c8670cb426b3f952830187c279a51009cc8a604051610a389190612c99565b60405180910390a3505050505050505050565b6001600160a01b0316600090815260c960205260409020546001600160401b031690565b610a7881611811565b50565b60975460ff1615610a9e5760405162461bcd60e51b815260040161053e9061310f565b33600081815260cb602052604090205460ff16610acd5760405162461bcd60e51b815260040161053e906131d7565b33600090815260c9602052604090208054600160401b90046001600160401b0316610b0a5760405162461bcd60e51b815260040161053e90612e91565b610b1681868686611855565b5050505050565b60975460ff1615610b405760405162461bcd60e51b815260040161053e9061310f565b33600081815260cb602052604090205460ff16610b6f5760405162461bcd60e51b815260040161053e906131d7565b33600090815260c960205260409020610b8787611541565b610b9381878787611855565b825115610ba357610ba383611811565b50505050505050565b610bb46118fc565b6065546001600160a01b03908116911614610be15760405162461bcd60e51b815260040161053e906132a7565b6001600160a01b0391909116600090815260ca60205260409020805460ff1916911515919091179055565b60cc55565b610c196118fc565b6065546001600160a01b03908116911614610c465760405162461bcd60e51b815260040161053e906132a7565b60975460ff16610c685760405162461bcd60e51b815260040161053e90612ce9565b610c70611900565b565b60975460ff1690565b60cc80549091019055565b610c8e6118fc565b6065546001600160a01b03908116911614610cbb5760405162461bcd60e51b815260040161053e906132a7565b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b600054610100900460ff1680610d1e5750610d1e61196c565b80610d2c575060005460ff16155b610d485760405162461bcd60e51b815260040161053e90613330565b600054610100900460ff16158015610d73576000805460ff1961ff0019909116610100171660011790555b610d7b611972565b610d836119f0565b8015610a78576000805461ff001916905550565b610d9f6118fc565b6065546001600160a01b03908116911614610dcc5760405162461bcd60e51b815260040161053e906132a7565b6001600160a01b0391909116600090815260cb60205260409020805460ff1916911515919091179055565b610dff6118fc565b6065546001600160a01b03908116911614610e2c5760405162461bcd60e51b815260040161053e906132a7565b60975460ff1615610e4f5760405162461bcd60e51b815260040161053e9061310f565b610c70611a6e565b6065546001600160a01b031690565b60c9602052600090815260409020546001600160401b0380821691600160401b90041682565b60cb6020526000908152604090205460ff1681565b60ca6020526000908152604090205460ff1681565b33600081815260cb602052604090205460ff16610ee55760405162461bcd60e51b815260040161053e906131d7565b33600090815260c9602052604090208054600160401b90046001600160401b0316610f225760405162461bcd60e51b815260040161053e90612e91565b805467ffffffffffffffff60401b1916815560405133907f7267987f11d91dd9b618677a5f4e5596eca75f9e97d880452c73c2dbd8ebfae390610f6790600090612ca2565b60405180910390a25050565b6000828483604051602001610f8a93929190612b25565b6040516020818303038152906040528051906020012090505b9392505050565b60975460ff1615610fcd5760405162461bcd60e51b815260040161053e9061310f565b6001600160a01b038816600090815260cb602052604090205460ff166110055760405162461bcd60e51b815260040161053e906131d7565b6001600160a01b038816600090815260c9602052604090206001600160401b0387166110435760405162461bcd60e51b815260040161053e90612d17565b6000886001600160401b03161161106c5760405162461bcd60e51b815260040161053e90613078565b8054