{
  "contractName": "ERC165Checker",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/introspection/ERC165Checker.sol\":\"ERC165Checker\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/introspection/ERC165Checker.sol\":{\"keccak256\":\"0x1bdefceaba99e08a6c30400bc686e6380c1e914887bf5780db14f965c09aa9d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa31e8df5c7a5f3434977d3a881ee322c4e81f8486aec4bb859bebd20f23d805\",\"dweb:/ipfs/QmShFfnjPytP2ooLtDj7f2XULXgbsRj4xjrFc9qm9kRe79\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220881c298687e7ae98011f7a3c8464e2e5eec15841d56a2b874a6c1e1b210f926b64736f6c634300060c0033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220881c298687e7ae98011f7a3c8464e2e5eec15841d56a2b874a6c1e1b210f926b64736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "344:5246:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "344:5246:3:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n    // As per the EIP-165 spec, no interface should ever match 0xffffffff\n    bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n    /*\n     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n     */\n    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n    /**\n     * @dev Returns true if `account` supports the {IERC165} interface,\n     */\n    function supportsERC165(address account) internal view returns (bool) {\n        // Any contract that implements ERC165 must explicitly indicate support of\n        // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n        return _supportsERC165Interface(account, _INTERFACE_ID_ERC165) &&\n            !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n    }\n\n    /**\n     * @dev Returns true if `account` supports the interface defined by\n     * `interfaceId`. Support for {IERC165} itself is queried automatically.\n     *\n     * See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n        // query support of both ERC165 as per the spec and support of _interfaceId\n        return supportsERC165(account) &&\n            _supportsERC165Interface(account, interfaceId);\n    }\n\n    /**\n     * @dev Returns a boolean array where each value corresponds to the\n     * interfaces passed in and whether they're supported or not. This allows\n     * you to batch check interfaces for a contract where your expectation\n     * is that some interfaces may not be supported.\n     *\n     * See {IERC165-supportsInterface}.\n     *\n     * _Available since v3.4._\n     */\n    function getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory) {\n        // an array of booleans corresponding to interfaceIds and whether they're supported or not\n        bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n        // query support of ERC165 itself\n        if (supportsERC165(account)) {\n            // query support of each interface in interfaceIds\n            for (uint256 i = 0; i < interfaceIds.length; i++) {\n                interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n            }\n        }\n\n        return interfaceIdsSupported;\n    }\n\n    /**\n     * @dev Returns true if `account` supports all the interfaces defined in\n     * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n     *\n     * Batch-querying can lead to gas savings by skipping repeated checks for\n     * {IERC165} support.\n     *\n     * See {IERC165-supportsInterface}.\n     */\n    function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n        // query support of ERC165 itself\n        if (!supportsERC165(account)) {\n            return false;\n        }\n\n        // query support of each interface in _interfaceIds\n        for (uint256 i = 0; i < interfaceIds.length; i++) {\n            if (!_supportsERC165Interface(account, interfaceIds[i])) {\n                return false;\n            }\n        }\n\n        // all interfaces supported\n        return true;\n    }\n\n    /**\n     * @notice Query if a contract implements an interface, does not check ERC165 support\n     * @param account The address of the contract to query for support of an interface\n     * @param interfaceId The interface identifier, as specified in ERC-165\n     * @return true if the contract at account indicates support of the interface with\n     * identifier interfaceId, false otherwise\n     * @dev Assumes that account contains a contract that supports ERC165, otherwise\n     * the behavior of this method is undefined. This precondition can be checked\n     * with {supportsERC165}.\n     * Interface identification is specified in ERC-165.\n     */\n    function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n        // success determines whether the staticcall succeeded and result determines\n        // whether the contract at account indicates support of _interfaceId\n        (bool success, bool result) = _callERC165SupportsInterface(account, interfaceId);\n\n        return (success && result);\n    }\n\n    /**\n     * @notice Calls the function with selector 0x01ffc9a7 (ERC165) and suppresses throw\n     * @param account The address of the contract to query for support of an interface\n     * @param interfaceId The interface identifier, as specified in ERC-165\n     * @return success true if the STATICCALL succeeded, false otherwise\n     * @return result true if the STATICCALL succeeded and the contract at account\n     * indicates support of the interface with identifier interfaceId, false otherwise\n     */\n    function _callERC165SupportsInterface(address account, bytes4 interfaceId)\n        private\n        view\n        returns (bool, bool)\n    {\n        bytes memory encodedParams = abi.encodeWithSelector(_INTERFACE_ID_ERC165, interfaceId);\n        (bool success, bytes memory result) = account.staticcall{ gas: 30000 }(encodedParams);\n        if (result.length < 32) return (false, false);\n        return (success, abi.decode(result, (bool)));\n    }\n}\n",
  "sourcePath": "@openzeppelin/contracts/introspection/ERC165Checker.sol",
  "ast": {
    "absolutePath": "@openzeppelin/contracts/introspection/ERC165Checker.sol",
    "exportedSymbols": {
      "ERC165Checker": [
        570
      ]
    },
    "id": 571,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 344,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".2",
          "<",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:31:3"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 345,
          "nodeType": "StructuredDocumentation",
          "src": "66:277:3",
          "text": " @dev Library used to query support of an interface declared via {IERC165}.\n Note that these functions return the actual result of the query: they do not\n `revert` if an interface is not supported. It is up to the caller to decide\n what to do in these cases."
        },
        "fullyImplemented": true,
        "id": 570,
        "linearizedBaseContracts": [
          570
        ],
        "name": "ERC165Checker",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 348,
            "mutability": "constant",
            "name": "_INTERFACE_ID_INVALID",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 570,
            "src": "446:58:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 346,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "446:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786666666666666666",
              "id": 347,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "494:10:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_4294967295_by_1",
                "typeString": "int_const 4294967295"
              },
              "value": "0xffffffff"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 351,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ERC165",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 570,
            "src": "594:57:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 349,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "594:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30783031666663396137",
              "id": 350,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "641:10:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_33540519_by_1",
                "typeString": "int_const 33540519"
              },
              "value": "0x01ffc9a7"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 370,
              "nodeType": "Block",
              "src": "816:324:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 360,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 354,
                          "src": "1030:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 361,
                          "name": "_INTERFACE_ID_ERC165",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 351,
                          "src": "1039:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "id": 359,
                        "name": "_supportsERC165Interface",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "1005:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                          "typeString": "function (address,bytes4) view returns (bool)"
                        }
                      },
                      "id": 362,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1005:55:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 367,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "1076:57:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 364,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 354,
                            "src": "1102:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 365,
                            "name": "_INTERFACE_ID_INVALID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 348,
                            "src": "1111:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          ],
                          "id": 363,
                          "name": "_supportsERC165Interface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 518,
                          "src": "1077:24:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                            "typeString": "function (address,bytes4) view returns (bool)"
                          }
                        },
                        "id": 366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1077:56:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1005:128:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 358,
                  "id": 369,
                  "nodeType": "Return",
                  "src": "998:135:3"
                }
              ]
            },
            "documentation": {
              "id": 352,
              "nodeType": "StructuredDocumentation",
              "src": "658:83:3",
              "text": " @dev Returns true if `account` supports the {IERC165} interface,"
            },
            "id": 371,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsERC165",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 354,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 371,
                  "src": "770:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 353,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "770:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "769:17:3"
            },
            "returnParameters": {
              "id": 358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 357,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 371,
                  "src": "810:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 356,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "810:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "809:6:3"
            },
            "scope": 570,
            "src": "746:394:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 390,
              "nodeType": "Block",
              "src": "1451:193:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 382,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 374,
                          "src": "1567:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 381,
                        "name": "supportsERC165",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 371,
                        "src": "1552:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1552:23:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 385,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 374,
                          "src": "1616:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 386,
                          "name": "interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 376,
                          "src": "1625:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "id": 384,
                        "name": "_supportsERC165Interface",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "1591:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                          "typeString": "function (address,bytes4) view returns (bool)"
                        }
                      },
                      "id": 387,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1591:46:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1552:85:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 380,
                  "id": 389,
                  "nodeType": "Return",
                  "src": "1545:92:3"
                }
              ]
            },
            "documentation": {
              "id": 372,
              "nodeType": "StructuredDocumentation",
              "src": "1146:207:3",
              "text": " @dev Returns true if `account` supports the interface defined by\n `interfaceId`. Support for {IERC165} itself is queried automatically.\n See {IERC165-supportsInterface}."
            },
            "id": 391,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 374,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 391,
                  "src": "1385:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1385:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 376,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 391,
                  "src": "1402:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1402:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1384:37:3"
            },
            "returnParameters": {
              "id": 380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 379,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 391,
                  "src": "1445:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 378,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1445:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1444:6:3"
            },
            "scope": 570,
            "src": "1358:286:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 446,
              "nodeType": "Block",
              "src": "2146:552:3",
              "statements": [
                {
                  "assignments": [
                    407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 407,
                      "mutability": "mutable",
                      "name": "interfaceIdsSupported",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 446,
                      "src": "2255:35:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                        "typeString": "bool[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 405,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2255:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 406,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2255:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                          "typeString": "bool[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 414,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 411,
                          "name": "interfaceIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 397,
                          "src": "2304:12:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                            "typeString": "bytes4[] memory"
                          }
                        },
                        "id": 412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2304:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 410,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2293:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bool_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bool[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 408,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2297:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 409,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2297:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                          "typeString": "bool[]"
                        }
                      }
                    },
                    "id": 413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2293:31:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                      "typeString": "bool[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2255:69:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 416,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 394,
                        "src": "2396:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 415,
                      "name": "supportsERC165",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 371,
                      "src": "2381:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2381:23:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 443,
                  "nodeType": "IfStatement",
                  "src": "2377:276:3",
                  "trueBody": {
                    "id": 442,
                    "nodeType": "Block",
                    "src": "2406:247:3",
                    "statements": [
                      {
                        "body": {
                          "id": 440,
                          "nodeType": "Block",
                          "src": "2533:110:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 438,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 429,
                                    "name": "interfaceIdsSupported",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 407,
                                    "src": "2551:21:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                      "typeString": "bool[] memory"
                                    }
                                  },
                                  "id": 431,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 430,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 419,
                                    "src": "2573:1:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2551:24:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 433,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 394,
                                      "src": "2603:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 434,
                                        "name": "interfaceIds",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 397,
                                        "src": "2612:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                          "typeString": "bytes4[] memory"
                                        }
                                      },
                                      "id": 436,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 435,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 419,
                                        "src": "2625:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "2612:15:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    ],
                                    "id": 432,
                                    "name": "_supportsERC165Interface",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 518,
                                    "src": "2578:24:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                      "typeString": "function (address,bytes4) view returns (bool)"
                                    }
                                  },
                                  "id": 437,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2578:50:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "2551:77:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 439,
                              "nodeType": "ExpressionStatement",
                              "src": "2551:77:3"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 422,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 419,
                            "src": "2503:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 423,
                              "name": "interfaceIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 397,
                              "src": "2507:12:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                "typeString": "bytes4[] memory"
                              }
                            },
                            "id": 424,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2507:19:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2503:23:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 441,
                        "initializationExpression": {
                          "assignments": [
                            419
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 419,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 441,
                              "src": "2488:9:3",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 418,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2488:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 421,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2500:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2488:13:3"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 427,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "2528:3:3",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 426,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 419,
                              "src": "2528:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 428,
                          "nodeType": "ExpressionStatement",
                          "src": "2528:3:3"
                        },
                        "nodeType": "ForStatement",
                        "src": "2483:160:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 444,
                    "name": "interfaceIdsSupported",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 407,
                    "src": "2670:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                      "typeString": "bool[] memory"
                    }
                  },
                  "functionReturnParameters": 402,
                  "id": 445,
                  "nodeType": "Return",
                  "src": "2663:28:3"
                }
              ]
            },
            "documentation": {
              "id": 392,
              "nodeType": "StructuredDocumentation",
              "src": "1650:374:3",
              "text": " @dev Returns a boolean array where each value corresponds to the\n interfaces passed in and whether they're supported or not. This allows\n you to batch check interfaces for a contract where your expectation\n is that some interfaces may not be supported.\n See {IERC165-supportsInterface}.\n _Available since v3.4._"
            },
            "id": 447,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSupportedInterfaces",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 394,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 447,
                  "src": "2061:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 393,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2061:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 397,
                  "mutability": "mutable",
                  "name": "interfaceIds",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 447,
                  "src": "2078:28:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                    "typeString": "bytes4[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 395,
                      "name": "bytes4",
                      "nodeType": "ElementaryTypeName",
                      "src": "2078:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "id": 396,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2078:8:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
                      "typeString": "bytes4[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2060:47:3"
            },
            "returnParameters": {
              "id": 402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 401,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 447,
                  "src": "2131:13:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                    "typeString": "bool[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 399,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "2131:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 400,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2131:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                      "typeString": "bool[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2130:15:3"
            },
            "scope": 570,
            "src": "2029:669:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 492,
              "nodeType": "Block",
              "src": "3140:429:3",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3196:24:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 459,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 450,
                          "src": "3212:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 458,
                        "name": "supportsERC165",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 371,
                        "src": "3197:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3197:23:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 465,
                  "nodeType": "IfStatement",
                  "src": "3192:67:3",
                  "trueBody": {
                    "id": 464,
                    "nodeType": "Block",
                    "src": "3222:37:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3243:5:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 457,
                        "id": 463,
                        "nodeType": "Return",
                        "src": "3236:12:3"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 488,
                    "nodeType": "Block",
                    "src": "3379:126:3",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "3397:51:3",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 478,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 450,
                                "src": "3423:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 479,
                                  "name": "interfaceIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 453,
                                  "src": "3432:12:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                    "typeString": "bytes4[] memory"
                                  }
                                },
                                "id": 481,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 480,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "3445:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3432:15:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "id": 477,
                              "name": "_supportsERC165Interface",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 518,
                              "src": "3398:24:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (address,bytes4) view returns (bool)"
                              }
                            },
                            "id": 482,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3398:50:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 487,
                        "nodeType": "IfStatement",
                        "src": "3393:102:3",
                        "trueBody": {
                          "id": 486,
                          "nodeType": "Block",
                          "src": "3450:45:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 484,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3475:5:3",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 457,
                              "id": 485,
                              "nodeType": "Return",
                              "src": "3468:12:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 470,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 467,
                      "src": "3349:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 471,
                        "name": "interfaceIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "3353:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                          "typeString": "bytes4[] memory"
                        }
                      },
                      "id": 472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3353:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3349:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 489,
                  "initializationExpression": {
                    "assignments": [
                      467
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 467,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 489,
                        "src": "3334:9:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 466,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3334:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 469,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3346:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3334:13:3"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 475,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3374:3:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 474,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "3374:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 476,
                    "nodeType": "ExpressionStatement",
                    "src": "3374:3:3"
                  },
                  "nodeType": "ForStatement",
                  "src": "3329:176:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3558:4:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 457,
                  "id": 491,
                  "nodeType": "Return",
                  "src": "3551:11:3"
                }
              ]
            },
            "documentation": {
              "id": 448,
              "nodeType": "StructuredDocumentation",
              "src": "2704:324:3",
              "text": " @dev Returns true if `account` supports all the interfaces defined in\n `interfaceIds`. Support for {IERC165} itself is queried automatically.\n Batch-querying can lead to gas savings by skipping repeated checks for\n {IERC165} support.\n See {IERC165-supportsInterface}."
            },
            "id": 493,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsAllInterfaces",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 450,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 493,
                  "src": "3064:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 449,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3064:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 453,
                  "mutability": "mutable",
                  "name": "interfaceIds",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 493,
                  "src": "3081:28:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                    "typeString": "bytes4[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 451,
                      "name": "bytes4",
                      "nodeType": "ElementaryTypeName",
                      "src": "3081:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "id": 452,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3081:8:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
                      "typeString": "bytes4[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3063:47:3"
            },
            "returnParameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 456,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 493,
                  "src": "3134:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 455,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3134:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3133:6:3"
            },
            "scope": 570,
            "src": "3033:536:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 517,
              "nodeType": "Block",
              "src": "4331:296:3",
              "statements": [
                {
                  "assignments": [
                    504,
                    506
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 504,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 517,
                      "src": "4504:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 503,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4504:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 506,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 517,
                      "src": "4518:11:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 505,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4518:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 511,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 508,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "4562:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 509,
                        "name": "interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 498,
                        "src": "4571:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 507,
                      "name": "_callERC165SupportsInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 569,
                      "src": "4533:28:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$_t_bool_$",
                        "typeString": "function (address,bytes4) view returns (bool,bool)"
                      }
                    },
                    "id": 510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4533:50:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$",
                      "typeString": "tuple(bool,bool)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4503:80:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 514,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 512,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 504,
                          "src": "4602:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 513,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 506,
                          "src": "4613:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4602:17:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 515,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4601:19:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 502,
                  "id": 516,
                  "nodeType": "Return",
                  "src": "4594:26:3"
                }
              ]
            },
            "documentation": {
              "id": 494,
              "nodeType": "StructuredDocumentation",
              "src": "3575:652:3",
              "text": " @notice Query if a contract implements an interface, does not check ERC165 support\n @param account The address of the contract to query for support of an interface\n @param interfaceId The interface identifier, as specified in ERC-165\n @return true if the contract at account indicates support of the interface with\n identifier interfaceId, false otherwise\n @dev Assumes that account contains a contract that supports ERC165, otherwise\n the behavior of this method is undefined. This precondition can be checked\n with {supportsERC165}.\n Interface identification is specified in ERC-165."
            },
            "id": 518,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_supportsERC165Interface",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 496,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 518,
                  "src": "4266:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 495,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4266:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 498,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 518,
                  "src": "4283:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 497,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "4283:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4265:37:3"
            },
            "returnParameters": {
              "id": 502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 501,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 518,
                  "src": "4325:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 500,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4325:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4324:6:3"
            },
            "scope": 570,
            "src": "4232:395:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 568,
              "nodeType": "Block",
              "src": "5281:307:3",
              "statements": [
                {
                  "assignments": [
                    531
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 531,
                      "mutability": "mutable",
                      "name": "encodedParams",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 568,
                      "src": "5291:26:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 530,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "5291:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 537,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 534,
                        "name": "_INTERFACE_ID_ERC165",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 351,
                        "src": "5343:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 535,
                        "name": "interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 523,
                        "src": "5365:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 532,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "5320:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5320:22:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5320:57:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5291:86:3"
                },
                {
                  "assignments": [
                    539,
                    541
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 539,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 568,
                      "src": "5388:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 538,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5388:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 541,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 568,
                      "src": "5402:19:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 540,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "5402:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 548,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 546,
                        "name": "encodedParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 531,
                        "src": "5458:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 542,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 521,
                          "src": "5425:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "staticcall",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5425:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                        }
                      },
                      "id": 545,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "gas"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "hexValue": "3330303030",
                          "id": 544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5450:5:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_30000_by_1",
                            "typeString": "int_const 30000"
                          },
                          "value": "30000"
                        }
                      ],
                      "src": "5425:32:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5425:47:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5387:85:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 549,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 541,
                        "src": "5486:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5486:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5502:2:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "5486:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 557,
                  "nodeType": "IfStatement",
                  "src": "5482:45:3",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 553,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5514:5:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5521:5:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        }
                      ],
                      "id": 555,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5513:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$",
                        "typeString": "tuple(bool,bool)"
                      }
                    },
                    "functionReturnParameters": 529,
                    "id": 556,
                    "nodeType": "Return",
                    "src": "5506:21:3"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 558,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 539,
                        "src": "5545:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 561,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 541,
                            "src": "5565:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5574:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bool_$",
                                  "typeString": "type(bool)"
                                },
                                "typeName": {
                                  "id": 562,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5574:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              }
                            ],
                            "id": 564,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "5573:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bool_$",
                              "typeString": "type(bool)"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_type$_t_bool_$",
                              "typeString": "type(bool)"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 559,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "5554:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "decode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5554:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5554:26:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 566,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "5544:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$",
                      "typeString": "tuple(bool,bool)"
                    }
                  },
                  "functionReturnParameters": 529,
                  "id": 567,
                  "nodeType": "Return",
                  "src": "5537:44:3"
                }
              ]
            },
            "documentation": {
              "id": 519,
              "nodeType": "StructuredDocumentation",
              "src": "4633:506:3",
              "text": " @notice Calls the function with selector 0x01ffc9a7 (ERC165) and suppresses throw\n @param account The address of the contract to query for support of an interface\n @param interfaceId The interface identifier, as specified in ERC-165\n @return success true if the STATICCALL succeeded, false otherwise\n @return result true if the STATICCALL succeeded and the contract at account\n indicates support of the interface with identifier interfaceId, false otherwise"
            },
            "id": 569,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_callERC165SupportsInterface",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 524,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 521,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 569,
                  "src": "5182:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 520,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5182:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 523,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 569,
                  "src": "5199:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 522,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "5199:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5181:37:3"
            },
            "returnParameters": {
              "id": 529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 526,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 569,
                  "src": "5265:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 525,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5265:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 528,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 569,
                  "src": "5271:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 527,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5271:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5264:12:3"
            },
            "scope": 570,
            "src": "5144:444:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 571,
        "src": "344:5246:3"
      }
    ],
    "src": "33:5558:3"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@openzeppelin/contracts/introspection/ERC165Checker.sol",
      "exportedSymbols": {
        "ERC165Checker": [
          570
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.6",
            ".2",
            "<",
            "0.8",
            ".0"
          ]
        },
        "id": 344,
        "name": "PragmaDirective",
        "src": "33:31:3"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            570
          ],
          "name": "ERC165Checker",
          "scope": 571
        },
        "children": [
          {
            "attributes": {
              "text": " @dev Library used to query support of an interface declared via {IERC165}.\n Note that these functions return the actual result of the query: they do not\n `revert` if an interface is not supported. It is up to the caller to decide\n what to do in these cases."
            },
            "id": 345,
            "name": "StructuredDocumentation",
            "src": "66:277:3"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "_INTERFACE_ID_INVALID",
              "overrides": null,
              "scope": 570,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 346,
                "name": "ElementaryTypeName",
                "src": "446:6:3"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "30786666666666666666",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 4294967295",
                  "value": "0xffffffff"
                },
                "id": 347,
                "name": "Literal",
                "src": "494:10:3"
              }
            ],
            "id": 348,
            "name": "VariableDeclaration",
            "src": "446:58:3"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "_INTERFACE_ID_ERC165",
              "overrides": null,
              "scope": 570,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 349,
                "name": "ElementaryTypeName",
                "src": "594:6:3"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "30783031666663396137",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 33540519",
                  "value": "0x01ffc9a7"
                },
                "id": 350,
                "name": "Literal",
                "src": "641:10:3"
              }
            ],
            "id": 351,
            "name": "VariableDeclaration",
            "src": "594:57:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "supportsERC165",
              "overrides": null,
              "scope": 570,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns true if `account` supports the {IERC165} interface,"
                },
                "id": 352,
                "name": "StructuredDocumentation",
                "src": "658:83:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "account",
                      "overrides": null,
                      "scope": 371,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 353,
                        "name": "ElementaryTypeName",
                        "src": "770:7:3"
                      }
                    ],
                    "id": 354,
                    "name": "VariableDeclaration",
                    "src": "770:15:3"
                  }
                ],
                "id": 355,
                "name": "ParameterList",
                "src": "769:17:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 371,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 356,
                        "name": "ElementaryTypeName",
                        "src": "810:4:3"
                      }
                    ],
                    "id": 357,
                    "name": "VariableDeclaration",
                    "src": "810:4:3"
                  }
                ],
                "id": 358,
                "name": "ParameterList",
                "src": "809:6:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 358
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 518,
                                  "type": "function (address,bytes4) view returns (bool)",
                                  "value": "_supportsERC165Interface"
                                },
                                "id": 359,
                                "name": "Identifier",
                                "src": "1005:24:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 354,
                                  "type": "address",
                                  "value": "account"
                                },
                                "id": 360,
                                "name": "Identifier",
                                "src": "1030:7:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 351,
                                  "type": "bytes4",
                                  "value": "_INTERFACE_ID_ERC165"
                                },
                                "id": 361,
                                "name": "Identifier",
                                "src": "1039:20:3"
                              }
                            ],
                            "id": 362,
                            "name": "FunctionCall",
                            "src": "1005:55:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 518,
                                      "type": "function (address,bytes4) view returns (bool)",
                                      "value": "_supportsERC165Interface"
                                    },
                                    "id": 363,
                                    "name": "Identifier",
                                    "src": "1077:24:3"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 354,
                                      "type": "address",
                                      "value": "account"
                                    },
                                    "id": 364,
                                    "name": "Identifier",
                                    "src": "1102:7:3"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 348,
                                      "type": "bytes4",
                                      "value": "_INTERFACE_ID_INVALID"
                                    },
                                    "id": 365,
                                    "name": "Identifier",
                                    "src": "1111:21:3"
                                  }
                                ],
                                "id": 366,
                                "name": "FunctionCall",
                                "src": "1077:56:3"
                              }
                            ],
                            "id": 367,
                            "name": "UnaryOperation",
                            "src": "1076:57:3"
                          }
                        ],
                        "id": 368,
                        "name": "BinaryOperation",
                        "src": "1005:128:3"
                      }
                    ],
                    "id": 369,
                    "name": "Return",
                    "src": "998:135:3"
                  }
                ],
                "id": 370,
                "name": "Block",
                "src": "816:324:3"
              }
            ],
            "id": 371,
            "name": "FunctionDefinition",
            "src": "746:394:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "supportsInterface",
              "overrides": null,
              "scope": 570,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns true if `account` supports the interface defined by\n `interfaceId`. Support for {IERC165} itself is queried automatically.\n See {IERC165-supportsInterface}."
                },
                "id": 372,
                "name": "StructuredDocumentation",
                "src": "1146:207:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "account",
                      "overrides": null,
                      "scope": 391,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 373,
                        "name": "ElementaryTypeName",
                        "src": "1385:7:3"
                      }
                    ],
                    "id": 374,
                    "name": "VariableDeclaration",
                    "src": "1385:15:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "interfaceId",
                      "overrides": null,
                      "scope": 391,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 375,
                        "name": "ElementaryTypeName",
                        "src": "1402:6:3"
                      }
                    ],
                    "id": 376,
                    "name": "VariableDeclaration",
                    "src": "1402:18:3"
                  }
                ],
                "id": 377,
                "name": "ParameterList",
                "src": "1384:37:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 391,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 378,
                        "name": "ElementaryTypeName",
                        "src": "1445:4:3"
                      }
                    ],
                    "id": 379,
                    "name": "VariableDeclaration",
                    "src": "1445:4:3"
                  }
                ],
                "id": 380,
                "name": "ParameterList",
                "src": "1444:6:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 380
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 371,
                                  "type": "function (address) view returns (bool)",
                                  "value": "supportsERC165"
                                },
                                "id": 381,
                                "name": "Identifier",
                                "src": "1552:14:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 374,
                                  "type": "address",
                                  "value": "account"
                                },
                                "id": 382,
                                "name": "Identifier",
                                "src": "1567:7:3"
                              }
                            ],
                            "id": 383,
                            "name": "FunctionCall",
                            "src": "1552:23:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 518,
                                  "type": "function (address,bytes4) view returns (bool)",
                                  "value": "_supportsERC165Interface"
                                },
                                "id": 384,
                                "name": "Identifier",
                                "src": "1591:24:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 374,
                                  "type": "address",
                                  "value": "account"
                                },
                                "id": 385,
                                "name": "Identifier",
                                "src": "1616:7:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 376,
                                  "type": "bytes4",
                                  "value": "interfaceId"
                                },
                                "id": 386,
                                "name": "Identifier",
                                "src": "1625:11:3"
                              }
                            ],
                            "id": 387,
                            "name": "FunctionCall",
                            "src": "1591:46:3"
                          }
                        ],
                        "id": 388,
                        "name": "BinaryOperation",
                        "src": "1552:85:3"
                      }
                    ],
                    "id": 389,
                    "name": "Return",
                    "src": "1545:92:3"
                  }
                ],
                "id": 390,
                "name": "Block",
                "src": "1451:193:3"
              }
            ],
            "id": 391,
            "name": "FunctionDefinition",
            "src": "1358:286:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getSupportedInterfaces",
              "overrides": null,
              "scope": 570,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns a boolean array where each value corresponds to the\n interfaces passed in and whether they're supported or not. This allows\n you to batch check interfaces for a contract where your expectation\n is that some interfaces may not be supported.\n See {IERC165-supportsInterface}.\n _Available since v3.4._"
                },
                "id": 392,
                "name": "StructuredDocumentation",
                "src": "1650:374:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "account",
                      "overrides": null,
                      "scope": 447,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 393,
                        "name": "ElementaryTypeName",
                        "src": "2061:7:3"
                      }
                    ],
                    "id": 394,
                    "name": "VariableDeclaration",
                    "src": "2061:15:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "interfaceIds",
                      "overrides": null,
                      "scope": 447,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes4[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bytes4[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes4",
                              "type": "bytes4"
                            },
                            "id": 395,
                            "name": "ElementaryTypeName",
                            "src": "2078:6:3"
                          }
                        ],
                        "id": 396,
                        "name": "ArrayTypeName",
                        "src": "2078:8:3"
                      }
                    ],
                    "id": 397,
                    "name": "VariableDeclaration",
                    "src": "2078:28:3"
                  }
                ],
                "id": 398,
                "name": "ParameterList",
                "src": "2060:47:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 447,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bool[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bool[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 399,
                            "name": "ElementaryTypeName",
                            "src": "2131:4:3"
                          }
                        ],
                        "id": 400,
                        "name": "ArrayTypeName",
                        "src": "2131:6:3"
                      }
                    ],
                    "id": 401,
                    "name": "VariableDeclaration",
                    "src": "2131:13:3"
                  }
                ],
                "id": 402,
                "name": "ParameterList",
                "src": "2130:15:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        407
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "interfaceIdsSupported",
                          "overrides": null,
                          "scope": 446,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bool[]",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "length": null,
                              "type": "bool[]"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "bool",
                                  "type": "bool"
                                },
                                "id": 405,
                                "name": "ElementaryTypeName",
                                "src": "2255:4:3"
                              }
                            ],
                            "id": 406,
                            "name": "ArrayTypeName",
                            "src": "2255:6:3"
                          }
                        ],
                        "id": 407,
                        "name": "VariableDeclaration",
                        "src": "2255:35:3"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool[] memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "function (uint256) pure returns (bool[] memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "length": null,
                                  "type": "bool[]"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bool",
                                      "type": "bool"
                                    },
                                    "id": 408,
                                    "name": "ElementaryTypeName",
                                    "src": "2297:4:3"
                                  }
                                ],
                                "id": 409,
                                "name": "ArrayTypeName",
                                "src": "2297:6:3"
                              }
                            ],
                            "id": 410,
                            "name": "NewExpression",
                            "src": "2293:10:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 397,
                                  "type": "bytes4[] memory",
                                  "value": "interfaceIds"
                                },
                                "id": 411,
                                "name": "Identifier",
                                "src": "2304:12:3"
                              }
                            ],
                            "id": 412,
                            "name": "MemberAccess",
                            "src": "2304:19:3"
                          }
                        ],
                        "id": 413,
                        "name": "FunctionCall",
                        "src": "2293:31:3"
                      }
                    ],
                    "id": 414,
                    "name": "VariableDeclarationStatement",
                    "src": "2255:69:3"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 371,
                              "type": "function (address) view returns (bool)",
                              "value": "supportsERC165"
                            },
                            "id": 415,
                            "name": "Identifier",
                            "src": "2381:14:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 394,
                              "type": "address",
                              "value": "account"
                            },
                            "id": 416,
                            "name": "Identifier",
                            "src": "2396:7:3"
                          }
                        ],
                        "id": 417,
                        "name": "FunctionCall",
                        "src": "2381:23:3"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "assignments": [
                                    419
                                  ]
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "constant": false,
                                      "mutability": "mutable",
                                      "name": "i",
                                      "overrides": null,
                                      "scope": 441,
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "type": "uint256",
                                      "value": null,
                                      "visibility": "internal"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint256",
                                          "type": "uint256"
                                        },
                                        "id": 418,
                                        "name": "ElementaryTypeName",
                                        "src": "2488:7:3"
                                      }
                                    ],
                                    "id": 419,
                                    "name": "VariableDeclaration",
                                    "src": "2488:9:3"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 420,
                                    "name": "Literal",
                                    "src": "2500:1:3"
                                  }
                                ],
                                "id": 421,
                                "name": "VariableDeclarationStatement",
                                "src": "2488:13:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "<",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 419,
                                      "type": "uint256",
                                      "value": "i"
                                    },
                                    "id": 422,
                                    "name": "Identifier",
                                    "src": "2503:1:3"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 397,
                                          "type": "bytes4[] memory",
                                          "value": "interfaceIds"
                                        },
                                        "id": 423,
                                        "name": "Identifier",
                                        "src": "2507:12:3"
                                      }
                                    ],
                                    "id": 424,
                                    "name": "MemberAccess",
                                    "src": "2507:19:3"
                                  }
                                ],
                                "id": 425,
                                "name": "BinaryOperation",
                                "src": "2503:23:3"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "++",
                                      "prefix": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 419,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 426,
                                        "name": "Identifier",
                                        "src": "2528:1:3"
                                      }
                                    ],
                                    "id": 427,
                                    "name": "UnaryOperation",
                                    "src": "2528:3:3"
                                  }
                                ],
                                "id": 428,
                                "name": "ExpressionStatement",
                                "src": "2528:3:3"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 407,
                                                  "type": "bool[] memory",
                                                  "value": "interfaceIdsSupported"
                                                },
                                                "id": 429,
                                                "name": "Identifier",
                                                "src": "2551:21:3"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 419,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 430,
                                                "name": "Identifier",
                                                "src": "2573:1:3"
                                              }
                                            ],
                                            "id": 431,
                                            "name": "IndexAccess",
                                            "src": "2551:24:3"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "bool",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_bytes4",
                                                      "typeString": "bytes4"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 518,
                                                  "type": "function (address,bytes4) view returns (bool)",
                                                  "value": "_supportsERC165Interface"
                                                },
                                                "id": 432,
                                                "name": "Identifier",
                                                "src": "2578:24:3"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 394,
                                                  "type": "address",
                                                  "value": "account"
                                                },
                                                "id": 433,
                                                "name": "Identifier",
                                                "src": "2603:7:3"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "bytes4"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 397,
                                                      "type": "bytes4[] memory",
                                                      "value": "interfaceIds"
                                                    },
                                                    "id": 434,
                                                    "name": "Identifier",
                                                    "src": "2612:12:3"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 419,
                                                      "type": "uint256",
                                                      "value": "i"
                                                    },
                                                    "id": 435,
                                                    "name": "Identifier",
                                                    "src": "2625:1:3"
                                                  }
                                                ],
                                                "id": 436,
                                                "name": "IndexAccess",
                                                "src": "2612:15:3"
                                              }
                                            ],
                                            "id": 437,
                                            "name": "FunctionCall",
                                            "src": "2578:50:3"
                                          }
                                        ],
                                        "id": 438,
                                        "name": "Assignment",
                                        "src": "2551:77:3"
                                      }
                                    ],
                                    "id": 439,
                                    "name": "ExpressionStatement",
                                    "src": "2551:77:3"
                                  }
                                ],
                                "id": 440,
                                "name": "Block",
                                "src": "2533:110:3"
                              }
                            ],
                            "id": 441,
                            "name": "ForStatement",
                            "src": "2483:160:3"
                          }
                        ],
                        "id": 442,
                        "name": "Block",
                        "src": "2406:247:3"
                      }
                    ],
                    "id": 443,
                    "name": "IfStatement",
                    "src": "2377:276:3"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 402
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 407,
                          "type": "bool[] memory",
                          "value": "interfaceIdsSupported"
                        },
                        "id": 444,
                        "name": "Identifier",
                        "src": "2670:21:3"
                      }
                    ],
                    "id": 445,
                    "name": "Return",
                    "src": "2663:28:3"
                  }
                ],
                "id": 446,
                "name": "Block",
                "src": "2146:552:3"
              }
            ],
            "id": 447,
            "name": "FunctionDefinition",
            "src": "2029:669:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "supportsAllInterfaces",
              "overrides": null,
              "scope": 570,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns true if `account` supports all the interfaces defined in\n `interfaceIds`. Support for {IERC165} itself is queried automatically.\n Batch-querying can lead to gas savings by skipping repeated checks for\n {IERC165} support.\n See {IERC165-supportsInterface}."
                },
                "id": 448,
                "name": "StructuredDocumentation",
                "src": "2704:324:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "account",
                      "overrides": null,
                      "scope": 493,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 449,
                        "name": "ElementaryTypeName",
                        "src": "3064:7:3"
                      }
                    ],
                    "id": 450,
                    "name": "VariableDeclaration",
                    "src": "3064:15:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "interfaceIds",
                      "overrides": null,
                      "scope": 493,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes4[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bytes4[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes4",
                              "type": "bytes4"
                            },
                            "id": 451,
                            "name": "ElementaryTypeName",
                            "src": "3081:6:3"
                          }
                        ],
                        "id": 452,
                        "name": "ArrayTypeName",
                        "src": "3081:8:3"
                      }
                    ],
                    "id": 453,
                    "name": "VariableDeclaration",
                    "src": "3081:28:3"
                  }
                ],
                "id": 454,
                "name": "ParameterList",
                "src": "3063:47:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 493,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 455,
                        "name": "ElementaryTypeName",
                        "src": "3134:4:3"
                      }
                    ],
                    "id": 456,
                    "name": "VariableDeclaration",
                    "src": "3134:4:3"
                  }
                ],
                "id": 457,
                "name": "ParameterList",
                "src": "3133:6:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 371,
                                  "type": "function (address) view returns (bool)",
                                  "value": "supportsERC165"
                                },
                                "id": 458,
                                "name": "Identifier",
                                "src": "3197:14:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 450,
                                  "type": "address",
                                  "value": "account"
                                },
                                "id": 459,
                                "name": "Identifier",
                                "src": "3212:7:3"
                              }
                            ],
                            "id": 460,
                            "name": "FunctionCall",
                            "src": "3197:23:3"
                          }
                        ],
                        "id": 461,
                        "name": "UnaryOperation",
                        "src": "3196:24:3"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 457
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 462,
                                "name": "Literal",
                                "src": "3243:5:3"
                              }
                            ],
                            "id": 463,
                            "name": "Return",
                            "src": "3236:12:3"
                          }
                        ],
                        "id": 464,
                        "name": "Block",
                        "src": "3222:37:3"
                      }
                    ],
                    "id": 465,
                    "name": "IfStatement",
                    "src": "3192:67:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            467
                          ]
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "overrides": null,
                              "scope": 489,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "value": null,
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint256",
                                  "type": "uint256"
                                },
                                "id": 466,
                                "name": "ElementaryTypeName",
                                "src": "3334:7:3"
                              }
                            ],
                            "id": 467,
                            "name": "VariableDeclaration",
                            "src": "3334:9:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 468,
                            "name": "Literal",
                            "src": "3346:1:3"
                          }
                        ],
                        "id": 469,
                        "name": "VariableDeclarationStatement",
                        "src": "3334:13:3"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 467,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 470,
                            "name": "Identifier",
                            "src": "3349:1:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 453,
                                  "type": "bytes4[] memory",
                                  "value": "interfaceIds"
                                },
                                "id": 471,
                                "name": "Identifier",
                                "src": "3353:12:3"
                              }
                            ],
                            "id": 472,
                            "name": "MemberAccess",
                            "src": "3353:19:3"
                          }
                        ],
                        "id": 473,
                        "name": "BinaryOperation",
                        "src": "3349:23:3"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 467,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 474,
                                "name": "Identifier",
                                "src": "3374:1:3"
                              }
                            ],
                            "id": 475,
                            "name": "UnaryOperation",
                            "src": "3374:3:3"
                          }
                        ],
                        "id": 476,
                        "name": "ExpressionStatement",
                        "src": "3374:3:3"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!",
                                  "prefix": true,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 518,
                                          "type": "function (address,bytes4) view returns (bool)",
                                          "value": "_supportsERC165Interface"
                                        },
                                        "id": 477,
                                        "name": "Identifier",
                                        "src": "3398:24:3"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 450,
                                          "type": "address",
                                          "value": "account"
                                        },
                                        "id": 478,
                                        "name": "Identifier",
                                        "src": "3423:7:3"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "bytes4"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 453,
                                              "type": "bytes4[] memory",
                                              "value": "interfaceIds"
                                            },
                                            "id": 479,
                                            "name": "Identifier",
                                            "src": "3432:12:3"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 467,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 480,
                                            "name": "Identifier",
                                            "src": "3445:1:3"
                                          }
                                        ],
                                        "id": 481,
                                        "name": "IndexAccess",
                                        "src": "3432:15:3"
                                      }
                                    ],
                                    "id": 482,
                                    "name": "FunctionCall",
                                    "src": "3398:50:3"
                                  }
                                ],
                                "id": 483,
                                "name": "UnaryOperation",
                                "src": "3397:51:3"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "functionReturnParameters": 457
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "66616c7365",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "bool",
                                          "type": "bool",
                                          "value": "false"
                                        },
                                        "id": 484,
                                        "name": "Literal",
                                        "src": "3475:5:3"
                                      }
                                    ],
                                    "id": 485,
                                    "name": "Return",
                                    "src": "3468:12:3"
                                  }
                                ],
                                "id": 486,
                                "name": "Block",
                                "src": "3450:45:3"
                              }
                            ],
                            "id": 487,
                            "name": "IfStatement",
                            "src": "3393:102:3"
                          }
                        ],
                        "id": 488,
                        "name": "Block",
                        "src": "3379:126:3"
                      }
                    ],
                    "id": 489,
                    "name": "ForStatement",
                    "src": "3329:176:3"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 457
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 490,
                        "name": "Literal",
                        "src": "3558:4:3"
                      }
                    ],
                    "id": 491,
                    "name": "Return",
                    "src": "3551:11:3"
                  }
                ],
                "id": 492,
                "name": "Block",
                "src": "3140:429:3"
              }
            ],
            "id": 493,
            "name": "FunctionDefinition",
            "src": "3033:536:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_supportsERC165Interface",
              "overrides": null,
              "scope": 570,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": " @notice Query if a contract implements an interface, does not check ERC165 support\n @param account The address of the contract to query for support of an interface\n @param interfaceId The interface identifier, as specified in ERC-165\n @return true if the contract at account indicates support of the interface with\n identifier interfaceId, false otherwise\n @dev Assumes that account contains a contract that supports ERC165, otherwise\n the behavior of this method is undefined. This precondition can be checked\n with {supportsERC165}.\n Interface identification is specified in ERC-165."
                },
                "id": 494,
                "name": "StructuredDocumentation",
                "src": "3575:652:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "account",
                      "overrides": null,
                      "scope": 518,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 495,
                        "name": "ElementaryTypeName",
                        "src": "4266:7:3"
                      }
                    ],
                    "id": 496,
                    "name": "VariableDeclaration",
                    "src": "4266:15:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "interfaceId",
                      "overrides": null,
                      "scope": 518,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 497,
                        "name": "ElementaryTypeName",
                        "src": "4283:6:3"
                      }
                    ],
                    "id": 498,
                    "name": "VariableDeclaration",
                    "src": "4283:18:3"
                  }
                ],
                "id": 499,
                "name": "ParameterList",
                "src": "4265:37:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 518,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 500,
                        "name": "ElementaryTypeName",
                        "src": "4325:4:3"
                      }
                    ],
                    "id": 501,
                    "name": "VariableDeclaration",
                    "src": "4325:4:3"
                  }
                ],
                "id": 502,
                "name": "ParameterList",
                "src": "4324:6:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        504,
                        506
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "success",
                          "overrides": null,
                          "scope": 517,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 503,
                            "name": "ElementaryTypeName",
                            "src": "4504:4:3"
                          }
                        ],
                        "id": 504,
                        "name": "VariableDeclaration",
                        "src": "4504:12:3"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "result",
                          "overrides": null,
                          "scope": 517,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 505,
                            "name": "ElementaryTypeName",
                            "src": "4518:4:3"
                          }
                        ],
                        "id": 506,
                        "name": "VariableDeclaration",
                        "src": "4518:11:3"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(bool,bool)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 569,
                              "type": "function (address,bytes4) view returns (bool,bool)",
                              "value": "_callERC165SupportsInterface"
                            },
                            "id": 507,
                            "name": "Identifier",
                            "src": "4533:28:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 496,
                              "type": "address",
                              "value": "account"
                            },
                            "id": 508,
                            "name": "Identifier",
                            "src": "4562:7:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 498,
                              "type": "bytes4",
                              "value": "interfaceId"
                            },
                            "id": 509,
                            "name": "Identifier",
                            "src": "4571:11:3"
                          }
                        ],
                        "id": 510,
                        "name": "FunctionCall",
                        "src": "4533:50:3"
                      }
                    ],
                    "id": 511,
                    "name": "VariableDeclarationStatement",
                    "src": "4503:80:3"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 502
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 504,
                                  "type": "bool",
                                  "value": "success"
                                },
                                "id": 512,
                                "name": "Identifier",
                                "src": "4602:7:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 506,
                                  "type": "bool",
                                  "value": "result"
                                },
                                "id": 513,
                                "name": "Identifier",
                                "src": "4613:6:3"
                              }
                            ],
                            "id": 514,
                            "name": "BinaryOperation",
                            "src": "4602:17:3"
                          }
                        ],
                        "id": 515,
                        "name": "TupleExpression",
                        "src": "4601:19:3"
                      }
                    ],
                    "id": 516,
                    "name": "Return",
                    "src": "4594:26:3"
                  }
                ],
                "id": 517,
                "name": "Block",
                "src": "4331:296:3"
              }
            ],
            "id": 518,
            "name": "FunctionDefinition",
            "src": "4232:395:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_callERC165SupportsInterface",
              "overrides": null,
              "scope": 570,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": " @notice Calls the function with selector 0x01ffc9a7 (ERC165) and suppresses throw\n @param account The address of the contract to query for support of an interface\n @param interfaceId The interface identifier, as specified in ERC-165\n @return success true if the STATICCALL succeeded, false otherwise\n @return result true if the STATICCALL succeeded and the contract at account\n indicates support of the interface with identifier interfaceId, false otherwise"
                },
                "id": 519,
                "name": "StructuredDocumentation",
                "src": "4633:506:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "account",
                      "overrides": null,
                      "scope": 569,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 520,
                        "name": "ElementaryTypeName",
                        "src": "5182:7:3"
                      }
                    ],
                    "id": 521,
                    "name": "VariableDeclaration",
                    "src": "5182:15:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "interfaceId",
                      "overrides": null,
                      "scope": 569,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 522,
                        "name": "ElementaryTypeName",
                        "src": "5199:6:3"
                      }
                    ],
                    "id": 523,
                    "name": "VariableDeclaration",
                    "src": "5199:18:3"
                  }
                ],
                "id": 524,
                "name": "ParameterList",
                "src": "5181:37:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 569,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 525,
                        "name": "ElementaryTypeName",
                        "src": "5265:4:3"
                      }
                    ],
                    "id": 526,
                    "name": "VariableDeclaration",
                    "src": "5265:4:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 569,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 527,
                        "name": "ElementaryTypeName",
                        "src": "5271:4:3"
                      }
                    ],
                    "id": 528,
                    "name": "VariableDeclaration",
                    "src": "5271:4:3"
                  }
                ],
                "id": 529,
                "name": "ParameterList",
                "src": "5264:12:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        531
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "encodedParams",
                          "overrides": null,
                          "scope": 568,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 530,
                            "name": "ElementaryTypeName",
                            "src": "5291:5:3"
                          }
                        ],
                        "id": 531,
                        "name": "VariableDeclaration",
                        "src": "5291:26:3"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodeWithSelector",
                              "referencedDeclaration": null,
                              "type": "function (bytes4) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -1,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 532,
                                "name": "Identifier",
                                "src": "5320:3:3"
                              }
                            ],
                            "id": 533,
                            "name": "MemberAccess",
                            "src": "5320:22:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 351,
                              "type": "bytes4",
                              "value": "_INTERFACE_ID_ERC165"
                            },
                            "id": 534,
                            "name": "Identifier",
                            "src": "5343:20:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 523,
                              "type": "bytes4",
                              "value": "interfaceId"
                            },
                            "id": 535,
                            "name": "Identifier",
                            "src": "5365:11:3"
                          }
                        ],
                        "id": 536,
                        "name": "FunctionCall",
                        "src": "5320:57:3"
                      }
                    ],
                    "id": 537,
                    "name": "VariableDeclarationStatement",
                    "src": "5291:86:3"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        539,
                        541
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "success",
                          "overrides": null,
                          "scope": 568,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 538,
                            "name": "ElementaryTypeName",
                            "src": "5388:4:3"
                          }
                        ],
                        "id": 539,
                        "name": "VariableDeclaration",
                        "src": "5388:12:3"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "result",
                          "overrides": null,
                          "scope": 568,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 540,
                            "name": "ElementaryTypeName",
                            "src": "5402:5:3"
                          }
                        ],
                        "id": 541,
                        "name": "VariableDeclaration",
                        "src": "5402:19:3"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(bool,bytes memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "names": [
                                "gas"
                              ],
                              "type": "function (bytes memory) view returns (bool,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "staticcall",
                                  "referencedDeclaration": null,
                                  "type": "function (bytes memory) view returns (bool,bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 521,
                                      "type": "address",
                                      "value": "account"
                                    },
                                    "id": 542,
                                    "name": "Identifier",
                                    "src": "5425:7:3"
                                  }
                                ],
                                "id": 543,
                                "name": "MemberAccess",
                                "src": "5425:18:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3330303030",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 30000",
                                  "value": "30000"
                                },
                                "id": 544,
                                "name": "Literal",
                                "src": "5450:5:3"
                              }
                            ],
                            "id": 545,
                            "name": "FunctionCallOptions",
                            "src": "5425:32:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 531,
                              "type": "bytes memory",
                              "value": "encodedParams"
                            },
                            "id": 546,
                            "name": "Identifier",
                            "src": "5458:13:3"
                          }
                        ],
                        "id": 547,
                        "name": "FunctionCall",
                        "src": "5425:47:3"
                      }
                    ],
                    "id": 548,
                    "name": "VariableDeclarationStatement",
                    "src": "5387:85:3"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 541,
                                  "type": "bytes memory",
                                  "value": "result"
                                },
                                "id": 549,
                                "name": "Identifier",
                                "src": "5486:6:3"
                              }
                            ],
                            "id": 550,
                            "name": "MemberAccess",
                            "src": "5486:13:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "3332",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 32",
                              "value": "32"
                            },
                            "id": 551,
                            "name": "Literal",
                            "src": "5502:2:3"
                          }
                        ],
                        "id": 552,
                        "name": "BinaryOperation",
                        "src": "5486:18:3"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 529
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "tuple(bool,bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 553,
                                "name": "Literal",
                                "src": "5514:5:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 554,
                                "name": "Literal",
                                "src": "5521:5:3"
                              }
                            ],
                            "id": 555,
                            "name": "TupleExpression",
                            "src": "5513:14:3"
                          }
                        ],
                        "id": 556,
                        "name": "Return",
                        "src": "5506:21:3"
                      }
                    ],
                    "id": 557,
                    "name": "IfStatement",
                    "src": "5482:45:3"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 529
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "tuple(bool,bool)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 539,
                              "type": "bool",
                              "value": "success"
                            },
                            "id": 558,
                            "name": "Identifier",
                            "src": "5545:7:3"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_type$_t_bool_$",
                                      "typeString": "type(bool)"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 559,
                                    "name": "Identifier",
                                    "src": "5554:3:3"
                                  }
                                ],
                                "id": 560,
                                "name": "MemberAccess",
                                "src": "5554:10:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 541,
                                  "type": "bytes memory",
                                  "value": "result"
                                },
                                "id": 561,
                                "name": "Identifier",
                                "src": "5565:6:3"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "bool",
                                          "type": null
                                        },
                                        "id": 562,
                                        "name": "ElementaryTypeName",
                                        "src": "5574:4:3"
                                      }
                                    ],
                                    "id": 563,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5574:4:3"
                                  }
                                ],
                                "id": 564,
                                "name": "TupleExpression",
                                "src": "5573:6:3"
                              }
                            ],
                            "id": 565,
                            "name": "FunctionCall",
                            "src": "5554:26:3"
                          }
                        ],
                        "id": 566,
                        "name": "TupleExpression",
                        "src": "5544:37:3"
                      }
                    ],
                    "id": 567,
                    "name": "Return",
                    "src": "5537:44:3"
                  }
                ],
                "id": 568,
                "name": "Block",
                "src": "5281:307:3"
              }
            ],
            "id": 569,
            "name": "FunctionDefinition",
            "src": "5144:444:3"
          }
        ],
        "id": 570,
        "name": "ContractDefinition",
        "src": "344:5246:3"
      }
    ],
    "id": 571,
    "name": "SourceUnit",
    "src": "33:5558:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.3",
  "updatedAt": "2021-11-29T02:07:34.171Z",
  "devdoc": {
    "details": "Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.",
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}