{
  "abi": [
    {
      "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"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "authorizeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "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": "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"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "userdoc": {
    "version": 1,
    "kind": "user"
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "details": "Interface of the ERC777Token standard as defined in the EIP. This contract uses the https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let token holders and recipients react to token movements by using setting implementers for the associated interfaces in said registry. See {IERC1820Registry} and {ERC1820Implementer}.",
    "methods": {
      "authorizeOperator(address)": {
        "details": "Make an account an operator of the caller. See {isOperatorFor}. Emits an {AuthorizedOperator} event. Requirements - `operator` cannot be calling address."
      },
      "balanceOf(address)": {
        "details": "Returns the amount of tokens owned by an account (`owner`)."
      },
      "burn(uint256,bytes)": {
        "details": "Destroys `amount` tokens from the caller's account, reducing the total supply. If a send hook is registered for the caller, the corresponding function will be called with `data` and empty `operatorData`. See {IERC777Sender}. Emits a {Burned} event. Requirements - the caller must have at least `amount` tokens."
      },
      "defaultOperators()": {
        "details": "Returns the list of default operators. These accounts are operators for all token holders, even if {authorizeOperator} was never called on them. This list is immutable, but individual holders may revoke these via {revokeOperator}, in which case {isOperatorFor} will return false."
      },
      "granularity()": {
        "details": "Returns the smallest part of the token that is not divisible. This means all token operations (creation, movement and destruction) must have amounts that are a multiple of this number. For most token contracts, this value will equal 1."
      },
      "isOperatorFor(address,address)": {
        "details": "Returns true if an account is an operator of `tokenHolder`. Operators can send and burn tokens on behalf of their owners. All accounts are their own operator. See {operatorSend} and {operatorBurn}."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "operatorBurn(address,uint256,bytes,bytes)": {
        "details": "Destroys `amount` tokens from `account`, reducing the total supply. The caller must be an operator of `account`. If a send hook is registered for `account`, the corresponding function will be called with `data` and `operatorData`. See {IERC777Sender}. Emits a {Burned} event. Requirements - `account` cannot be the zero address. - `account` must have at least `amount` tokens. - the caller must be an operator for `account`."
      },
      "operatorSend(address,address,uint256,bytes,bytes)": {
        "details": "Moves `amount` tokens from `sender` to `recipient`. The caller must be an operator of `sender`. If send or receive hooks are registered for `sender` and `recipient`, the corresponding functions will be called with `data` and `operatorData`. See {IERC777Sender} and {IERC777Recipient}. Emits a {Sent} event. Requirements - `sender` cannot be the zero address. - `sender` must have at least `amount` tokens. - the caller must be an operator for `sender`. - `recipient` cannot be the zero address. - if `recipient` is a contract, it must implement the {IERC777Recipient} interface."
      },
      "revokeOperator(address)": {
        "details": "Revoke an account's operator status for the caller. See {isOperatorFor} and {defaultOperators}. Emits a {RevokedOperator} event. Requirements - `operator` cannot be calling address."
      },
      "send(address,uint256,bytes)": {
        "details": "Moves `amount` tokens from the caller's account to `recipient`. If send or receive hooks are registered for the caller and `recipient`, the corresponding functions will be called with `data` and empty `operatorData`. See {IERC777Sender} and {IERC777Recipient}. Emits a {Sent} event. Requirements - the caller must have at least `amount` tokens. - `recipient` cannot be the zero address. - if `recipient` is a contract, it must implement the {IERC777Recipient} interface."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "Returns the amount of tokens in existence."
      }
    }
  },
  "ast": {
    "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777.sol",
    "exportedSymbols": {
      "IERC777": [
        2047
      ]
    },
    "id": 2048,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1886,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "93:23:5"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IERC777",
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 1887,
          "nodeType": "StructuredDocumentation",
          "src": "118:372:5",
          "text": " @dev Interface of the ERC777Token standard as defined in the EIP.\n This contract uses the\n https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let\n token holders and recipients react to token movements by using setting implementers\n for the associated interfaces in said registry. See {IERC1820Registry} and\n {ERC1820Implementer}."
        },
        "fullyImplemented": false,
        "id": 2047,
        "linearizedBaseContracts": [
          2047
        ],
        "name": "IERC777",
        "nameLocation": "501:7:5",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 1888,
              "nodeType": "StructuredDocumentation",
              "src": "515:199:5",
              "text": " @dev Emitted when `amount` tokens are created by `operator` and assigned to `to`.\n Note that some additional user `data` and `operatorData` can be logged in the event."
            },
            "eventSelector": "2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d",
            "id": 1900,
            "name": "Minted",
            "nameLocation": "725:6:5",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1890,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "748:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1900,
                  "src": "732:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1889,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "732:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1892,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "774:2:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1900,
                  "src": "758:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1891,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "758:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1894,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "786:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1900,
                  "src": "778:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1893,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "778:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1896,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "800:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1900,
                  "src": "794:10:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1895,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "794:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1898,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "812:12:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1900,
                  "src": "806:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1897,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "806:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "731:94:5"
            },
            "src": "719:107:5"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 1901,
              "nodeType": "StructuredDocumentation",
              "src": "832:187:5",
              "text": " @dev Emitted when `operator` destroys `amount` tokens from `account`.\n Note that some additional user `data` and `operatorData` can be logged in the event."
            },
            "eventSelector": "a78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098",
            "id": 1913,
            "name": "Burned",
            "nameLocation": "1030:6:5",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1903,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "1053:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1913,
                  "src": "1037:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1902,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1037:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1905,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "1079:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1913,
                  "src": "1063:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1904,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1063:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1907,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1093:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1913,
                  "src": "1085:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1906,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1085:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1909,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "1107:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1913,
                  "src": "1101:10:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1908,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1101:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1911,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "1119:12:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1913,
                  "src": "1113:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1910,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1113:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1036:96:5"
            },
            "src": "1024:109:5"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 1914,
              "nodeType": "StructuredDocumentation",
              "src": "1139:82:5",
              "text": " @dev Emitted when `operator` is made operator for `tokenHolder`"
            },
            "eventSelector": "f4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9",
            "id": 1920,
            "name": "AuthorizedOperator",
            "nameLocation": "1232:18:5",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1919,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1916,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "1267:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1920,
                  "src": "1251:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1915,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1251:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1918,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nameLocation": "1293:11:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1920,
                  "src": "1277:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1917,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1277:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1250:55:5"
            },
            "src": "1226:80:5"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 1921,
              "nodeType": "StructuredDocumentation",
              "src": "1312:96:5",
              "text": " @dev Emitted when `operator` is revoked its operator status for `tokenHolder`"
            },
            "eventSelector": "50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1",
            "id": 1927,
            "name": "RevokedOperator",
            "nameLocation": "1419:15:5",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1923,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "1451:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1927,
                  "src": "1435:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1925,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nameLocation": "1477:11:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1927,
                  "src": "1461:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1924,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1461:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1434:55:5"
            },
            "src": "1413:77:5"
          },
          {
            "documentation": {
              "id": 1928,
              "nodeType": "StructuredDocumentation",
              "src": "1496:54:5",
              "text": " @dev Returns the name of the token."
            },
            "functionSelector": "06fdde03",
            "id": 1933,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nameLocation": "1564:4:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1929,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1568:2:5"
            },
            "returnParameters": {
              "id": 1932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1931,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "1594:13:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1930,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1594:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1593:15:5"
            },
            "scope": 2047,
            "src": "1555:54:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1934,
              "nodeType": "StructuredDocumentation",
              "src": "1615:102:5",
              "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
            },
            "functionSelector": "95d89b41",
            "id": 1939,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nameLocation": "1731:6:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1935,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1737:2:5"
            },
            "returnParameters": {
              "id": 1938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1937,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1939,
                  "src": "1763:13:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1936,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1763:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1762:15:5"
            },
            "scope": 2047,
            "src": "1722:56:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1940,
              "nodeType": "StructuredDocumentation",
              "src": "1784:287:5",
              "text": " @dev Returns the smallest part of the token that is not divisible. This\n means all token operations (creation, movement and destruction) must have\n amounts that are a multiple of this number.\n For most token contracts, this value will equal 1."
            },
            "functionSelector": "556f0dc7",
            "id": 1945,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "granularity",
            "nameLocation": "2085:11:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1941,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2096:2:5"
            },
            "returnParameters": {
              "id": 1944,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1943,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1945,
                  "src": "2122:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1942,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2122:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2121:9:5"
            },
            "scope": 2047,
            "src": "2076:55:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1946,
              "nodeType": "StructuredDocumentation",
              "src": "2137:66:5",
              "text": " @dev Returns the amount of tokens in existence."
            },
            "functionSelector": "18160ddd",
            "id": 1951,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "2217:11:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1947,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2228:2:5"
            },
            "returnParameters": {
              "id": 1950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1949,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1951,
                  "src": "2254:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1948,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2254:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2253:9:5"
            },
            "scope": 2047,
            "src": "2208:55:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1952,
              "nodeType": "StructuredDocumentation",
              "src": "2269:83:5",
              "text": " @dev Returns the amount of tokens owned by an account (`owner`)."
            },
            "functionSelector": "70a08231",
            "id": 1959,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "2366:9:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1954,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "2384:5:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "2376:13:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1953,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2376:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2375:15:5"
            },
            "returnParameters": {
              "id": 1958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1957,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "2414:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1956,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2414:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2413:9:5"
            },
            "scope": 2047,
            "src": "2357:66:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1960,
              "nodeType": "StructuredDocumentation",
              "src": "2429:585:5",
              "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n If send or receive hooks are registered for the caller and `recipient`,\n the corresponding functions will be called with `data` and empty\n `operatorData`. See {IERC777Sender} and {IERC777Recipient}.\n Emits a {Sent} event.\n Requirements\n - the caller must have at least `amount` tokens.\n - `recipient` cannot be the zero address.\n - if `recipient` is a contract, it must implement the {IERC777Recipient}\n interface."
            },
            "functionSelector": "9bd9bbc6",
            "id": 1969,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "send",
            "nameLocation": "3028:4:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1962,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nameLocation": "3050:9:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1969,
                  "src": "3042:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3042:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1964,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3077:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1969,
                  "src": "3069:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3069:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1966,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "3108:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1969,
                  "src": "3093:19:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1965,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3093:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3032:86:5"
            },
            "returnParameters": {
              "id": 1968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3127:0:5"
            },
            "scope": 2047,
            "src": "3019:109:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1970,
              "nodeType": "StructuredDocumentation",
              "src": "3134:404:5",
              "text": " @dev Destroys `amount` tokens from the caller's account, reducing the\n total supply.\n If a send hook is registered for the caller, the corresponding function\n will be called with `data` and empty `operatorData`. See {IERC777Sender}.\n Emits a {Burned} event.\n Requirements\n - the caller must have at least `amount` tokens."
            },
            "functionSelector": "fe9d9303",
            "id": 1977,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "burn",
            "nameLocation": "3552:4:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1972,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3565:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1977,
                  "src": "3557:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3557:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1974,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "3588:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1977,
                  "src": "3573:19:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1973,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3573:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3556:37:5"
            },
            "returnParameters": {
              "id": 1976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3602:0:5"
            },
            "scope": 2047,
            "src": "3543:60:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1978,
              "nodeType": "StructuredDocumentation",
              "src": "3609:249:5",
              "text": " @dev Returns true if an account is an operator of `tokenHolder`.\n Operators can send and burn tokens on behalf of their owners. All\n accounts are their own operator.\n See {operatorSend} and {operatorBurn}."
            },
            "functionSelector": "d95b6371",
            "id": 1987,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isOperatorFor",
            "nameLocation": "3872:13:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1980,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "3894:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1987,
                  "src": "3886:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1979,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3886:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1982,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nameLocation": "3912:11:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1987,
                  "src": "3904:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3904:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3885:39:5"
            },
            "returnParameters": {
              "id": 1986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1985,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1987,
                  "src": "3948:4:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1984,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3948:4:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3947:6:5"
            },
            "scope": 2047,
            "src": "3863:91:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1988,
              "nodeType": "StructuredDocumentation",
              "src": "3960:233:5",
              "text": " @dev Make an account an operator of the caller.\n See {isOperatorFor}.\n Emits an {AuthorizedOperator} event.\n Requirements\n - `operator` cannot be calling address."
            },
            "functionSelector": "959b8c3f",
            "id": 1993,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "authorizeOperator",
            "nameLocation": "4207:17:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1990,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4233:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1993,
                  "src": "4225:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1989,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4225:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4224:18:5"
            },
            "returnParameters": {
              "id": 1992,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4251:0:5"
            },
            "scope": 2047,
            "src": "4198:54:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 1994,
              "nodeType": "StructuredDocumentation",
              "src": "4258:261:5",
              "text": " @dev Revoke an account's operator status for the caller.\n See {isOperatorFor} and {defaultOperators}.\n Emits a {RevokedOperator} event.\n Requirements\n - `operator` cannot be calling address."
            },
            "functionSelector": "fad8b32a",
            "id": 1999,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "revokeOperator",
            "nameLocation": "4533:14:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1997,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1996,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4556:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 1999,
                  "src": "4548:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1995,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4548:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4547:18:5"
            },
            "returnParameters": {
              "id": 1998,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4574:0:5"
            },
            "scope": 2047,
            "src": "4524:51:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2000,
              "nodeType": "StructuredDocumentation",
              "src": "4581:338:5",
              "text": " @dev Returns the list of default operators. These accounts are operators\n for all token holders, even if {authorizeOperator} was never called on\n them.\n This list is immutable, but individual holders may revoke these via\n {revokeOperator}, in which case {isOperatorFor} will return false."
            },
            "functionSelector": "06e48538",
            "id": 2006,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "defaultOperators",
            "nameLocation": "4933:16:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2001,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4949:2:5"
            },
            "returnParameters": {
              "id": 2005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2004,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2006,
                  "src": "4975:16:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2002,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4975:7:5",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 2003,
                    "nodeType": "ArrayTypeName",
                    "src": "4975:9:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4974:18:5"
            },
            "scope": 2047,
            "src": "4924:69:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2007,
              "nodeType": "StructuredDocumentation",
              "src": "4999:714:5",
              "text": " @dev Moves `amount` tokens from `sender` to `recipient`. The caller must\n be an operator of `sender`.\n If send or receive hooks are registered for `sender` and `recipient`,\n the corresponding functions will be called with `data` and\n `operatorData`. See {IERC777Sender} and {IERC777Recipient}.\n Emits a {Sent} event.\n Requirements\n - `sender` cannot be the zero address.\n - `sender` must have at least `amount` tokens.\n - the caller must be an operator for `sender`.\n - `recipient` cannot be the zero address.\n - if `recipient` is a contract, it must implement the {IERC777Recipient}\n interface."
            },
            "functionSelector": "62ad1b83",
            "id": 2020,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "operatorSend",
            "nameLocation": "5727:12:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2018,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2009,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "5757:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2020,
                  "src": "5749:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2008,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5749:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2011,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nameLocation": "5781:9:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2020,
                  "src": "5773:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2010,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5773:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2013,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5808:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2020,
                  "src": "5800:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2012,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5800:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2015,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "5839:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2020,
                  "src": "5824:19:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2014,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5824:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2017,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "5868:12:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2020,
                  "src": "5853:27:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2016,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5853:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5739:147:5"
            },
            "returnParameters": {
              "id": 2019,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5895:0:5"
            },
            "scope": 2047,
            "src": "5718:178:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2021,
              "nodeType": "StructuredDocumentation",
              "src": "5902:532:5",
              "text": " @dev Destroys `amount` tokens from `account`, reducing the total supply.\n The caller must be an operator of `account`.\n If a send hook is registered for `account`, the corresponding function\n will be called with `data` and `operatorData`. See {IERC777Sender}.\n Emits a {Burned} event.\n Requirements\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens.\n - the caller must be an operator for `account`."
            },
            "functionSelector": "fc673c4f",
            "id": 2032,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "operatorBurn",
            "nameLocation": "6448:12:5",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2023,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "6478:7:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2032,
                  "src": "6470:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2022,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6470:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2025,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6503:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2032,
                  "src": "6495:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2024,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6495:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2027,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6534:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2032,
                  "src": "6519:19:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2026,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6519:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2029,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "6563:12:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2032,
                  "src": "6548:27:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2028,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6548:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6460:121:5"
            },
            "returnParameters": {
              "id": 2031,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6590:0:5"
            },
            "scope": 2047,
            "src": "6439:152:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "anonymous": false,
            "eventSelector": "06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987",
            "id": 2046,
            "name": "Sent",
            "nameLocation": "6603:4:5",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2034,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "6633:8:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2046,
                  "src": "6617:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2033,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6617:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2036,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "6667:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2046,
                  "src": "6651:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2035,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6651:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2038,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "6697:2:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2046,
                  "src": "6681:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2037,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6681:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2040,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6717:6:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2046,
                  "src": "6709:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2039,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6709:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2042,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6739:4:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2046,
                  "src": "6733:10:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2041,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6733:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2044,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "6759:12:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2046,
                  "src": "6753:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2043,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6753:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6607:170:5"
            },
            "src": "6597:181:5"
          }
        ],
        "scope": 2048,
        "src": "491:6289:5",
        "usedErrors": []
      }
    ],
    "src": "93:6688:5"
  }
}