UNPKG

openzeppelin-contracts

Version:

Secure Smart Contract library for Solidity

582 lines 60.5 kB
{ "contractName": "ERC777", "abi": [ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address[]", "name": "defaultOperators_", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "AuthorizedOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Burned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "RevokedOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "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" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Sent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "authorizeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "defaultOperators", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "granularity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "isOperatorFor", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorSend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "revokeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "send", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506040516200335c3803806200335c833981810160405281019062000037919062000528565b82600290805190602001906200004f929190620002be565b50816003908051906020019062000068929190620002be565b508060049080519060200190620000819291906200034f565b5060005b600480549050811015620001665760016005600060048481548110620000d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200015d9062000772565b91505062000085565b50731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054306040518463ffffffff1660e01b8152600401620001da93929190620005eb565b600060405180830381600087803b158015620001f557600080fd5b505af11580156200020a573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a306040518463ffffffff1660e01b81526004016200028193929190620005eb565b600060405180830381600087803b1580156200029c57600080fd5b505af1158015620002b1573d6000803e3d6000fd5b5050505050505062000867565b828054620002cc906200073c565b90600052602060002090601f016020900481019282620002f057600085556200033c565b82601f106200030b57805160ff19168380011785556200033c565b828001600101855582156200033c579182015b828111156200033b5782518255916020019190600101906200031e565b5b5090506200034b9190620003de565b5090565b828054828255906000526020600020908101928215620003cb579160200282015b82811115620003ca5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000370565b5b509050620003da9190620003de565b5090565b5b80821115620003f9576000816000905550600101620003df565b5090565b6000620004146200040e846200065c565b62000628565b905080838252602082019050828560208602820111156200043457600080fd5b60005b858110156200046857816200044d8882620004b7565b84526020840193506020830192505060018101905062000437565b5050509392505050565b60006200048962000483846200068b565b62000628565b905082815260208101848484011115620004a257600080fd5b620004af84828562000706565b509392505050565b600081519050620004c8816200084d565b92915050565b600082601f830112620004e057600080fd5b8151620004f2848260208601620003fd565b91505092915050565b600082601f8301126200050d57600080fd5b81516200051f84826020860162000472565b91505092915050565b6000806000606084860312156200053e57600080fd5b600084015167ffffffffffffffff8111156200055957600080fd5b6200056786828701620004fb565b935050602084015167ffffffffffffffff8111156200058557600080fd5b6200059386828701620004fb565b925050604084015167ffffffffffffffff811115620005b157600080fd5b620005bf86828701620004ce565b9150509250925092565b620005d481620006be565b82525050565b620005e581620006d2565b82525050565b6000606082019050620006026000830186620005c9565b620006116020830185620005da565b620006206040830184620005c9565b949350505050565b6000604051905081810181811067ffffffffffffffff821117156200065257620006516200081e565b5b8060405250919050565b600067ffffffffffffffff8211156200067a57620006796200081e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115620006a957620006a86200081e565b5b601f19601f8301169050602081019050919050565b6000620006cb82620006dc565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200072657808201518184015260208101905062000709565b8381111562000736576000848401525b50505050565b600060028204905060018216806200075557607f821691505b602082108114156200076c576200076b620007ef565b5b50919050565b60006200077f82620006fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620007b557620007b4620007c0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200085881620006be565b81146200086457600080fd5b50565b612ae580620008776000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b6371146102e3578063dd62ed3e14610313578063fad8b32a14610343578063fc673c4f1461035f578063fe9d93031461037b57610116565b8063959b8c3f1461025d57806395d89b41146102795780639bd9bbc614610297578063a9059cbb146102b357610116565b806323b872dd116100e957806323b872dd146101a5578063313ce567146101d5578063556f0dc7146101f357806362ad1b831461021157806370a082311461022d57610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461015757806318160ddd14610187575b600080fd5b610123610397565b604051610130919061257a565b60405180910390f35b610141610425565b60405161014e91906125b7565b60405180910390f35b610171600480360381019061016c9190611db4565b6104b7565b60405161017e919061259c565b60405180910390f35b61018f6104da565b60405161019c9190612739565b60405180910390f35b6101bf60048036038101906101ba9190611cbe565b6104e4565b6040516101cc919061259c565b60405180910390f35b6101dd6106f5565b6040516101ea9190612799565b60405180910390f35b6101fb6106fe565b6040516102089190612739565b60405180910390f35b61022b60048036038101906102269190611d0d565b610707565b005b61024760048036038101906102429190611c30565b61076d565b6040516102549190612739565b60405180910390f35b61027760048036038101906102729190611c30565b6107b5565b005b610281610a16565b60405161028e91906125b7565b60405180910390f35b6102b160048036038101906102ac9190611df0565b610aa8565b005b6102cd60048036038101906102c89190611db4565b610ad2565b6040516102da919061259c565b60405180910390f35b6102fd60048036038101906102f89190611c82565b610be0565b60405161030a919061259c565b60405180910390f35b61032d60048036038101906103289190611c82565b610d91565b60405161033a9190612739565b60405180910390f35b61035d60048036038101906103589190611c30565b610e18565b005b61037960048036038101906103749190611e57565b611079565b005b61039560048036038101906103909190611eea565b6110db565b005b6060600480548060200260200160405190810160405280929190818152602001828054801561041b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103d1575b5050505050905090565b606060028054610434906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610460906129b1565b80156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b5050505050905090565b6000806104c2611101565b90506104cf818585611109565b600191505092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c90612699565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156105c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bc906126d9565b60405180910390fd5b60006105cf611101565b90506105fd8186868660405180602001604052806000815250604051806020016040528060008152506112d4565b61062981868686604051806020016040528060008152506040518060200160405280600081525061144d565b6106bb858285600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b691906128dc565b611109565b6106e9818686866040518060200160405280600081525060405180602001604052806000815250600061165e565b60019150509392505050565b60006012905090565b60006001905090565b610718610712611101565b86610be0565b610757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074e906126b9565b60405180910390fd5b61076685858585856001611842565b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8073ffffffffffffffffffffffffffffffffffffffff166107d4611101565b73ffffffffffffffffffffffffffffffffffffffff16141561082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082290612639565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109155760076000610889611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556109b2565b600160066000610923611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6109ba611101565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b606060038054610a25906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a51906129b1565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b610acd610ab3611101565b848484604051806020016040528060008152506001611842565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90612699565b60405180910390fd5b6000610b4d611101565b9050610b7b8182868660405180602001604052806000815250604051806020016040528060008152506112d4565b610ba781828686604051806020016040528060008152506040518060200160405280600081525061144d565b610bd5818286866040518060200160405280600081525060405180602001604052806000815250600061165e565b600191505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cf85750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610cf75750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610d895750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e20611101565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590612659565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8157600160076000610eee611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611015565b60066000610f8d611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b61101d611101565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b61108a611084611101565b85610be0565b6110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c0906126b9565b60405180910390fd5b6110d584848484611962565b50505050565b6110fd6110e6611101565b838360405180602001604052806000815250611962565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611170906125d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090612719565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112c79190612739565b60405180910390a3505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560001b6040518363ffffffff1660e01b8152600401611348929190612551565b60206040518083038186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113989190611c59565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611444578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b8152600401611411969594939291906124e2565b600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050505b50505050505050565b61145986868686611b70565b826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114a391906128dc565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461152f9190612886565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc826146779878686866040516115e993929190612754565b60405180910390a48373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161164e9190612739565b60405180910390a3505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b6040518363ffffffff1660e01b81526004016116d2929190612551565b60206040518083038186803b1580156116ea57600080fd5b505afa1580156116fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117229190611c59565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117d1578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b815260040161179a969594939291906124e2565b600060405180830381600087803b1580156117b457600080fd5b505af11580156117c8573d6000803e3d6000fd5b50505050611838565b8115611837576117f68673ffffffffffffffffffffffffffffffffffffffff16611b76565b15611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90612679565b60405180910390fd5b5b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a9906125f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611922576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611919906126f9565b60405180910390fd5b600061192c611101565b905061193c8188888888886112d4565b61194a81888888888861144d565b6119598188888888888861165e565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990612619565b60405180910390fd5b60006119dc611101565b90506119eb8186600087611b70565b6119fa818660008787876112d4565b836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a4491906128dc565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600154611a9491906128dc565b6001819055508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098868686604051611afb93929190612754565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611b619190612739565b60405180910390a35050505050565b50505050565b600080823b905060008111915050919050565b6000611b9c611b97846127e5565b6127b4565b905082815260208101848484011115611bb457600080fd5b611bbf84828561296f565b509392505050565b600081359050611bd681612a81565b92915050565b600081519050611beb81612a81565b92915050565b600082601f830112611c0257600080fd5b8135611c12848260208601611b89565b91505092915050565b600081359050611c2a81612a98565b92915050565b600060208284031215611c4257600080fd5b6000611c5084828501611bc7565b91505092915050565b600060208284031215611c6b57600080fd5b6000611c7984828501611bdc565b91505092915050565b60008060408385031215611c9557600080fd5b6000611ca385828601611bc7565b9250506020611cb485828601611bc7565b9150509250929050565b600080600060608486031215611cd357600080fd5b6000611ce186828701611bc7565b9350506020611cf286828701611bc7565b9250506040611d0386828701611c1b565b9150509250925092565b600080600080600060a08688031215611d2557600080fd5b6000611d3388828901611bc7565b9550506020611d4488828901611bc7565b9450506040611d5588828901611c1b565b935050606086013567ffffffffffffffff811115611d7257600080fd5b611d7e88828901611bf1565b925050608086013567ffffffffffffffff811115611d9b57600080fd5b611da788828901611bf1565b9150509295509295909350565b60008060408385031215611dc757600080fd5b6000611dd585828601611bc7565b9250506020611de685828601611c1b565b9150509250929050565b600080600060608486031215611e0557600080fd5b6000611e1386828701611bc7565b9350506020611e2486828701611c1b565b925050604084013567ffffffffffffffff811115611e4157600080fd5b611e4d86828701611bf1565b9150509250925092565b60008060008060808587031215611e6d57600080fd5b6000611e7b87828801611bc7565b9450506020611e8c87828801611c1b565b935050604085013567ffffffffffffffff811115611ea957600080fd5b611eb587828801611bf1565b925050606085013567ffffffffffffffff811115611ed257600080fd5b611ede87828801611bf1565b91505092959194509250565b60008060408385031215611efd57600080fd5b6000611f0b85828601611c1b565b925050602083013567ffffffffffffffff811115611f2857600080fd5b611f3485828601611bf1565b9150509250929050565b6000611f4a8383611f56565b60208301905092915050565b611f5f81612910565b82525050565b611f6e81612910565b82525050565b6000611f7f82612825565b611f898185612853565b9350611f9483612815565b8060005b83811015611fc5578151611fac8882611f3e565b9750611fb783612846565b925050600181019050611f98565b5085935050505092915050565b611fdb81612922565b82525050565b611fea8161292e565b82525050565b6000611ffb82612830565b6120058185612864565b935061201581856020860161297e565b61201e81612a70565b840191505092915050565b60006120348261283b565b61203e8185612875565b935061204e81856020860161297e565b61205781612a70565b840191505092915050565b600061206f602583612875565b91507f4552433737373a20617070726f76652066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120d5602283612875565b91507f4552433737373a2073656e642066726f6d20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061213b602283612875565b91507f4552433737373a206275726e2066726f6d20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006121a1602483612875565b91507f4552433737373a20617574686f72697a696e672073656c66206173206f70657260008301527f61746f72000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612207602183612875565b91507f4552433737373a207265766f6b696e672073656c66206173206f70657261746f60008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061226d604d83612875565b91507f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460008301527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208301527f6b656e73526563697069656e74000000000000000000000000000000000000006040830152606082019050919050565b60006122f9602483612875565b91507f4552433737373a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061235f602c83612875565b91507f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60008301527f7220666f7220686f6c64657200000000000000000000000000000000000000006020830152604082019050919050565b60006123c5602683612875565b91507f4552433737373a207472616e736665722066726f6d20746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061242b602083612875565b91507f4552433737373a2073656e6420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061246b602383612875565b91507f4552433737373a20617070726f766520746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6124cd81612958565b82525050565b6124dc81612962565b82525050565b600060c0820190506124f76000830189611f65565b6125046020830188611f65565b6125116040830187611f65565b61251e60608301866124c4565b81810360808301526125308185611ff0565b905081810360a08301526125448184611ff0565b9050979650505050505050565b60006040820190506125666000830185611f65565b6125736020830184611fe1565b9392505050565b600060208201905081810360008301526125948184611f74565b905092915050565b60006020820190506125b16000830184611fd2565b92915050565b600060208201905081810360008301526125d18184612029565b905092915050565b600060208201905081810360008301526125f281612062565b9050919050565b60006020820190508181036000830152612612816120c8565b9050919050565b600060208201905081810360008301526126328161212e565b9050919050565b6000602082019050818103600083015261265281612194565b9050919050565b60006020820190508181036000830152612672816121fa565b9050919050565b6000602082019050818103600083015261269281612260565b9050919050565b600060208201905081810360008301526126b2816122ec565b9050919050565b600060208201905081810360008301526126d281612352565b9050919050565b600060208201905081810360008301526126f2816123b8565b9050919050565b600060208201905081810360008301526127128161241e565b9050919050565b600060208201905081810360008301526127328161245e565b9050919050565b600060208201905061274e60008301846124c4565b92915050565b600060608201905061276960008301866124c4565b818103602083015261277b8185611ff0565b9050818103604083015261278f8184611ff0565b9050949350505050565b60006020820190506127ae60008301846124d3565b92915050565b6000604051905081810181811067ffffffffffffffff821117156127db576127da612a41565b5b8060405250919050565b600067ffffffffffffffff821115612800576127ff612a41565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061289182612958565b915061289c83612958565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128d1576128d06129e3565b5b828201905092915050565b60006128e782612958565b91506128f283612958565b925082821015612905576129046129e3565b5b828203905092915050565b600061291b82612938565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561299c578082015181840152602081019050612981565b838111156129ab576000848401525b50505050565b600060028204905060018216806129c957607f821691505b602082108114156129dd576129dc612a12565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612a8a81612910565b8114612a9557600080fd5b50565b612aa181612958565b8114612aac57600080fd5b5056fea2646970667358221220a061f9866a7c425e02b5959f292e8447c186d9455916343add00d28775d8cb2f64736f6c63430008000033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b6371146102e3578063dd62ed3e14610313578063fad8b32a14610343578063fc673c4f1461035f578063fe9d93031461037b57610116565b8063959b8c3f1461025d57806395d89b41146102795780639bd9bbc614610297578063a9059cbb146102b357610116565b806323b872dd116100e957806323b872dd146101a5578063313ce567146101d5578063556f0dc7146101f357806362ad1b831461021157806370a082311461022d57610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461015757806318160ddd14610187575b600080fd5b610123610397565b604051610130919061257a565b60405180910390f35b610141610425565b60405161014e91906125b7565b60405180910390f35b610171600480360381019061016c9190611db4565b6104b7565b60405161017e919061259c565b60405180910390f35b61018f6104da565b60405161019c9190612739565b60405180910390f35b6101bf60048036038101906101ba9190611cbe565b6104e4565b6040516101cc919061259c565b60405180910390f35b6101dd6106f5565b6040516101ea9190612799565b60405180910390f35b6101fb6106fe565b6040516102089190612739565b60405180910390f35b61022b60048036038101906102269190611d0d565b610707565b005b61024760048036038101906102429190611c30565b61076d565b6040516102549190612739565b60405180910390f35b61027760048036038101906102729190611c30565b6107b5565b005b610281610a16565b60405161028e91906125b7565b60405180910390f35b6102b160048036038101906102ac9190611df0565b610aa8565b005b6102cd60048036038101906102c89190611db4565b610ad2565b6040516102da919061259c565b60405180910390f35b6102fd60048036038101906102f89190611c82565b610be0565b60405161030a919061259c565b60405180910390f35b61032d60048036038101906103289190611c82565b610d91565b60405161033a9190612739565b60405180910390f35b61035d60048036038101906103589190611c30565b610e18565b005b61037960048036038101906103749190611e57565b611079565b005b61039560048036038101906103909190611eea565b6110db565b005b6060600480548060200260200160405190810160405280929190818152602001828054801561041b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103d1575b5050505050905090565b606060028054610434906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610460906129b1565b80156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b5050505050905090565b6000806104c2611101565b90506104cf818585611109565b600191505092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c90612699565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156105c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bc906126d9565b60405180910390fd5b60006105cf611101565b90506105fd8186868660405180602001604052806000815250604051806020016040528060008152506112d4565b61062981868686604051806020016040528060008152506040518060200160405280600081525061144d565b6106bb858285600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b691906128dc565b611109565b6106e9818686866040518060200160405280600081525060405180602001604052806000815250600061165e565b60019150509392505050565b60006012905090565b60006001905090565b610718610712611101565b86610be0565b610757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074e906126b9565b60405180910390fd5b61076685858585856001611842565b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8073ffffffffffffffffffffffffffffffffffffffff166107d4611101565b73ffffffffffffffffffffffffffffffffffffffff16141561082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082290612639565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109155760076000610889611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556109b2565b600160066000610923611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6109ba611101565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b606060038054610a25906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a51906129b1565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b610acd610ab3611101565b848484604051806020016040528060008152506001611842565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90612699565b60405180910390fd5b6000610b4d611101565b9050610b7b8182868660405180602001604052806000815250604051806020016040528060008152506112d4565b610ba781828686604051806020016040528060008152506040518060200160405280600081525061144d565b610bd5818286866040518060200160405280600081525060405180602001604052806000815250600061165e565b600191505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cf85750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610cf75750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610d895750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e20611101565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590612659565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8157600160076000610eee611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611015565b60066000610f8d611101565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b61101d611101565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b61108a611084611101565b85610be0565b6110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c0906126b9565b60405180910390fd5b6110d584848484611962565b50505050565b6110fd6110e6611101565b838360405180602001604052806000815250611962565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611170906125d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090612719565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112c79190612739565b60405180910390a3505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560001b6040518363ffffffff1660e01b8152600401611348929190612551565b60206040518083038186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113989190611c59565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611444578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b8152600401611411969594939291906124e2565b600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050505b50505050505050565b61145986868686611b70565b826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114a391906128dc565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461152f9190612886565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc826146779878686866040516115e993929190612754565b60405180910390a48373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161164e9190612739565b60405180910390a3505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473fff