{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenCollector",
  "sourceName": "contracts/TokenCollector.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_recipient",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ArrayLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EmptyArrays",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "required",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        }
      ],
      "name": "InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotAuthorized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenCount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalValue",
          "type": "uint256"
        }
      ],
      "name": "BatchClaimCompleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "authorized",
          "type": "bool"
        }
      ],
      "name": "OperatorUpdated",
      "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": true,
          "internalType": "address",
          "name": "oldRecipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "RecipientUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensClaimed",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "froms",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchClaimFromMultiple",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchClaimTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "checkAllowances",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "allowances",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "checkBalances",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "balances",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "claimToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "emergencyWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "emergencyWithdrawETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "operators",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "recipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_authorized",
          "type": "bool"
        }
      ],
      "name": "setOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newRecipient",
          "type": "address"
        }
      ],
      "name": "setRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newRecipient",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "setRecipientAndAuthorizeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162002540380380620025408339818101604052810190620000379190620002a3565b33600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000ad5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000a49190620002e6565b60405180910390fd5b620000be816200017560201b60201c565b5060018081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200012d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000303565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200026b826200023e565b9050919050565b6200027d816200025e565b81146200028957600080fd5b50565b6000815190506200029d8162000272565b92915050565b600060208284031215620002bc57620002bb62000239565b5b6000620002cc848285016200028c565b91505092915050565b620002e0816200025e565b82525050565b6000602082019050620002fd6000830184620002d5565b92915050565b61222d80620003136000396000f3fe6080604052600436106100ec5760003560e01c8063558a72971161008a578063845360171161005957806384536017146102e75780638da5cb5b146102fe578063e52f377f14610329578063f2fde38b14610352576100f3565b8063558a72971461025357806366d003ac1461027c5780636ff1c9bc146102a7578063715018a6146102d0576100f3565b8063322eb93a116100c6578063322eb93a146101875780633bbed4a0146101c45780634130e293146101ed5780634c8e394814610216576100f3565b8063125bfb66146100f857806313e7c9d8146101215780631fae577c1461015e576100f3565b366100f357005b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a9190611ac9565b61037b565b005b34801561012d57600080fd5b5061014860048036038101906101439190611b1c565b6104fd565b6040516101559190611b64565b60405180910390f35b34801561016a57600080fd5b5061018560048036038101906101809190611c3a565b61051d565b005b34801561019357600080fd5b506101ae60048036038101906101a99190611ccf565b61087f565b6040516101bb9190611ded565b60405180910390f35b3480156101d057600080fd5b506101eb60048036038101906101e69190611b1c565b6109b8565b005b3480156101f957600080fd5b50610214600480360381019061020f9190611e0f565b610aec565b005b34801561022257600080fd5b5061023d60048036038101906102389190611ccf565b610dce565b60405161024a9190611ded565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611eef565b610f09565b005b34801561028857600080fd5b50610291611020565b60405161029e9190611f3e565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190611b1c565b611046565b005b3480156102dc57600080fd5b506102e561112d565b005b3480156102f357600080fd5b506102fc611141565b005b34801561030a57600080fd5b506103136111c4565b6040516103209190611f3e565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190611f59565b6111ed565b005b34801561035e57600080fd5b5061037960048036038101906103749190611b1c565b611401565b005b6103836111c4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156104085750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561043f576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610447611487565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806104ae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156104e5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f08383836114cd565b6104f861172c565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b6105256111c4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156105aa5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156105e1576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105e9611487565b818190508585905014610628576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008585905003610665576040517fa600c81d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106cb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b868690508110156107e25760008484838181106106ef576106ee611f99565b5b905060200201351180156107575750600073ffffffffffffffffffffffffffffffffffffffff1687878381811061072957610728611f99565b5b905060200201602081019061073e9190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1614155b156107cf576107a787878381811061077257610771611f99565b5b90506020020160208101906107879190611b1c565b8686868581811061079b5761079a611f99565b5b905060200201356114cd565b8383828181106107ba576107b9611f99565b5b90506020020135826107cc9190611ff7565b91505b80806107da9061202b565b9150506106cf565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f71237a03fe853c3c0682da9bfc664772440710f03c32039d7ff77644fbc823ce8888905084604051610867929190612082565b60405180910390a35061087861172c565b5050505050565b60608383905067ffffffffffffffff81111561089e5761089d6120ab565b5b6040519080825280602002602001820160405280156108cc5781602001602082028036833780820191505090505b50905060005b848490508110156109b0578484828181106108f0576108ef611f99565b5b90506020020160208101906109059190611b1c565b73ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161093d9190611f3e565b602060405180830381865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e91906120ef565b82828151811061099157610990611f99565b5b60200260200101818152505080806109a89061202b565b9150506108d2565b509392505050565b6109c0611735565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a26576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459360405160405180910390a35050565b610af46111c4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b795750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610bb0576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb8611487565b8383905086869050141580610bd35750818190508686905014155b15610c0a576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008686905003610c47576040517fa600c81d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b86869050811015610dbd576000838383818110610c6a57610c69611f99565b5b90506020020135118015610cd25750600073ffffffffffffffffffffffffffffffffffffffff16878783818110610ca457610ca3611f99565b5b9050602002016020810190610cb99190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1614155b8015610d325750600073ffffffffffffffffffffffffffffffffffffffff16858583818110610d0457610d03611f99565b5b9050602002016020810190610d199190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610daa57610da9878783818110610d4d57610d4c611f99565b5b9050602002016020810190610d629190611b1c565b868684818110610d7557610d74611f99565b5b9050602002016020810190610d8a9190611b1c565b858585818110610d9d57610d9c611f99565b5b905060200201356114cd565b5b8080610db59061202b565b915050610c4a565b50610dc661172c565b505050505050565b60608383905067ffffffffffffffff811115610ded57610dec6120ab565b5b604051908082528060200260200182016040528015610e1b5781602001602082028036833780820191505090505b50905060005b84849050811015610f0157848482818110610e3f57610e3e611f99565b5b9050602002016020810190610e549190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84306040518363ffffffff1660e01b8152600401610e8e92919061211c565b602060405180830381865afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf91906120ef565b828281518110610ee257610ee1611f99565b5b6020026020010181815250508080610ef99061202b565b915050610e21565b509392505050565b610f11611735565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f77576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f966c160e1c4dbc7df8d69af4ace01e9297c3cf016397b7914971f2fbfa32672d826040516110149190611b64565b60405180910390a25050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61104e611735565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161108e9190611f3e565b602060405180830381865afa1580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906120ef565b9050600081111561112857611127600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166117bc9092919063ffffffff16565b5b505050565b611135611735565b61113f600061183b565b565b611149611735565b600047905060008111156111c157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111bf573d6000803e3d6000fd5b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111f5611735565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061125c5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15611293576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459360405160405180910390a38173ffffffffffffffffffffffffffffffffffffffff167f966c160e1c4dbc7df8d69af4ace01e9297c3cf016397b7914971f2fbfa32672d60016040516113f49190611b64565b60405180910390a2505050565b611409611735565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147b5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016114729190611f3e565b60405180910390fd5b6114848161183b565b50565b6002600154036114c3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e85306040518363ffffffff1660e01b815260040161150f92919061211c565b602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155091906120ef565b90508281101561159b578483826040517f192b9e4e00000000000000000000000000000000000000000000000000000000815260040161159293929190612145565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016115d69190611f3e565b602060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161791906120ef565b90506000818511611628578461162a565b815b905060008111156117235761168486600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838773ffffffffffffffffffffffffffffffffffffffff166118ff909392919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f40b4b442b70a20081fa377001b642c7d3618847a45b5b8ed2b938e30a3299ddb8460405161171a919061217c565b60405180910390a45b50505050505050565b60018081905550565b61173d611981565b73ffffffffffffffffffffffffffffffffffffffff1661175b6111c4565b73ffffffffffffffffffffffffffffffffffffffff16146117ba5761177e611981565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117b19190611f3e565b60405180910390fd5b565b611836838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016117ef929190612197565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611989565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61197b848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611934939291906121c0565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611989565b50505050565b600033905090565b600080602060008451602086016000885af1806119ac576040513d6000823e3d81fd5b3d9250600051915050600082146119c75760018114156119e3565b60008473ffffffffffffffffffffffffffffffffffffffff163b145b15611a2557836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611a1c9190611f3e565b60405180910390fd5b50505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6082611a35565b9050919050565b611a7081611a55565b8114611a7b57600080fd5b50565b600081359050611a8d81611a67565b92915050565b6000819050919050565b611aa681611a93565b8114611ab157600080fd5b50565b600081359050611ac381611a9d565b92915050565b600080600060608486031215611ae257611ae1611a2b565b5b6000611af086828701611a7e565b9350506020611b0186828701611a7e565b9250506040611b1286828701611ab4565b9150509250925092565b600060208284031215611b3257611b31611a2b565b5b6000611b4084828501611a7e565b91505092915050565b60008115159050919050565b611b5e81611b49565b82525050565b6000602082019050611b796000830184611b55565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ba457611ba3611b7f565b5b8235905067ffffffffffffffff811115611bc157611bc0611b84565b5b602083019150836020820283011115611bdd57611bdc611b89565b5b9250929050565b60008083601f840112611bfa57611bf9611b7f565b5b8235905067ffffffffffffffff811115611c1757611c16611b84565b5b602083019150836020820283011115611c3357611c32611b89565b5b9250929050565b600080600080600060608688031215611c5657611c55611a2b565b5b600086013567ffffffffffffffff811115611c7457611c73611a30565b5b611c8088828901611b8e565b95509550506020611c9388828901611a7e565b935050604086013567ffffffffffffffff811115611cb457611cb3611a30565b5b611cc088828901611be4565b92509250509295509295909350565b600080600060408486031215611ce857611ce7611a2b565b5b600084013567ffffffffffffffff811115611d0657611d05611a30565b5b611d1286828701611b8e565b93509350506020611d2586828701611a7e565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611d6481611a93565b82525050565b6000611d768383611d5b565b60208301905092915050565b6000602082019050919050565b6000611d9a82611d2f565b611da48185611d3a565b9350611daf83611d4b565b8060005b83811015611de0578151611dc78882611d6a565b9750611dd283611d82565b925050600181019050611db3565b5085935050505092915050565b60006020820190508181036000830152611e078184611d8f565b905092915050565b60008060008060008060608789031215611e2c57611e2b611a2b565b5b600087013567ffffffffffffffff811115611e4a57611e49611a30565b5b611e5689828a01611b8e565b9650965050602087013567ffffffffffffffff811115611e7957611e78611a30565b5b611e8589828a01611b8e565b9450945050604087013567ffffffffffffffff811115611ea857611ea7611a30565b5b611eb489828a01611be4565b92509250509295509295509295565b611ecc81611b49565b8114611ed757600080fd5b50565b600081359050611ee981611ec3565b92915050565b60008060408385031215611f0657611f05611a2b565b5b6000611f1485828601611a7e565b9250506020611f2585828601611eda565b9150509250929050565b611f3881611a55565b82525050565b6000602082019050611f536000830184611f2f565b92915050565b60008060408385031215611f7057611f6f611a2b565b5b6000611f7e85828601611a7e565b9250506020611f8f85828601611a7e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061200282611a93565b915061200d83611a93565b925082820190508082111561202557612024611fc8565b5b92915050565b600061203682611a93565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361206857612067611fc8565b5b600182019050919050565b61207c81611a93565b82525050565b60006040820190506120976000830185612073565b6120a46020830184612073565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506120e981611a9d565b92915050565b60006020828403121561210557612104611a2b565b5b6000612113848285016120da565b91505092915050565b60006040820190506121316000830185611f2f565b61213e6020830184611f2f565b9392505050565b600060608201905061215a6000830186611f2f565b6121676020830185612073565b6121746040830184612073565b949350505050565b60006020820190506121916000830184612073565b92915050565b60006040820190506121ac6000830185611f2f565b6121b96020830184612073565b9392505050565b60006060820190506121d56000830186611f2f565b6121e26020830185611f2f565b6121ef6040830184612073565b94935050505056fea26469706673582212203f7108ad84125efe51b0dedac52ef859f7fa3aa714cd12a90bceb0eb79f8871464736f6c63430008140033",
  "deployedBytecode": "0x6080604052600436106100ec5760003560e01c8063558a72971161008a578063845360171161005957806384536017146102e75780638da5cb5b146102fe578063e52f377f14610329578063f2fde38b14610352576100f3565b8063558a72971461025357806366d003ac1461027c5780636ff1c9bc146102a7578063715018a6146102d0576100f3565b8063322eb93a116100c6578063322eb93a146101875780633bbed4a0146101c45780634130e293146101ed5780634c8e394814610216576100f3565b8063125bfb66146100f857806313e7c9d8146101215780631fae577c1461015e576100f3565b366100f357005b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a9190611ac9565b61037b565b005b34801561012d57600080fd5b5061014860048036038101906101439190611b1c565b6104fd565b6040516101559190611b64565b60405180910390f35b34801561016a57600080fd5b5061018560048036038101906101809190611c3a565b61051d565b005b34801561019357600080fd5b506101ae60048036038101906101a99190611ccf565b61087f565b6040516101bb9190611ded565b60405180910390f35b3480156101d057600080fd5b506101eb60048036038101906101e69190611b1c565b6109b8565b005b3480156101f957600080fd5b50610214600480360381019061020f9190611e0f565b610aec565b005b34801561022257600080fd5b5061023d60048036038101906102389190611ccf565b610dce565b60405161024a9190611ded565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611eef565b610f09565b005b34801561028857600080fd5b50610291611020565b60405161029e9190611f3e565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190611b1c565b611046565b005b3480156102dc57600080fd5b506102e561112d565b005b3480156102f357600080fd5b506102fc611141565b005b34801561030a57600080fd5b506103136111c4565b6040516103209190611f3e565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190611f59565b6111ed565b005b34801561035e57600080fd5b5061037960048036038101906103749190611b1c565b611401565b005b6103836111c4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156104085750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561043f576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610447611487565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806104ae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156104e5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f08383836114cd565b6104f861172c565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b6105256111c4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156105aa5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156105e1576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105e9611487565b818190508585905014610628576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008585905003610665576040517fa600c81d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106cb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b868690508110156107e25760008484838181106106ef576106ee611f99565b5b905060200201351180156107575750600073ffffffffffffffffffffffffffffffffffffffff1687878381811061072957610728611f99565b5b905060200201602081019061073e9190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1614155b156107cf576107a787878381811061077257610771611f99565b5b90506020020160208101906107879190611b1c565b8686868581811061079b5761079a611f99565b5b905060200201356114cd565b8383828181106107ba576107b9611f99565b5b90506020020135826107cc9190611ff7565b91505b80806107da9061202b565b9150506106cf565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f71237a03fe853c3c0682da9bfc664772440710f03c32039d7ff77644fbc823ce8888905084604051610867929190612082565b60405180910390a35061087861172c565b5050505050565b60608383905067ffffffffffffffff81111561089e5761089d6120ab565b5b6040519080825280602002602001820160405280156108cc5781602001602082028036833780820191505090505b50905060005b848490508110156109b0578484828181106108f0576108ef611f99565b5b90506020020160208101906109059190611b1c565b73ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161093d9190611f3e565b602060405180830381865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e91906120ef565b82828151811061099157610990611f99565b5b60200260200101818152505080806109a89061202b565b9150506108d2565b509392505050565b6109c0611735565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a26576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459360405160405180910390a35050565b610af46111c4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b795750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610bb0576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb8611487565b8383905086869050141580610bd35750818190508686905014155b15610c0a576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008686905003610c47576040517fa600c81d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b86869050811015610dbd576000838383818110610c6a57610c69611f99565b5b90506020020135118015610cd25750600073ffffffffffffffffffffffffffffffffffffffff16878783818110610ca457610ca3611f99565b5b9050602002016020810190610cb99190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1614155b8015610d325750600073ffffffffffffffffffffffffffffffffffffffff16858583818110610d0457610d03611f99565b5b9050602002016020810190610d199190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610daa57610da9878783818110610d4d57610d4c611f99565b5b9050602002016020810190610d629190611b1c565b868684818110610d7557610d74611f99565b5b9050602002016020810190610d8a9190611b1c565b858585818110610d9d57610d9c611f99565b5b905060200201356114cd565b5b8080610db59061202b565b915050610c4a565b50610dc661172c565b505050505050565b60608383905067ffffffffffffffff811115610ded57610dec6120ab565b5b604051908082528060200260200182016040528015610e1b5781602001602082028036833780820191505090505b50905060005b84849050811015610f0157848482818110610e3f57610e3e611f99565b5b9050602002016020810190610e549190611b1c565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84306040518363ffffffff1660e01b8152600401610e8e92919061211c565b602060405180830381865afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf91906120ef565b828281518110610ee257610ee1611f99565b5b6020026020010181815250508080610ef99061202b565b915050610e21565b509392505050565b610f11611735565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f77576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f966c160e1c4dbc7df8d69af4ace01e9297c3cf016397b7914971f2fbfa32672d826040516110149190611b64565b60405180910390a25050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61104e611735565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161108e9190611f3e565b602060405180830381865afa1580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906120ef565b9050600081111561112857611127600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166117bc9092919063ffffffff16565b5b505050565b611135611735565b61113f600061183b565b565b611149611735565b600047905060008111156111c157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111bf573d6000803e3d6000fd5b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111f5611735565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061125c5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15611293576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459360405160405180910390a38173ffffffffffffffffffffffffffffffffffffffff167f966c160e1c4dbc7df8d69af4ace01e9297c3cf016397b7914971f2fbfa32672d60016040516113f49190611b64565b60405180910390a2505050565b611409611735565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147b5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016114729190611f3e565b60405180910390fd5b6114848161183b565b50565b6002600154036114c3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e85306040518363ffffffff1660e01b815260040161150f92919061211c565b602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155091906120ef565b90508281101561159b578483826040517f192b9e4e00000000000000000000000000000000000000000000000000000000815260040161159293929190612145565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016115d69190611f3e565b602060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161791906120ef565b90506000818511611628578461162a565b815b905060008111156117235761168486600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838773ffffffffffffffffffffffffffffffffffffffff166118ff909392919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f40b4b442b70a20081fa377001b642c7d3618847a45b5b8ed2b938e30a3299ddb8460405161171a919061217c565b60405180910390a45b50505050505050565b60018081905550565b61173d611981565b73ffffffffffffffffffffffffffffffffffffffff1661175b6111c4565b73ffffffffffffffffffffffffffffffffffffffff16146117ba5761177e611981565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117b19190611f3e565b60405180910390fd5b565b611836838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016117ef929190612197565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611989565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61197b848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611934939291906121c0565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611989565b50505050565b600033905090565b600080602060008451602086016000885af1806119ac576040513d6000823e3d81fd5b3d9250600051915050600082146119c75760018114156119e3565b60008473ffffffffffffffffffffffffffffffffffffffff163b145b15611a2557836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611a1c9190611f3e565b60405180910390fd5b50505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6082611a35565b9050919050565b611a7081611a55565b8114611a7b57600080fd5b50565b600081359050611a8d81611a67565b92915050565b6000819050919050565b611aa681611a93565b8114611ab157600080fd5b50565b600081359050611ac381611a9d565b92915050565b600080600060608486031215611ae257611ae1611a2b565b5b6000611af086828701611a7e565b9350506020611b0186828701611a7e565b9250506040611b1286828701611ab4565b9150509250925092565b600060208284031215611b3257611b31611a2b565b5b6000611b4084828501611a7e565b91505092915050565b60008115159050919050565b611b5e81611b49565b82525050565b6000602082019050611b796000830184611b55565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ba457611ba3611b7f565b5b8235905067ffffffffffffffff811115611bc157611bc0611b84565b5b602083019150836020820283011115611bdd57611bdc611b89565b5b9250929050565b60008083601f840112611bfa57611bf9611b7f565b5b8235905067ffffffffffffffff811115611c1757611c16611b84565b5b602083019150836020820283011115611c3357611c32611b89565b5b9250929050565b600080600080600060608688031215611c5657611c55611a2b565b5b600086013567ffffffffffffffff811115611c7457611c73611a30565b5b611c8088828901611b8e565b95509550506020611c9388828901611a7e565b935050604086013567ffffffffffffffff811115611cb457611cb3611a30565b5b611cc088828901611be4565b92509250509295509295909350565b600080600060408486031215611ce857611ce7611a2b565b5b600084013567ffffffffffffffff811115611d0657611d05611a30565b5b611d1286828701611b8e565b93509350506020611d2586828701611a7e565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611d6481611a93565b82525050565b6000611d768383611d5b565b60208301905092915050565b6000602082019050919050565b6000611d9a82611d2f565b611da48185611d3a565b9350611daf83611d4b565b8060005b83811015611de0578151611dc78882611d6a565b9750611dd283611d82565b925050600181019050611db3565b5085935050505092915050565b60006020820190508181036000830152611e078184611d8f565b905092915050565b60008060008060008060608789031215611e2c57611e2b611a2b565b5b600087013567ffffffffffffffff811115611e4a57611e49611a30565b5b611e5689828a01611b8e565b9650965050602087013567ffffffffffffffff811115611e7957611e78611a30565b5b611e8589828a01611b8e565b9450945050604087013567ffffffffffffffff811115611ea857611ea7611a30565b5b611eb489828a01611be4565b92509250509295509295509295565b611ecc81611b49565b8114611ed757600080fd5b50565b600081359050611ee981611ec3565b92915050565b60008060408385031215611f0657611f05611a2b565b5b6000611f1485828601611a7e565b9250506020611f2585828601611eda565b9150509250929050565b611f3881611a55565b82525050565b6000602082019050611f536000830184611f2f565b92915050565b60008060408385031215611f7057611f6f611a2b565b5b6000611f7e85828601611a7e565b9250506020611f8f85828601611a7e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061200282611a93565b915061200d83611a93565b925082820190508082111561202557612024611fc8565b5b92915050565b600061203682611a93565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361206857612067611fc8565b5b600182019050919050565b61207c81611a93565b82525050565b60006040820190506120976000830185612073565b6120a46020830184612073565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506120e981611a9d565b92915050565b60006020828403121561210557612104611a2b565b5b6000612113848285016120da565b91505092915050565b60006040820190506121316000830185611f2f565b61213e6020830184611f2f565b9392505050565b600060608201905061215a6000830186611f2f565b6121676020830185612073565b6121746040830184612073565b949350505050565b60006020820190506121916000830184612073565b92915050565b60006040820190506121ac6000830185611f2f565b6121b96020830184612073565b9392505050565b60006060820190506121d56000830186611f2f565b6121e26020830185611f2f565b6121ef6040830184612073565b94935050505056fea26469706673582212203f7108ad84125efe51b0dedac52ef859f7fa3aa714cd12a90bceb0eb79f8871464736f6c63430008140033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
