{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "getApproved(uint256)": "081812fc",
    "isApprovedForAll(address,address)": "e985e9c5",
    "ownerOf(uint256)": "6352211e",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "supportsInterface(bytes4)": "01ffc9a7",
    "tokenByIndex(uint256)": "4f6ccce7",
    "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
    "totalSupply()": "18160ddd",
    "transferFrom(address,address,uint256)": "23b872dd"
  },
  "ast": {
    "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol",
    "id": 24682,
    "exportedSymbols": {
      "IERC165Upgradeable": [
        23255
      ],
      "IERC721EnumerableUpgradeable": [
        24681
      ],
      "IERC721Upgradeable": [
        24842
      ]
    },
    "nodeType": "SourceUnit",
    "src": "33:944:13",
    "nodes": [
      {
        "id": 24652,
        "nodeType": "PragmaDirective",
        "src": "33:31:13",
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".2",
          "<",
          "0.8",
          ".0"
        ]
      },
      {
        "id": 24653,
        "nodeType": "ImportDirective",
        "src": "66:34:13",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol",
        "file": "./IERC721Upgradeable.sol",
        "scope": 24682,
        "sourceUnit": 24843,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 24681,
        "nodeType": "ContractDefinition",
        "src": "239:737:13",
        "nodes": [
          {
            "id": 24662,
            "nodeType": "FunctionDefinition",
            "src": "394:55:13",
            "documentation": {
              "id": 24657,
              "nodeType": "StructuredDocumentation",
              "src": "307:82:13",
              "text": " @dev Returns the total amount of tokens stored by the contract."
            },
            "functionSelector": "18160ddd",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "parameters": {
              "id": 24658,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "414:2:13"
            },
            "returnParameters": {
              "id": 24661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24660,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24662,
                  "src": "440:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24659,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "440:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "439:9:13"
            },
            "scope": 24681,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 24672,
            "nodeType": "FunctionDefinition",
            "src": "631:99:13",
            "documentation": {
              "id": 24663,
              "nodeType": "StructuredDocumentation",
              "src": "455:171:13",
              "text": " @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n Use along with {balanceOf} to enumerate all of ``owner``'s tokens."
            },
            "functionSelector": "2f745c59",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenOfOwnerByIndex",
            "parameters": {
              "id": 24668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24665,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24672,
                  "src": "660:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24664,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "660:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24667,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 24672,
                  "src": "675:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24666,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "675:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "659:30:13"
            },
            "returnParameters": {
              "id": 24671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24670,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24672,
                  "src": "713:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24669,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "713:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "712:17:13"
            },
            "scope": 24681,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 24680,
            "nodeType": "FunctionDefinition",
            "src": "905:69:13",
            "documentation": {
              "id": 24673,
              "nodeType": "StructuredDocumentation",
              "src": "736:164:13",
              "text": " @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n Use along with {totalSupply} to enumerate all tokens."
            },
            "functionSelector": "4f6ccce7",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenByIndex",
            "parameters": {
              "id": 24676,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24675,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 24680,
                  "src": "927:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24674,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "927:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "926:15:13"
            },
            "returnParameters": {
              "id": 24679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24678,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24680,
                  "src": "965:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24677,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "965:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "964:9:13"
            },
            "scope": 24681,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 24655,
              "name": "IERC721Upgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24842,
              "src": "281:18:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721Upgradeable_$24842",
                "typeString": "contract IERC721Upgradeable"
              }
            },
            "id": 24656,
            "nodeType": "InheritanceSpecifier",
            "src": "281:18:13"
          }
        ],
        "contractDependencies": [
          23255,
          24842
        ],
        "contractKind": "interface",
        "documentation": {
          "id": 24654,
          "nodeType": "StructuredDocumentation",
          "src": "102:136:13",
          "text": " @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
        },
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          24681,
          24842,
          23255
        ],
        "name": "IERC721EnumerableUpgradeable",
        "scope": 24682
      }
    ],
    "license": "MIT"
  },
  "id": 13
}