{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC777PresetFixedSupplyUpgradeable",
  "sourceName": "contracts/token/ERC777/presets/ERC777PresetFixedSupplyUpgradeable.sol",
  "abi": [
    {
      "inputs": [],
      "name": "INITIALIZABLE_CONTRACT_ALREADY_INITIALIZED",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "INITIALIZABLE_CONTRACT_IS_NOT_INITIALIZING",
      "type": "error"
    },
    {
      "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": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "address[]",
          "name": "defaultOperators",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "0x608060405234801561001057600080fd5b5061365d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063768f950a116100cd578063d95b637111610081578063fad8b32a11610066578063fad8b32a1461039a578063fc673c4f146103b6578063fe9d9303146103d257610151565b8063d95b63711461033a578063dd62ed3e1461036a57610151565b806395d89b41116100b257806395d89b41146102d05780639bd9bbc6146102ee578063a9059cbb1461030a57610151565b8063768f950a14610298578063959b8c3f146102b457610151565b806323b872dd11610124578063556f0dc711610109578063556f0dc71461022e57806362ad1b831461024c57806370a082311461026857610151565b806323b872dd146101e0578063313ce5671461021057610151565b806306e485381461015657806306fdde0314610174578063095ea7b31461019257806318160ddd146101c2575b600080fd5b61015e6103ee565b60405161016b91906122ac565b60405180910390f35b61017c61047c565b6040516101899190612367565b60405180910390f35b6101ac60048036038101906101a791906123ff565b61050e565b6040516101b9919061245a565b60405180910390f35b6101ca610531565b6040516101d79190612484565b60405180910390f35b6101fa60048036038101906101f5919061249f565b61053b565b604051610207919061245a565b60405180910390f35b61021861058c565b604051610225919061250e565b60405180910390f35b610236610595565b6040516102439190612484565b60405180910390f35b6102666004803603810190610261919061265e565b61059e565b005b610282600480360381019061027d9190612711565b610604565b60405161028f9190612484565b60405180910390f35b6102b260048036038101906102ad91906128a7565b61064d565b005b6102ce60048036038101906102c99190612711565b61078f565b005b6102d86109ef565b6040516102e59190612367565b60405180910390f35b61030860048036038101906103039190612976565b610a81565b005b610324600480360381019061031f91906123ff565b610aab565b604051610331919061245a565b60405180910390f35b610354600480360381019061034f91906129e5565b610aeb565b604051610361919061245a565b60405180910390f35b610384600480360381019061037f91906129e5565b610c9c565b6040516103919190612484565b60405180910390f35b6103b460048036038101906103af9190612711565b610d23565b005b6103d060048036038101906103cb9190612a25565b610f83565b005b6103ec60048036038101906103e79190612ac4565b610fe5565b005b6060603780548060200260200160405190810160405280929190818152602001828054801561047257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610428575b5050505050905090565b60606035805461048b90612b4f565b80601f01602080910402602001604051908101604052809291908181526020018280546104b790612b4f565b80156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b60008061051961100b565b9050610526818585611013565b600191505092915050565b6000603454905090565b60008061054661100b565b90506105538582856111dc565b61058085858560405180602001604052806000815250604051806020016040528060008152506000611268565b60019150509392505050565b60006012905090565b60006001905090565b6105af6105a961100b565b86610aeb565b6105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e590612bf2565b60405180910390fd5b6105fd85858585856001611268565b5050505050565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060019054906101000a900460ff16159050801580610680575060008060009054906101000a900460ff1660ff1614155b80156106ad575061069030611386565b806106ac5750600160008054906101000a900460ff1660ff1614155b5b156106e4576040517f7ab8448200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610721576001600060016101000a81548160ff0219169083151502179055505b61072e86868686866113a9565b80156107875760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161077e9190612c57565b60405180910390a15b505050505050565b8073ffffffffffffffffffffffffffffffffffffffff166107ae61100b565b73ffffffffffffffffffffffffffffffffffffffff1603610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612ce4565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108ee57603a600061086261100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905561098b565b6001603960006108fc61100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61099361100b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b6060603680546109fe90612b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90612b4f565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b610aa6610a8c61100b565b848484604051806020016040528060008152506001611268565b505050565b6000610ae1610ab861100b565b848460405180602001604052806000815250604051806020016040528060008152506000611268565b6001905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c035750603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610c025750603a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610c945750603960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000603b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d2b61100b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f90612d76565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e8b576001603a6000610df861100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f1f565b60396000610e9761100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b610f2761100b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610f94610f8e61100b565b85610aeb565b610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612bf2565b60405180910390fd5b610fdf8484848461140e565b50505050565b611007610ff061100b565b83836040518060200160405280600081525061140e565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990612e08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890612e9a565b60405180910390fd5b80603b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111cf9190612484565b60405180910390a3505050565b60006111e88484610c9c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112625781811015611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90612f06565b60405180910390fd5b6112618484848403611013565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061302a565b60405180910390fd5b600061135061100b565b9050611360818888888888611662565b61136e8188888888886117c9565b61137d818888888888886119e6565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166113ef576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113fa858585611bb8565b6114078585858585611e20565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906130bc565b60405180910390fd5b600061148761100b565b905061149881866000878787611662565b6114a58186600087611e97565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561152c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115239061314e565b60405180910390fd5b848103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460346000828254611584919061319d565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516115ec93929190613226565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516116529190612484565b60405180910390a3505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956040518363ffffffff1660e01b81526004016116d3929190613293565b602060405180830381865afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171491906132d1565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117c0578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b815260040161178d969594939291906132fe565b600060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050505b50505050505050565b6117d586868686611e97565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611853906133df565b60405180910390fd5b838103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f191906133ff565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc8261467798787878760405161197093929190613226565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516119d59190612484565b60405180910390a350505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6040518363ffffffff1660e01b8152600401611a57929190613293565b602060405180830381865afa158015611a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9891906132d1565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b47578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b8152600401611b10969594939291906132fe565b600060405180830381600087803b158015611b2a57600080fd5b505af1158015611b3e573d6000803e3d6000fd5b50505050611bae565b8115611bad57611b6c8673ffffffffffffffffffffffffffffffffffffffff16611386565b15611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906134ed565b60405180910390fd5b5b5b5050505050505050565b600060019054906101000a900460ff16611bfe576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260359080519060200190611c1492919061208f565b508160369080519060200190611c2b92919061208f565b508060379080519060200190611c42929190612115565b5060005b8151811015611cd457600160386000848481518110611c6857611c6761350d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ccc9061353c565b915050611c46565b50731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054306040518463ffffffff1660e01b8152600401611d4693929190613584565b600060405180830381600087803b158015611d6057600080fd5b505af1158015611d74573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a306040518463ffffffff1660e01b8152600401611de993929190613584565b600060405180830381600087803b158015611e0357600080fd5b505af1158015611e17573d6000803e3d6000fd5b50505050505050565b600060019054906101000a900460ff16611e66576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e9081836040518060200160405280600081525060405180602001604052806000815250611e9d565b5050505050565b50505050565b611eab848484846001611eb1565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790613607565b60405180910390fd5b6000611f2a61100b565b9050611f398160008888611e97565b8460346000828254611f4b91906133ff565b9250508190555084603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fa191906133ff565b92505081905550611fb881600088888888886119e6565b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d87878760405161201993929190613226565b60405180910390a38573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161207f9190612484565b60405180910390a3505050505050565b82805461209b90612b4f565b90600052602060002090601f0160209004810192826120bd5760008555612104565b82601f106120d657805160ff1916838001178555612104565b82800160010185558215612104579182015b828111156121035782518255916020019190600101906120e8565b5b509050612111919061219f565b5090565b82805482825590600052602060002090810192821561218e579160200282015b8281111561218d5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612135565b5b50905061219b919061219f565b5090565b5b808211156121b85760008160009055506001016121a0565b5090565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612213826121e8565b9050919050565b61222381612208565b82525050565b6000612235838361221a565b60208301905092915050565b6000602082019050919050565b6000612259826121bc565b61226381856121c7565b935061226e836121d8565b8060005b8381101561229f5781516122868882612229565b975061229183612241565b925050600181019050612272565b5085935050505092915050565b600060208201905081810360008301526122c6818461224e565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123085780820151818401526020810190506122ed565b83811115612317576000848401525b50505050565b6000601f19601f8301169050919050565b6000612339826122ce565b61234381856122d9565b93506123538185602086016122ea565b61235c8161231d565b840191505092915050565b60006020820190508181036000830152612381818461232e565b905092915050565b6000604051905090565b600080fd5b600080fd5b6123a681612208565b81146123b157600080fd5b50565b6000813590506123c38161239d565b92915050565b6000819050919050565b6123dc816123c9565b81146123e757600080fd5b50565b6000813590506123f9816123d3565b92915050565b6000806040838503121561241657612415612393565b5b6000612424858286016123b4565b9250506020612435858286016123ea565b9150509250929050565b60008115159050919050565b6124548161243f565b82525050565b600060208201905061246f600083018461244b565b92915050565b61247e816123c9565b82525050565b60006020820190506124996000830184612475565b92915050565b6000806000606084860312156124b8576124b7612393565b5b60006124c6868287016123b4565b93505060206124d7868287016123b4565b92505060406124e8868287016123ea565b9150509250925092565b600060ff82169050919050565b612508816124f2565b82525050565b600060208201905061252360008301846124ff565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61256b8261231d565b810181811067ffffffffffffffff8211171561258a57612589612533565b5b80604052505050565b600061259d612389565b90506125a98282612562565b919050565b600067ffffffffffffffff8211156125c9576125c8612533565b5b6125d28261231d565b9050602081019050919050565b82818337600083830152505050565b60006126016125fc846125ae565b612593565b90508281526020810184848401111561261d5761261c61252e565b5b6126288482856125df565b509392505050565b600082601f83011261264557612644612529565b5b81356126558482602086016125ee565b91505092915050565b600080600080600060a0868803121561267a57612679612393565b5b6000612688888289016123b4565b9550506020612699888289016123b4565b94505060406126aa888289016123ea565b935050606086013567ffffffffffffffff8111156126cb576126ca612398565b5b6126d788828901612630565b925050608086013567ffffffffffffffff8111156126f8576126f7612398565b5b61270488828901612630565b9150509295509295909350565b60006020828403121561272757612726612393565b5b6000612735848285016123b4565b91505092915050565b600067ffffffffffffffff82111561275957612758612533565b5b6127628261231d565b9050602081019050919050565b600061278261277d8461273e565b612593565b90508281526020810184848401111561279e5761279d61252e565b5b6127a98482856125df565b509392505050565b600082601f8301126127c6576127c5612529565b5b81356127d684826020860161276f565b91505092915050565b600067ffffffffffffffff8211156127fa576127f9612533565b5b602082029050602081019050919050565b600080fd5b600061282361281e846127df565b612593565b905080838252602082019050602084028301858111156128465761284561280b565b5b835b8181101561286f578061285b88826123b4565b845260208401935050602081019050612848565b5050509392505050565b600082601f83011261288e5761288d612529565b5b813561289e848260208601612810565b91505092915050565b600080600080600060a086880312156128c3576128c2612393565b5b600086013567ffffffffffffffff8111156128e1576128e0612398565b5b6128ed888289016127b1565b955050602086013567ffffffffffffffff81111561290e5761290d612398565b5b61291a888289016127b1565b945050604086013567ffffffffffffffff81111561293b5761293a612398565b5b61294788828901612879565b9350506060612958888289016123ea565b9250506080612969888289016123b4565b9150509295509295909350565b60008060006060848603121561298f5761298e612393565b5b600061299d868287016123b4565b93505060206129ae868287016123ea565b925050604084013567ffffffffffffffff8111156129cf576129ce612398565b5b6129db86828701612630565b9150509250925092565b600080604083850312156129fc576129fb612393565b5b6000612a0a858286016123b4565b9250506020612a1b858286016123b4565b9150509250929050565b60008060008060808587031215612a3f57612a3e612393565b5b6000612a4d878288016123b4565b9450506020612a5e878288016123ea565b935050604085013567ffffffffffffffff811115612a7f57612a7e612398565b5b612a8b87828801612630565b925050606085013567ffffffffffffffff811115612aac57612aab612398565b5b612ab887828801612630565b91505092959194509250565b60008060408385031215612adb57612ada612393565b5b6000612ae9858286016123ea565b925050602083013567ffffffffffffffff811115612b0a57612b09612398565b5b612b1685828601612630565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b6757607f821691505b602082108103612b7a57612b79612b20565b5b50919050565b7f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60008201527f7220666f7220686f6c6465720000000000000000000000000000000000000000602082015250565b6000612bdc602c836122d9565b9150612be782612b80565b604082019050919050565b60006020820190508181036000830152612c0b81612bcf565b9050919050565b6000819050919050565b6000819050919050565b6000612c41612c3c612c3784612c12565b612c1c565b6124f2565b9050919050565b612c5181612c26565b82525050565b6000602082019050612c6c6000830184612c48565b92915050565b7f4552433737373a20617574686f72697a696e672073656c66206173206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b6000612cce6024836122d9565b9150612cd982612c72565b604082019050919050565b60006020820190508181036000830152612cfd81612cc1565b9050919050565b7f4552433737373a207265766f6b696e672073656c66206173206f70657261746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d606021836122d9565b9150612d6b82612d04565b604082019050919050565b60006020820190508181036000830152612d8f81612d53565b9050919050565b7f4552433737373a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612df26025836122d9565b9150612dfd82612d96565b604082019050919050565b60006020820190508181036000830152612e2181612de5565b9050919050565b7f4552433737373a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e846023836122d9565b9150612e8f82612e28565b604082019050919050565b60006020820190508181036000830152612eb381612e77565b9050919050565b7f4552433737373a20696e73756666696369656e7420616c6c6f77616e63650000600082015250565b6000612ef0601e836122d9565b9150612efb82612eba565b602082019050919050565b60006020820190508181036000830152612f1f81612ee3565b9050919050565b7f4552433737373a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f826026836122d9565b9150612f8d82612f26565b604082019050919050565b60006020820190508181036000830152612fb181612f75565b9050919050565b7f4552433737373a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130146024836122d9565b915061301f82612fb8565b604082019050919050565b6000602082019050818103600083015261304381613007565b9050919050565b7f4552433737373a206275726e2066726f6d20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006130a66022836122d9565b91506130b18261304a565b604082019050919050565b600060208201905081810360008301526130d581613099565b9050919050565b7f4552433737373a206275726e20616d6f756e7420657863656564732062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006131386023836122d9565b9150613143826130dc565b604082019050919050565b600060208201905081810360008301526131678161312b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131a8826123c9565b91506131b3836123c9565b9250828210156131c6576131c561316e565b5b828203905092915050565b600081519050919050565b600082825260208201905092915050565b60006131f8826131d1565b61320281856131dc565b93506132128185602086016122ea565b61321b8161231d565b840191505092915050565b600060608201905061323b6000830186612475565b818103602083015261324d81856131ed565b9050818103604083015261326181846131ed565b9050949350505050565b61327481612208565b82525050565b6000819050919050565b61328d8161327a565b82525050565b60006040820190506132a8600083018561326b565b6132b56020830184613284565b9392505050565b6000815190506132cb8161239d565b92915050565b6000602082840312156132e7576132e6612393565b5b60006132f5848285016132bc565b91505092915050565b600060c082019050613313600083018961326b565b613320602083018861326b565b61332d604083018761326b565b61333a6060830186612475565b818103608083015261334c81856131ed565b905081810360a083015261336081846131ed565b9050979650505050505050565b7f4552433737373a207472616e7366657220616d6f756e7420657863656564732060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b60006133c96027836122d9565b91506133d48261336d565b604082019050919050565b600060208201905081810360008301526133f8816133bc565b9050919050565b600061340a826123c9565b9150613415836123c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561344a5761344961316e565b5b828201905092915050565b7f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460008201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208201527f6b656e73526563697069656e7400000000000000000000000000000000000000604082015250565b60006134d7604d836122d9565b91506134e282613455565b606082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613547826123c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135795761357861316e565b5b600182019050919050565b6000606082019050613599600083018661326b565b6135a66020830185613284565b6135b3604083018461326b565b949350505050565b7f4552433737373a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006135f16020836122d9565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b905091905056fea26469706673582212206f8cf023401db284ede2a84c8300ef240d81352b49d79c7e7ec442b335098db464736f6c634300080d0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c8063768f950a116100cd578063d95b637111610081578063fad8b32a11610066578063fad8b32a1461039a578063fc673c4f146103b6578063fe9d9303146103d257610151565b8063d95b63711461033a578063dd62ed3e1461036a57610151565b806395d89b41116100b257806395d89b41146102d05780639bd9bbc6146102ee578063a9059cbb1461030a57610151565b8063768f950a14610298578063959b8c3f146102b457610151565b806323b872dd11610124578063556f0dc711610109578063556f0dc71461022e57806362ad1b831461024c57806370a082311461026857610151565b806323b872dd146101e0578063313ce5671461021057610151565b806306e485381461015657806306fdde0314610174578063095ea7b31461019257806318160ddd146101c2575b600080fd5b61015e6103ee565b60405161016b91906122ac565b60405180910390f35b61017c61047c565b6040516101899190612367565b60405180910390f35b6101ac60048036038101906101a791906123ff565b61050e565b6040516101b9919061245a565b60405180910390f35b6101ca610531565b6040516101d79190612484565b60405180910390f35b6101fa60048036038101906101f5919061249f565b61053b565b604051610207919061245a565b60405180910390f35b61021861058c565b604051610225919061250e565b60405180910390f35b610236610595565b6040516102439190612484565b60405180910390f35b6102666004803603810190610261919061265e565b61059e565b005b610282600480360381019061027d9190612711565b610604565b60405161028f9190612484565b60405180910390f35b6102b260048036038101906102ad91906128a7565b61064d565b005b6102ce60048036038101906102c99190612711565b61078f565b005b6102d86109ef565b6040516102e59190612367565b60405180910390f35b61030860048036038101906103039190612976565b610a81565b005b610324600480360381019061031f91906123ff565b610aab565b604051610331919061245a565b60405180910390f35b610354600480360381019061034f91906129e5565b610aeb565b604051610361919061245a565b60405180910390f35b610384600480360381019061037f91906129e5565b610c9c565b6040516103919190612484565b60405180910390f35b6103b460048036038101906103af9190612711565b610d23565b005b6103d060048036038101906103cb9190612a25565b610f83565b005b6103ec60048036038101906103e79190612ac4565b610fe5565b005b6060603780548060200260200160405190810160405280929190818152602001828054801561047257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610428575b5050505050905090565b60606035805461048b90612b4f565b80601f01602080910402602001604051908101604052809291908181526020018280546104b790612b4f565b80156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b60008061051961100b565b9050610526818585611013565b600191505092915050565b6000603454905090565b60008061054661100b565b90506105538582856111dc565b61058085858560405180602001604052806000815250604051806020016040528060008152506000611268565b60019150509392505050565b60006012905090565b60006001905090565b6105af6105a961100b565b86610aeb565b6105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e590612bf2565b60405180910390fd5b6105fd85858585856001611268565b5050505050565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060019054906101000a900460ff16159050801580610680575060008060009054906101000a900460ff1660ff1614155b80156106ad575061069030611386565b806106ac5750600160008054906101000a900460ff1660ff1614155b5b156106e4576040517f7ab8448200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610721576001600060016101000a81548160ff0219169083151502179055505b61072e86868686866113a9565b80156107875760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161077e9190612c57565b60405180910390a15b505050505050565b8073ffffffffffffffffffffffffffffffffffffffff166107ae61100b565b73ffffffffffffffffffffffffffffffffffffffff1603610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612ce4565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108ee57603a600061086261100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905561098b565b6001603960006108fc61100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61099361100b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b6060603680546109fe90612b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90612b4f565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b610aa6610a8c61100b565b848484604051806020016040528060008152506001611268565b505050565b6000610ae1610ab861100b565b848460405180602001604052806000815250604051806020016040528060008152506000611268565b6001905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c035750603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610c025750603a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610c945750603960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000603b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d2b61100b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f90612d76565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e8b576001603a6000610df861100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f1f565b60396000610e9761100b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b610f2761100b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610f94610f8e61100b565b85610aeb565b610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612bf2565b60405180910390fd5b610fdf8484848461140e565b50505050565b611007610ff061100b565b83836040518060200160405280600081525061140e565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990612e08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890612e9a565b60405180910390fd5b80603b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111cf9190612484565b60405180910390a3505050565b60006111e88484610c9c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112625781811015611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90612f06565b60405180910390fd5b6112618484848403611013565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061302a565b60405180910390fd5b600061135061100b565b9050611360818888888888611662565b61136e8188888888886117c9565b61137d818888888888886119e6565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166113ef576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113fa858585611bb8565b6114078585858585611e20565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906130bc565b60405180910390fd5b600061148761100b565b905061149881866000878787611662565b6114a58186600087611e97565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561152c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115239061314e565b60405180910390fd5b848103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460346000828254611584919061319d565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516115ec93929190613226565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516116529190612484565b60405180910390a3505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956040518363ffffffff1660e01b81526004016116d3929190613293565b602060405180830381865afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171491906132d1565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117c0578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b815260040161178d969594939291906132fe565b600060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050505b50505050505050565b6117d586868686611e97565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611853906133df565b60405180910390fd5b838103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f191906133ff565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc8261467798787878760405161197093929190613226565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516119d59190612484565b60405180910390a350505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6040518363ffffffff1660e01b8152600401611a57929190613293565b602060405180830381865afa158015611a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9891906132d1565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b47578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b8152600401611b10969594939291906132fe565b600060405180830381600087803b158015611b2a57600080fd5b505af1158015611b3e573d6000803e3d6000fd5b50505050611bae565b8115611bad57611b6c8673ffffffffffffffffffffffffffffffffffffffff16611386565b15611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906134ed565b60405180910390fd5b5b5b5050505050505050565b600060019054906101000a900460ff16611bfe576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260359080519060200190611c1492919061208f565b508160369080519060200190611c2b92919061208f565b508060379080519060200190611c42929190612115565b5060005b8151811015611cd457600160386000848481518110611c6857611c6761350d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ccc9061353c565b915050611c46565b50731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054306040518463ffffffff1660e01b8152600401611d4693929190613584565b600060405180830381600087803b158015611d6057600080fd5b505af1158015611d74573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a306040518463ffffffff1660e01b8152600401611de993929190613584565b600060405180830381600087803b158015611e0357600080fd5b505af1158015611e17573d6000803e3d6000fd5b50505050505050565b600060019054906101000a900460ff16611e66576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e9081836040518060200160405280600081525060405180602001604052806000815250611e9d565b5050505050565b50505050565b611eab848484846001611eb1565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790613607565b60405180910390fd5b6000611f2a61100b565b9050611f398160008888611e97565b8460346000828254611f4b91906133ff565b9250508190555084603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fa191906133ff565b92505081905550611fb881600088888888886119e6565b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d87878760405161201993929190613226565b60405180910390a38573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161207f9190612484565b60405180910390a3505050505050565b82805461209b90612b4f565b90600052602060002090601f0160209004810192826120bd5760008555612104565b82601f106120d657805160ff1916838001178555612104565b82800160010185558215612104579182015b828111156121035782518255916020019190600101906120e8565b5b509050612111919061219f565b5090565b82805482825590600052602060002090810192821561218e579160200282015b8281111561218d5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612135565b5b50905061219b919061219f565b5090565b5b808211156121b85760008160009055506001016121a0565b5090565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612213826121e8565b9050919050565b61222381612208565b82525050565b6000612235838361221a565b60208301905092915050565b6000602082019050919050565b6000612259826121bc565b61226381856121c7565b935061226e836121d8565b8060005b8381101561229f5781516122868882612229565b975061229183612241565b925050600181019050612272565b5085935050505092915050565b600060208201905081810360008301526122c6818461224e565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123085780820151818401526020810190506122ed565b83811115612317576000848401525b50505050565b6000601f19601f8301169050919050565b6000612339826122ce565b61234381856122d9565b93506123538185602086016122ea565b61235c8161231d565b840191505092915050565b60006020820190508181036000830152612381818461232e565b905092915050565b6000604051905090565b600080fd5b600080fd5b6123a681612208565b81146123b157600080fd5b50565b6000813590506123c38161239d565b92915050565b6000819050919050565b6123dc816123c9565b81146123e757600080fd5b50565b6000813590506123f9816123d3565b92915050565b6000806040838503121561241657612415612393565b5b6000612424858286016123b4565b9250506020612435858286016123ea565b9150509250929050565b60008115159050919050565b6124548161243f565b82525050565b600060208201905061246f600083018461244b565b92915050565b61247e816123c9565b82525050565b60006020820190506124996000830184612475565b92915050565b6000806000606084860312156124b8576124b7612393565b5b60006124c6868287016123b4565b93505060206124d7868287016123b4565b92505060406124e8868287016123ea565b9150509250925092565b600060ff82169050919050565b612508816124f2565b82525050565b600060208201905061252360008301846124ff565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61256b8261231d565b810181811067ffffffffffffffff8211171561258a57612589612533565b5b80604052505050565b600061259d612389565b90506125a98282612562565b919050565b600067ffffffffffffffff8211156125c9576125c8612533565b5b6125d28261231d565b9050602081019050919050565b82818337600083830152505050565b60006126016125fc846125ae565b612593565b90508281526020810184848401111561261d5761261c61252e565b5b6126288482856125df565b509392505050565b600082601f83011261264557612644612529565b5b81356126558482602086016125ee565b91505092915050565b600080600080600060a0868803121561267a57612679612393565b5b6000612688888289016123b4565b9550506020612699888289016123b4565b94505060406126aa888289016123ea565b935050606086013567ffffffffffffffff8111156126cb576126ca612398565b5b6126d788828901612630565b925050608086013567ffffffffffffffff8111156126f8576126f7612398565b5b61270488828901612630565b9150509295509295909350565b60006020828403121561272757612726612393565b5b6000612735848285016123b4565b91505092915050565b600067ffffffffffffffff82111561275957612758612533565b5b6127628261231d565b9050602081019050919050565b600061278261277d8461273e565b612593565b90508281526020810184848401111561279e5761279d61252e565b5b6127a98482856125df565b509392505050565b600082601f8301126127c6576127c5612529565b5b81356127d684826020860161276f565b91505092915050565b600067ffffffffffffffff8211156127fa576127f9612533565b5b602082029050602081019050919050565b600080fd5b600061282361281e846127df565b612593565b905080838252602082019050602084028301858111156128465761284561280b565b5b835b8181101561286f578061285b88826123b4565b845260208401935050602081019050612848565b5050509392505050565b600082601f83011261288e5761288d612529565b5b813561289e848260208601612810565b91505092915050565b600080600080600060a086880312156128c3576128c2612393565b5b600086013567ffffffffffffffff8111156128e1576128e0612398565b5b6128ed888289016127b1565b955050602086013567ffffffffffffffff81111561290e5761290d612398565b5b61291a888289016127b1565b945050604086013567ffffffffffffffff81111561293b5761293a612398565b5b61294788828901612879565b9350506060612958888289016123ea565b9250506080612969888289016123b4565b9150509295509295909350565b60008060006060848603121561298f5761298e612393565b5b600061299d868287016123b4565b93505060206129ae868287016123ea565b925050604084013567ffffffffffffffff8111156129cf576129ce612398565b5b6129db86828701612630565b9150509250925092565b600080604083850312156129fc576129fb612393565b5b6000612a0a858286016123b4565b9250506020612a1b858286016123b4565b9150509250929050565b60008060008060808587031215612a3f57612a3e612393565b5b6000612a4d878288016123b4565b9450506020612a5e878288016123ea565b935050604085013567ffffffffffffffff811115612a7f57612a7e612398565b5b612a8b87828801612630565b925050606085013567ffffffffffffffff811115612aac57612aab612398565b5b612ab887828801612630565b91505092959194509250565b60008060408385031215612adb57612ada612393565b5b6000612ae9858286016123ea565b925050602083013567ffffffffffffffff811115612b0a57612b09612398565b5b612b1685828601612630565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b6757607f821691505b602082108103612b7a57612b79612b20565b5b50919050565b7f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60008201527f7220666f7220686f6c6465720000000000000000000000000000000000000000602082015250565b6000612bdc602c836122d9565b9150612be782612b80565b604082019050919050565b60006020820190508181036000830152612c0b81612bcf565b9050919050565b6000819050919050565b6000819050919050565b6000612c41612c3c612c3784612c12565b612c1c565b6124f2565b9050919050565b612c5181612c26565b82525050565b6000602082019050612c6c6000830184612c48565b92915050565b7f4552433737373a20617574686f72697a696e672073656c66206173206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b6000612cce6024836122d9565b9150612cd982612c72565b604082019050919050565b60006020820190508181036000830152612cfd81612cc1565b9050919050565b7f4552433737373a207265766f6b696e672073656c66206173206f70657261746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d606021836122d9565b9150612d6b82612d04565b604082019050919050565b60006020820190508181036000830152612d8f81612d53565b9050919050565b7f4552433737373a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612df26025836122d9565b9150612dfd82612d96565b604082019050919050565b60006020820190508181036000830152612e2181612de5565b9050919050565b7f4552433737373a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e846023836122d9565b9150612e8f82612e28565b604082019050919050565b60006020820190508181036000830152612eb381612e77565b9050919050565b7f4552433737373a20696e73756666696369656e7420616c6c6f77616e63650000600082015250565b6000612ef0601e836122d9565b9150612efb82612eba565b602082019050919050565b60006020820190508181036000830152612f1f81612ee3565b9050919050565b7f4552433737373a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f826026836122d9565b9150612f8d82612f26565b604082019050919050565b60006020820190508181036000830152612fb181612f75565b9050919050565b7f4552433737373a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130146024836122d9565b915061301f82612fb8565b604082019050919050565b6000602082019050818103600083015261304381613007565b9050919050565b7f4552433737373a206275726e2066726f6d20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006130a66022836122d9565b91506130b18261304a565b604082019050919050565b600060208201905081810360008301526130d581613099565b9050919050565b7f4552433737373a206275726e20616d6f756e7420657863656564732062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006131386023836122d9565b9150613143826130dc565b604082019050919050565b600060208201905081810360008301526131678161312b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131a8826123c9565b91506131b3836123c9565b9250828210156131c6576131c561316e565b5b828203905092915050565b600081519050919050565b600082825260208201905092915050565b60006131f8826131d1565b61320281856131dc565b93506132128185602086016122ea565b61321b8161231d565b840191505092915050565b600060608201905061323b6000830186612475565b818103602083015261324d81856131ed565b9050818103604083015261326181846131ed565b9050949350505050565b61327481612208565b82525050565b6000819050919050565b61328d8161327a565b82525050565b60006040820190506132a8600083018561326b565b6132b56020830184613284565b9392505050565b6000815190506132cb8161239d565b92915050565b6000602082840312156132e7576132e6612393565b5b60006132f5848285016132bc565b91505092915050565b600060c082019050613313600083018961326b565b613320602083018861326b565b61332d604083018761326b565b61333a6060830186612475565b818103608083015261334c81856131ed565b905081810360a083015261336081846131ed565b9050979650505050505050565b7f4552433737373a207472616e7366657220616d6f756e7420657863656564732060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b60006133c96027836122d9565b91506133d48261336d565b604082019050919050565b600060208201905081810360008301526133f8816133bc565b9050919050565b600061340a826123c9565b9150613415836123c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561344a5761344961316e565b5b828201905092915050565b7f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460008201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208201527f6b656e73526563697069656e7400000000000000000000000000000000000000604082015250565b60006134d7604d836122d9565b91506134e282613455565b606082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613547826123c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135795761357861316e565b5b600182019050919050565b6000606082019050613599600083018661326b565b6135a66020830185613284565b6135b3604083018461326b565b949350505050565b7f4552433737373a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006135f16020836122d9565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b905091905056fea26469706673582212206f8cf023401db284ede2a84c8300ef240d81352b49d79c7e7ec442b335098db464736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
