{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "11": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
    "3": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/ERC20.sol",
    "4": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/IERC20.sol",
    "5": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/extensions/IERC20Metadata.sol"
  },
  "ast": {
    "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/ERC20.sol",
    "exportedSymbols": {
      "Context": [
        15648
      ],
      "ERC20": [
        15626
      ],
      "IERC20": [
        15820
      ],
      "IERC20Metadata": [
        9510
      ]
    },
    "id": 15627,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 15042,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "105:23:3"
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/IERC20.sol",
        "file": "./IERC20.sol",
        "id": 15043,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 15627,
        "sourceUnit": 15821,
        "src": "130:22:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "file": "./extensions/IERC20Metadata.sol",
        "id": 15044,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 15627,
        "sourceUnit": 9511,
        "src": "153:41:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
        "file": "../../utils/Context.sol",
        "id": 15045,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 15627,
        "sourceUnit": 15649,
        "src": "195:33:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 15047,
              "name": "Context",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 15648,
              "src": "1421:7:3"
            },
            "id": 15048,
            "nodeType": "InheritanceSpecifier",
            "src": "1421:7:3"
          },
          {
            "baseName": {
              "id": 15049,
              "name": "IERC20",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 15820,
              "src": "1430:6:3"
            },
            "id": 15050,
            "nodeType": "InheritanceSpecifier",
            "src": "1430:6:3"
          },
          {
            "baseName": {
              "id": 15051,
              "name": "IERC20Metadata",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9510,
              "src": "1438:14:3"
            },
            "id": 15052,
            "nodeType": "InheritanceSpecifier",
            "src": "1438:14:3"
          }
        ],
        "contractDependencies": [
          9510,
          15648,
          15820
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 15046,
          "nodeType": "StructuredDocumentation",
          "src": "230:1172:3",
          "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC20\n applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
        },
        "fullyImplemented": true,
        "id": 15626,
        "linearizedBaseContracts": [
          15626,
          9510,
          15820,
          15648
        ],
        "name": "ERC20",
        "nameLocation": "1412:5:3",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 15056,
            "mutability": "mutable",
            "name": "_balances",
            "nameLocation": "1495:9:3",
            "nodeType": "VariableDeclaration",
            "scope": 15626,
            "src": "1459:45:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 15055,
              "keyType": {
                "id": 15053,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1467:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1459:27:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 15054,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1478:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 15062,
            "mutability": "mutable",
            "name": "_allowances",
            "nameLocation": "1567:11:3",
            "nodeType": "VariableDeclaration",
            "scope": 15626,
            "src": "1511:67:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 15061,
              "keyType": {
                "id": 15057,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1519:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1511:47:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueType": {
                "id": 15060,
                "keyType": {
                  "id": 15058,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1538:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1530:27:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 15059,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1549:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 15064,
            "mutability": "mutable",
            "name": "_totalSupply",
            "nameLocation": "1601:12:3",
            "nodeType": "VariableDeclaration",
            "scope": 15626,
            "src": "1585:28:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 15063,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1585:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 15066,
            "mutability": "mutable",
            "name": "_name",
            "nameLocation": "1635:5:3",
            "nodeType": "VariableDeclaration",
            "scope": 15626,
            "src": "1620:20:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 15065,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1620:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 15068,
            "mutability": "mutable",
            "name": "_symbol",
            "nameLocation": "1661:7:3",
            "nodeType": "VariableDeclaration",
            "scope": 15626,
            "src": "1646:22:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 15067,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1646:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 15084,
              "nodeType": "Block",
              "src": "2034:57:3",
              "statements": [
                {
                  "expression": {
                    "id": 15078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 15076,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15066,
                      "src": "2044:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 15077,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15071,
                      "src": "2052:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2044:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 15079,
                  "nodeType": "ExpressionStatement",
                  "src": "2044:13:3"
                },
                {
                  "expression": {
                    "id": 15082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 15080,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15068,
                      "src": "2067:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 15081,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15073,
                      "src": "2077:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2067:17:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 15083,
                  "nodeType": "ExpressionStatement",
                  "src": "2067:17:3"
                }
              ]
            },
            "documentation": {
              "id": 15069,
              "nodeType": "StructuredDocumentation",
              "src": "1675:298:3",
              "text": " @dev Sets the values for {name} and {symbol}.\n The default value of {decimals} is 18. To select a different value for\n {decimals} you should overload it.\n All two of these values are immutable: they can only be set once during\n construction."
            },
            "id": 15085,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15074,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15071,
                  "mutability": "mutable",
                  "name": "name_",
                  "nameLocation": "2004:5:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15085,
                  "src": "1990:19:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15070,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1990:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15073,
                  "mutability": "mutable",
                  "name": "symbol_",
                  "nameLocation": "2025:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15085,
                  "src": "2011:21:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15072,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2011:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1989:44:3"
            },
            "returnParameters": {
              "id": 15075,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2034:0:3"
            },
            "scope": 15626,
            "src": "1978:113:3",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9497
            ],
            "body": {
              "id": 15094,
              "nodeType": "Block",
              "src": "2225:29:3",
              "statements": [
                {
                  "expression": {
                    "id": 15092,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15066,
                    "src": "2242:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 15091,
                  "id": 15093,
                  "nodeType": "Return",
                  "src": "2235:12:3"
                }
              ]
            },
            "documentation": {
              "id": 15086,
              "nodeType": "StructuredDocumentation",
              "src": "2097:54:3",
              "text": " @dev Returns the name of the token."
            },
            "functionSelector": "06fdde03",
            "id": 15095,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nameLocation": "2165:4:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15088,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2192:8:3"
            },
            "parameters": {
              "id": 15087,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2169:2:3"
            },
            "returnParameters": {
              "id": 15091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15090,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15095,
                  "src": "2210:13:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15089,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2210:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2209:15:3"
            },
            "scope": 15626,
            "src": "2156:98:3",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9503
            ],
            "body": {
              "id": 15104,
              "nodeType": "Block",
              "src": "2438:31:3",
              "statements": [
                {
                  "expression": {
                    "id": 15102,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15068,
                    "src": "2455:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 15101,
                  "id": 15103,
                  "nodeType": "Return",
                  "src": "2448:14:3"
                }
              ]
            },
            "documentation": {
              "id": 15096,
              "nodeType": "StructuredDocumentation",
              "src": "2260:102:3",
              "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
            },
            "functionSelector": "95d89b41",
            "id": 15105,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nameLocation": "2376:6:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15098,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2405:8:3"
            },
            "parameters": {
              "id": 15097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2382:2:3"
            },
            "returnParameters": {
              "id": 15101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15100,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15105,
                  "src": "2423:13:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15099,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2423:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2422:15:3"
            },
            "scope": 15626,
            "src": "2367:102:3",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9509
            ],
            "body": {
              "id": 15114,
              "nodeType": "Block",
              "src": "3158:26:3",
              "statements": [
                {
                  "expression": {
                    "hexValue": "3138",
                    "id": 15112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3175:2:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18_by_1",
                      "typeString": "int_const 18"
                    },
                    "value": "18"
                  },
                  "functionReturnParameters": 15111,
                  "id": 15113,
                  "nodeType": "Return",
                  "src": "3168:9:3"
                }
              ]
            },
            "documentation": {
              "id": 15106,
              "nodeType": "StructuredDocumentation",
              "src": "2475:613:3",
              "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless this function is\n overridden;\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
            },
            "functionSelector": "313ce567",
            "id": 15115,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nameLocation": "3102:8:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15108,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3133:8:3"
            },
            "parameters": {
              "id": 15107,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3110:2:3"
            },
            "returnParameters": {
              "id": 15111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15110,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15115,
                  "src": "3151:5:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 15109,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3151:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3150:7:3"
            },
            "scope": 15626,
            "src": "3093:91:3",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              15769
            ],
            "body": {
              "id": 15124,
              "nodeType": "Block",
              "src": "3314:36:3",
              "statements": [
                {
                  "expression": {
                    "id": 15122,
                    "name": "_totalSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15064,
                    "src": "3331:12:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 15121,
                  "id": 15123,
                  "nodeType": "Return",
                  "src": "3324:19:3"
                }
              ]
            },
            "documentation": {
              "id": 15116,
              "nodeType": "StructuredDocumentation",
              "src": "3190:49:3",
              "text": " @dev See {IERC20-totalSupply}."
            },
            "functionSelector": "18160ddd",
            "id": 15125,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "3253:11:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15118,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3287:8:3"
            },
            "parameters": {
              "id": 15117,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3264:2:3"
            },
            "returnParameters": {
              "id": 15121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15120,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15125,
                  "src": "3305:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3305:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3304:9:3"
            },
            "scope": 15626,
            "src": "3244:106:3",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              15777
            ],
            "body": {
              "id": 15138,
              "nodeType": "Block",
              "src": "3491:42:3",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 15134,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15056,
                      "src": "3508:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 15136,
                    "indexExpression": {
                      "id": 15135,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15128,
                      "src": "3518:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3508:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 15133,
                  "id": 15137,
                  "nodeType": "Return",
                  "src": "3501:25:3"
                }
              ]
            },
            "documentation": {
              "id": 15126,
              "nodeType": "StructuredDocumentation",
              "src": "3356:47:3",
              "text": " @dev See {IERC20-balanceOf}."
            },
            "functionSelector": "70a08231",
            "id": 15139,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "3417:9:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15130,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3464:8:3"
            },
            "parameters": {
              "id": 15129,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15128,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "3435:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15139,
                  "src": "3427:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15127,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3427:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3426:17:3"
            },
            "returnParameters": {
              "id": 15133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15132,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15139,
                  "src": "3482:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15131,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3482:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3481:9:3"
            },
            "scope": 15626,
            "src": "3408:125:3",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              15787
            ],
            "body": {
              "id": 15163,
              "nodeType": "Block",
              "src": "3814:104:3",
              "statements": [
                {
                  "assignments": [
                    15151
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15151,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "3832:5:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15163,
                      "src": "3824:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15150,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3824:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15154,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 15152,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15638,
                      "src": "3840:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 15153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3840:12:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3824:28:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15156,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15151,
                        "src": "3872:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15157,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15142,
                        "src": "3879:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15158,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15144,
                        "src": "3883:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15155,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15387,
                      "src": "3862:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3862:28:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15160,
                  "nodeType": "ExpressionStatement",
                  "src": "3862:28:3"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 15161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3907:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 15149,
                  "id": 15162,
                  "nodeType": "Return",
                  "src": "3900:11:3"
                }
              ]
            },
            "documentation": {
              "id": 15140,
              "nodeType": "StructuredDocumentation",
              "src": "3539:185:3",
              "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
            },
            "functionSelector": "a9059cbb",
            "id": 15164,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nameLocation": "3738:8:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15146,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3790:8:3"
            },
            "parameters": {
              "id": 15145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15142,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3755:2:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15164,
                  "src": "3747:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3747:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15144,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3767:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15164,
                  "src": "3759:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3759:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3746:28:3"
            },
            "returnParameters": {
              "id": 15149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15148,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15164,
                  "src": "3808:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15147,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3808:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3807:6:3"
            },
            "scope": 15626,
            "src": "3729:189:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              15797
            ],
            "body": {
              "id": 15181,
              "nodeType": "Block",
              "src": "4074:51:3",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 15175,
                        "name": "_allowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15062,
                        "src": "4091:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 15177,
                      "indexExpression": {
                        "id": 15176,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15167,
                        "src": "4103:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4091:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 15179,
                    "indexExpression": {
                      "id": 15178,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15169,
                      "src": "4110:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4091:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 15174,
                  "id": 15180,
                  "nodeType": "Return",
                  "src": "4084:34:3"
                }
              ]
            },
            "documentation": {
              "id": 15165,
              "nodeType": "StructuredDocumentation",
              "src": "3924:47:3",
              "text": " @dev See {IERC20-allowance}."
            },
            "functionSelector": "dd62ed3e",
            "id": 15182,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nameLocation": "3985:9:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15171,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4047:8:3"
            },
            "parameters": {
              "id": 15170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15167,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "4003:5:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15182,
                  "src": "3995:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15166,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3995:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15169,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "4018:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15182,
                  "src": "4010:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15168,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4010:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3994:32:3"
            },
            "returnParameters": {
              "id": 15174,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15173,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15182,
                  "src": "4065:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15172,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4065:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4064:9:3"
            },
            "scope": 15626,
            "src": "3976:149:3",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              15807
            ],
            "body": {
              "id": 15206,
              "nodeType": "Block",
              "src": "4522:108:3",
              "statements": [
                {
                  "assignments": [
                    15194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15194,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "4540:5:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15206,
                      "src": "4532:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15193,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4532:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15197,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 15195,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15638,
                      "src": "4548:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 15196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4548:12:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4532:28:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15199,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15194,
                        "src": "4579:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15200,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15185,
                        "src": "4586:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15201,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15187,
                        "src": "4595:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15198,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15560,
                      "src": "4570:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4570:32:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15203,
                  "nodeType": "ExpressionStatement",
                  "src": "4570:32:3"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 15204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4619:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 15192,
                  "id": 15205,
                  "nodeType": "Return",
                  "src": "4612:11:3"
                }
              ]
            },
            "documentation": {
              "id": 15183,
              "nodeType": "StructuredDocumentation",
              "src": "4131:297:3",
              "text": " @dev See {IERC20-approve}.\n NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."
            },
            "functionSelector": "095ea7b3",
            "id": 15207,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "4442:7:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15189,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4498:8:3"
            },
            "parameters": {
              "id": 15188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15185,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "4458:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15207,
                  "src": "4450:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15184,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4450:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15187,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4475:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15207,
                  "src": "4467:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4467:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4449:33:3"
            },
            "returnParameters": {
              "id": 15192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15191,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15207,
                  "src": "4516:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15190,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4516:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4515:6:3"
            },
            "scope": 15626,
            "src": "4433:197:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              15819
            ],
            "body": {
              "id": 15239,
              "nodeType": "Block",
              "src": "5325:153:3",
              "statements": [
                {
                  "assignments": [
                    15221
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15221,
                      "mutability": "mutable",
                      "name": "spender",
                      "nameLocation": "5343:7:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15239,
                      "src": "5335:15:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15220,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5335:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15224,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 15222,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15638,
                      "src": "5353:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 15223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5353:12:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5335:30:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15226,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15210,
                        "src": "5391:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15227,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15221,
                        "src": "5397:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15228,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15214,
                        "src": "5406:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15225,
                      "name": "_spendAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15603,
                      "src": "5375:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5375:38:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15230,
                  "nodeType": "ExpressionStatement",
                  "src": "5375:38:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15232,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15210,
                        "src": "5433:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15233,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15212,
                        "src": "5439:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15234,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15214,
                        "src": "5443:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15231,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15387,
                      "src": "5423:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5423:27:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15236,
                  "nodeType": "ExpressionStatement",
                  "src": "5423:27:3"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 15237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5467:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 15219,
                  "id": 15238,
                  "nodeType": "Return",
                  "src": "5460:11:3"
                }
              ]
            },
            "documentation": {
              "id": 15208,
              "nodeType": "StructuredDocumentation",
              "src": "4636:551:3",
              "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`.\n - the caller must have allowance for ``from``'s tokens of at least\n `amount`."
            },
            "functionSelector": "23b872dd",
            "id": 15240,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nameLocation": "5201:12:3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 15216,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5301:8:3"
            },
            "parameters": {
              "id": 15215,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15210,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "5231:4:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15240,
                  "src": "5223:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15209,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5223:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15212,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "5253:2:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15240,
                  "src": "5245:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15211,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5245:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15214,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5273:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15240,
                  "src": "5265:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5265:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5213:72:3"
            },
            "returnParameters": {
              "id": 15219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15218,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15240,
                  "src": "5319:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15217,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5319:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5318:6:3"
            },
            "scope": 15626,
            "src": "5192:286:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15268,
              "nodeType": "Block",
              "src": "5967:140:3",
              "statements": [
                {
                  "assignments": [
                    15251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15251,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "5985:5:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15268,
                      "src": "5977:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15250,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5977:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15254,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 15252,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15638,
                      "src": "5993:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 15253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5993:12:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5977:28:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15256,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15251,
                        "src": "6024:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15257,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15243,
                        "src": "6031:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15263,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 15259,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15251,
                              "src": "6050:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 15260,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15243,
                              "src": "6057:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 15258,
                            "name": "allowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15182,
                            "src": "6040:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view returns (uint256)"
                            }
                          },
                          "id": 15261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6040:25:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 15262,
                          "name": "addedValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15245,
                          "src": "6068:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6040:38:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15255,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15560,
                      "src": "6015:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6015:64:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15265,
                  "nodeType": "ExpressionStatement",
                  "src": "6015:64:3"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 15266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6096:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 15249,
                  "id": 15267,
                  "nodeType": "Return",
                  "src": "6089:11:3"
                }
              ]
            },
            "documentation": {
              "id": 15241,
              "nodeType": "StructuredDocumentation",
              "src": "5484:384:3",
              "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
            },
            "functionSelector": "39509351",
            "id": 15269,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "increaseAllowance",
            "nameLocation": "5882:17:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15243,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "5908:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15269,
                  "src": "5900:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5900:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15245,
                  "mutability": "mutable",
                  "name": "addedValue",
                  "nameLocation": "5925:10:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15269,
                  "src": "5917:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5917:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5899:37:3"
            },
            "returnParameters": {
              "id": 15249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15248,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15269,
                  "src": "5961:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15247,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5961:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5960:6:3"
            },
            "scope": 15626,
            "src": "5873:234:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15309,
              "nodeType": "Block",
              "src": "6693:328:3",
              "statements": [
                {
                  "assignments": [
                    15280
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15280,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "6711:5:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15309,
                      "src": "6703:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15279,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6703:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15283,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 15281,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15638,
                      "src": "6719:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 15282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6719:12:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6703:28:3"
                },
                {
                  "assignments": [
                    15285
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15285,
                      "mutability": "mutable",
                      "name": "currentAllowance",
                      "nameLocation": "6749:16:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15309,
                      "src": "6741:24:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15284,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6741:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15290,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 15287,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15280,
                        "src": "6778:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15288,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15272,
                        "src": "6785:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 15286,
                      "name": "allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15182,
                      "src": "6768:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view returns (uint256)"
                      }
                    },
                    "id": 15289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6768:25:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6741:52:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15292,
                          "name": "currentAllowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15285,
                          "src": "6811:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 15293,
                          "name": "subtractedValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15274,
                          "src": "6831:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6811:35:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                        "id": 15295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6848:39:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                          "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                        },
                        "value": "ERC20: decreased allowance below zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                          "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                        }
                      ],
                      "id": 15291,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6803:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6803:85:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15297,
                  "nodeType": "ExpressionStatement",
                  "src": "6803:85:3"
                },
                {
                  "id": 15306,
                  "nodeType": "UncheckedBlock",
                  "src": "6898:95:3",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "id": 15299,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15280,
                            "src": "6931:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 15300,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15272,
                            "src": "6938:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 15303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 15301,
                              "name": "currentAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15285,
                              "src": "6947:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 15302,
                              "name": "subtractedValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15274,
                              "src": "6966:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6947:34:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 15298,
                          "name": "_approve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15560,
                          "src": "6922:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 15304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6922:60:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 15305,
                      "nodeType": "ExpressionStatement",
                      "src": "6922:60:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 15307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7010:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 15278,
                  "id": 15308,
                  "nodeType": "Return",
                  "src": "7003:11:3"
                }
              ]
            },
            "documentation": {
              "id": 15270,
              "nodeType": "StructuredDocumentation",
              "src": "6113:476:3",
              "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
            },
            "functionSelector": "a457c2d7",
            "id": 15310,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decreaseAllowance",
            "nameLocation": "6603:17:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15272,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "6629:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15310,
                  "src": "6621:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15271,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6621:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15274,
                  "mutability": "mutable",
                  "name": "subtractedValue",
                  "nameLocation": "6646:15:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15310,
                  "src": "6638:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15273,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6638:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6620:42:3"
            },
            "returnParameters": {
              "id": 15278,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15277,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15310,
                  "src": "6687:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15276,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6687:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6686:6:3"
            },
            "scope": 15626,
            "src": "6594:427:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15386,
              "nodeType": "Block",
              "src": "7583:543:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15321,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15313,
                          "src": "7601:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 15324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7617:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7609:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 15322,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7609:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 15325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7609:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7601:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                        "id": 15327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7621:39:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                          "typeString": "literal_string \"ERC20: transfer from the zero address\""
                        },
                        "value": "ERC20: transfer from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                          "typeString": "literal_string \"ERC20: transfer from the zero address\""
                        }
                      ],
                      "id": 15320,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7593:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7593:68:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15329,
                  "nodeType": "ExpressionStatement",
                  "src": "7593:68:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15331,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15315,
                          "src": "7679:2:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 15334,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7693:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7685:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 15332,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7685:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 15335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7685:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7679:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                        "id": 15337,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7697:37:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                          "typeString": "literal_string \"ERC20: transfer to the zero address\""
                        },
                        "value": "ERC20: transfer to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                          "typeString": "literal_string \"ERC20: transfer to the zero address\""
                        }
                      ],
                      "id": 15330,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7671:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7671:64:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15339,
                  "nodeType": "ExpressionStatement",
                  "src": "7671:64:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15341,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15313,
                        "src": "7767:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15342,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15315,
                        "src": "7773:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15343,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15317,
                        "src": "7777:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15340,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15614,
                      "src": "7746:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7746:38:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15345,
                  "nodeType": "ExpressionStatement",
                  "src": "7746:38:3"
                },
                {
                  "assignments": [
                    15347
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15347,
                      "mutability": "mutable",
                      "name": "fromBalance",
                      "nameLocation": "7803:11:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15386,
                      "src": "7795:19:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15346,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7795:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15351,
                  "initialValue": {
                    "baseExpression": {
                      "id": 15348,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15056,
                      "src": "7817:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 15350,
                    "indexExpression": {
                      "id": 15349,
                      "name": "from",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15313,
                      "src": "7827:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7817:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7795:37:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15353,
                          "name": "fromBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15347,
                          "src": "7850:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 15354,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15317,
                          "src": "7865:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7850:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                        "id": 15356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7873:40:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                          "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                        },
                        "value": "ERC20: transfer amount exceeds balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                          "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                        }
                      ],
                      "id": 15352,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7842:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7842:72:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15358,
                  "nodeType": "ExpressionStatement",
                  "src": "7842:72:3"
                },
                {
                  "id": 15367,
                  "nodeType": "UncheckedBlock",
                  "src": "7924:73:3",
                  "statements": [
                    {
                      "expression": {
                        "id": 15365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 15359,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15056,
                            "src": "7948:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 15361,
                          "indexExpression": {
                            "id": 15360,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15313,
                            "src": "7958:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "7948:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 15364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 15362,
                            "name": "fromBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15347,
                            "src": "7966:11:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 15363,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15317,
                            "src": "7980:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7966:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7948:38:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 15366,
                      "nodeType": "ExpressionStatement",
                      "src": "7948:38:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 15372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 15368,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15056,
                        "src": "8006:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 15370,
                      "indexExpression": {
                        "id": 15369,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15315,
                        "src": "8016:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8006:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 15371,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15317,
                      "src": "8023:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8006:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15373,
                  "nodeType": "ExpressionStatement",
                  "src": "8006:23:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 15375,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15313,
                        "src": "8054:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15376,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15315,
                        "src": "8060:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15377,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15317,
                        "src": "8064:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15374,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15754,
                      "src": "8045:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8045:26:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15379,
                  "nodeType": "EmitStatement",
                  "src": "8040:31:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15381,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15313,
                        "src": "8102:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15382,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15315,
                        "src": "8108:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15383,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15317,
                        "src": "8112:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15380,
                      "name": "_afterTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15625,
                      "src": "8082:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8082:37:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15385,
                  "nodeType": "ExpressionStatement",
                  "src": "8082:37:3"
                }
              ]
            },
            "documentation": {
              "id": 15311,
              "nodeType": "StructuredDocumentation",
              "src": "7027:443:3",
              "text": " @dev Moves `amount` of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`."
            },
            "id": 15387,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nameLocation": "7484:9:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15318,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15313,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "7511:4:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15387,
                  "src": "7503:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15312,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7503:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15315,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "7533:2:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15387,
                  "src": "7525:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15314,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7525:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15317,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7553:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15387,
                  "src": "7545:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15316,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7545:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7493:72:3"
            },
            "returnParameters": {
              "id": 15319,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7583:0:3"
            },
            "scope": 15626,
            "src": "7475:651:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15442,
              "nodeType": "Block",
              "src": "8467:324:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15396,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15390,
                          "src": "8485:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 15399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8504:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8496:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 15397,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8496:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 15400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8496:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "8485:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                        "id": 15402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8508:33:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                          "typeString": "literal_string \"ERC20: mint to the zero address\""
                        },
                        "value": "ERC20: mint to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                          "typeString": "literal_string \"ERC20: mint to the zero address\""
                        }
                      ],
                      "id": 15395,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8477:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8477:65:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15404,
                  "nodeType": "ExpressionStatement",
                  "src": "8477:65:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 15408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8582:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 15407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8574:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 15406,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8574:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 15409,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8574:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15410,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15390,
                        "src": "8586:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15411,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15392,
                        "src": "8595:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15405,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15614,
                      "src": "8553:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8553:49:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15413,
                  "nodeType": "ExpressionStatement",
                  "src": "8553:49:3"
                },
                {
                  "expression": {
                    "id": 15416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 15414,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15064,
                      "src": "8613:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 15415,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15392,
                      "src": "8629:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8613:22:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15417,
                  "nodeType": "ExpressionStatement",
                  "src": "8613:22:3"
                },
                {
                  "expression": {
                    "id": 15422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 15418,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15056,
                        "src": "8645:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 15420,
                      "indexExpression": {
                        "id": 15419,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15390,
                        "src": "8655:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8645:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 15421,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15392,
                      "src": "8667:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8645:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15423,
                  "nodeType": "ExpressionStatement",
                  "src": "8645:28:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 15427,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8705:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 15426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8697:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 15425,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8697:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 15428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8697:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15429,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15390,
                        "src": "8709:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15430,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15392,
                        "src": "8718:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15424,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15754,
                      "src": "8688:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8688:37:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15432,
                  "nodeType": "EmitStatement",
                  "src": "8683:42:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 15436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8764:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 15435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8756:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 15434,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8756:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 15437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8756:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15438,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15390,
                        "src": "8768:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15439,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15392,
                        "src": "8777:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15433,
                      "name": "_afterTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15625,
                      "src": "8736:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8736:48:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15441,
                  "nodeType": "ExpressionStatement",
                  "src": "8736:48:3"
                }
              ]
            },
            "documentation": {
              "id": 15388,
              "nodeType": "StructuredDocumentation",
              "src": "8132:265:3",
              "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `account` cannot be the zero address."
            },
            "id": 15443,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "8411:5:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15390,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "8425:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15443,
                  "src": "8417:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15389,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8417:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15392,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "8442:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15443,
                  "src": "8434:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8434:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8416:33:3"
            },
            "returnParameters": {
              "id": 15394,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8467:0:3"
            },
            "scope": 15626,
            "src": "8402:389:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15514,
              "nodeType": "Block",
              "src": "9176:511:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15452,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15446,
                          "src": "9194:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 15455,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9213:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15454,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9205:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 15453,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "9205:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 15456,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9205:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9194:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                        "id": 15458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9217:35:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                          "typeString": "literal_string \"ERC20: burn from the zero address\""
                        },
                        "value": "ERC20: burn from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                          "typeString": "literal_string \"ERC20: burn from the zero address\""
                        }
                      ],
                      "id": 15451,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9186:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9186:67:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15460,
                  "nodeType": "ExpressionStatement",
                  "src": "9186:67:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15462,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15446,
                        "src": "9285:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 15465,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9302:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 15464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9294:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 15463,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9294:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 15466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9294:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15467,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15448,
                        "src": "9306:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15461,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15614,
                      "src": "9264:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9264:49:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15469,
                  "nodeType": "ExpressionStatement",
                  "src": "9264:49:3"
                },
                {
                  "assignments": [
                    15471
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15471,
                      "mutability": "mutable",
                      "name": "accountBalance",
                      "nameLocation": "9332:14:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15514,
                      "src": "9324:22:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15470,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9324:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15475,
                  "initialValue": {
                    "baseExpression": {
                      "id": 15472,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15056,
                      "src": "9349:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 15474,
                    "indexExpression": {
                      "id": 15473,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15446,
                      "src": "9359:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9349:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9324:43:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15477,
                          "name": "accountBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15471,
                          "src": "9385:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 15478,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15448,
                          "src": "9403:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9385:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                        "id": 15480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9411:36:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                          "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                        },
                        "value": "ERC20: burn amount exceeds balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                          "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                        }
                      ],
                      "id": 15476,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9377:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9377:71:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15482,
                  "nodeType": "ExpressionStatement",
                  "src": "9377:71:3"
                },
                {
                  "id": 15491,
                  "nodeType": "UncheckedBlock",
                  "src": "9458:79:3",
                  "statements": [
                    {
                      "expression": {
                        "id": 15489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 15483,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15056,
                            "src": "9482:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 15485,
                          "indexExpression": {
                            "id": 15484,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15446,
                            "src": "9492:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "9482:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 15488,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 15486,
                            "name": "accountBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15471,
                            "src": "9503:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 15487,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15448,
                            "src": "9520:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9503:23:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9482:44:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 15490,
                      "nodeType": "ExpressionStatement",
                      "src": "9482:44:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 15494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 15492,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15064,
                      "src": "9546:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 15493,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15448,
                      "src": "9562:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9546:22:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15495,
                  "nodeType": "ExpressionStatement",
                  "src": "9546:22:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 15497,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15446,
                        "src": "9593:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 15500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9610:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 15499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9602:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 15498,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9602:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 15501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9602:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15502,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15448,
                        "src": "9614:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15496,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15754,
                      "src": "9584:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9584:37:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15504,
                  "nodeType": "EmitStatement",
                  "src": "9579:42:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15506,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15446,
                        "src": "9652:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 15509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9669:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 15508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9661:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 15507,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9661:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 15510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9661:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15511,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15448,
                        "src": "9673:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15505,
                      "name": "_afterTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15625,
                      "src": "9632:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9632:48:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15513,
                  "nodeType": "ExpressionStatement",
                  "src": "9632:48:3"
                }
              ]
            },
            "documentation": {
              "id": 15444,
              "nodeType": "StructuredDocumentation",
              "src": "8797:309:3",
              "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
            },
            "id": 15515,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "9120:5:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15446,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "9134:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15515,
                  "src": "9126:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15445,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9126:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15448,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "9151:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15515,
                  "src": "9143:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15447,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9143:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9125:33:3"
            },
            "returnParameters": {
              "id": 15450,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9176:0:3"
            },
            "scope": 15626,
            "src": "9111:576:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15559,
              "nodeType": "Block",
              "src": "10223:257:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15531,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15526,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15518,
                          "src": "10241:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 15529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10258:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10250:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 15527,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10250:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 15530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10250:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10241:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                        "id": 15532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10262:38:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                          "typeString": "literal_string \"ERC20: approve from the zero address\""
                        },
                        "value": "ERC20: approve from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                          "typeString": "literal_string \"ERC20: approve from the zero address\""
                        }
                      ],
                      "id": 15525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10233:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10233:68:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15534,
                  "nodeType": "ExpressionStatement",
                  "src": "10233:68:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15536,
                          "name": "spender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15520,
                          "src": "10319:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 15539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10338:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10330:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 15537,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10330:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 15540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10330:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10319:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                        "id": 15542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10342:36:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                          "typeString": "literal_string \"ERC20: approve to the zero address\""
                        },
                        "value": "ERC20: approve to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                          "typeString": "literal_string \"ERC20: approve to the zero address\""
                        }
                      ],
                      "id": 15535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10311:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10311:68:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15544,
                  "nodeType": "ExpressionStatement",
                  "src": "10311:68:3"
                },
                {
                  "expression": {
                    "id": 15551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 15545,
                          "name": "_allowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15062,
                          "src": "10390:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 15548,
                        "indexExpression": {
                          "id": 15546,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15518,
                          "src": "10402:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10390:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 15549,
                      "indexExpression": {
                        "id": 15547,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15520,
                        "src": "10409:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10390:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 15550,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15522,
                      "src": "10420:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10390:36:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15552,
                  "nodeType": "ExpressionStatement",
                  "src": "10390:36:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 15554,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15518,
                        "src": "10450:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15555,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15520,
                        "src": "10457:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15556,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15522,
                        "src": "10466:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15553,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15763,
                      "src": "10441:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10441:32:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15558,
                  "nodeType": "EmitStatement",
                  "src": "10436:37:3"
                }
              ]
            },
            "documentation": {
              "id": 15516,
              "nodeType": "StructuredDocumentation",
              "src": "9693:412:3",
              "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
            },
            "id": 15560,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_approve",
            "nameLocation": "10119:8:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15518,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "10145:5:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15560,
                  "src": "10137:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10137:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15520,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "10168:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15560,
                  "src": "10160:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15519,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10160:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15522,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "10193:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15560,
                  "src": "10185:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15521,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10185:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10127:78:3"
            },
            "returnParameters": {
              "id": 15524,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10223:0:3"
            },
            "scope": 15626,
            "src": "10110:370:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15602,
              "nodeType": "Block",
              "src": "10881:321:3",
              "statements": [
                {
                  "assignments": [
                    15571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15571,
                      "mutability": "mutable",
                      "name": "currentAllowance",
                      "nameLocation": "10899:16:3",
                      "nodeType": "VariableDeclaration",
                      "scope": 15602,
                      "src": "10891:24:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15570,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10891:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15576,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 15573,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15563,
                        "src": "10928:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 15574,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15565,
                        "src": "10935:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 15572,
                      "name": "allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15182,
                      "src": "10918:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view returns (uint256)"
                      }
                    },
                    "id": 15575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10918:25:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10891:52:3"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15577,
                      "name": "currentAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15571,
                      "src": "10957:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 15580,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10982:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 15579,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10982:7:3",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 15578,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "10977:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 15581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10977:13:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 15582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "10977:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10957:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15601,
                  "nodeType": "IfStatement",
                  "src": "10953:243:3",
                  "trueBody": {
                    "id": 15600,
                    "nodeType": "Block",
                    "src": "10996:200:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 15587,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 15585,
                                "name": "currentAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15571,
                                "src": "11018:16:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 15586,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15567,
                                "src": "11038:6:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11018:26:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20696e73756666696369656e7420616c6c6f77616e6365",
                              "id": 15588,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11046:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe",
                                "typeString": "literal_string \"ERC20: insufficient allowance\""
                              },
                              "value": "ERC20: insufficient allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe",
                                "typeString": "literal_string \"ERC20: insufficient allowance\""
                              }
                            ],
                            "id": 15584,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "11010:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 15589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11010:68:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 15590,
                        "nodeType": "ExpressionStatement",
                        "src": "11010:68:3"
                      },
                      {
                        "id": 15599,
                        "nodeType": "UncheckedBlock",
                        "src": "11092:94:3",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 15592,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15563,
                                  "src": "11129:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 15593,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15565,
                                  "src": "11136:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 15596,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 15594,
                                    "name": "currentAllowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15571,
                                    "src": "11145:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 15595,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15567,
                                    "src": "11164:6:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11145:25:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 15591,
                                "name": "_approve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15560,
                                "src": "11120:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 15597,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11120:51:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 15598,
                            "nodeType": "ExpressionStatement",
                            "src": "11120:51:3"
                          }
                        ]
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 15561,
              "nodeType": "StructuredDocumentation",
              "src": "10486:270:3",
              "text": " @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n Does not update the allowance amount in case of infinite allowance.\n Revert if not enough allowance is available.\n Might emit an {Approval} event."
            },
            "id": 15603,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_spendAllowance",
            "nameLocation": "10770:15:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15563,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "10803:5:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15603,
                  "src": "10795:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15562,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10795:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15565,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "10826:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15603,
                  "src": "10818:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15564,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10818:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15567,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "10851:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15603,
                  "src": "10843:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15566,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10843:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10785:78:3"
            },
            "returnParameters": {
              "id": 15569,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10881:0:3"
            },
            "scope": 15626,
            "src": "10761:441:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15613,
              "nodeType": "Block",
              "src": "11905:2:3",
              "statements": []
            },
            "documentation": {
              "id": 15604,
              "nodeType": "StructuredDocumentation",
              "src": "11208:573:3",
              "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
            },
            "id": 15614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nameLocation": "11795:20:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15606,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "11833:4:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15614,
                  "src": "11825:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15605,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11825:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15608,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "11855:2:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15614,
                  "src": "11847:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15607,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11847:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15610,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "11875:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15614,
                  "src": "11867:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15609,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11867:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11815:72:3"
            },
            "returnParameters": {
              "id": 15612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11905:0:3"
            },
            "scope": 15626,
            "src": "11786:121:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15624,
              "nodeType": "Block",
              "src": "12613:2:3",
              "statements": []
            },
            "documentation": {
              "id": 15615,
              "nodeType": "StructuredDocumentation",
              "src": "11913:577:3",
              "text": " @dev Hook that is called after any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n has been transferred to `to`.\n - when `from` is zero, `amount` tokens have been minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
            },
            "id": 15625,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterTokenTransfer",
            "nameLocation": "12504:19:3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15617,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "12541:4:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15625,
                  "src": "12533:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15616,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12533:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15619,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "12563:2:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15625,
                  "src": "12555:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12555:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15621,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12583:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 15625,
                  "src": "12575:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15620,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12575:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12523:72:3"
            },
            "returnParameters": {
              "id": 15623,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12613:0:3"
            },
            "scope": 15626,
            "src": "12495:120:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 15627,
        "src": "1403:11214:3"
      }
    ],
    "src": "105:12513:3"
  },
  "bytecode": "60806040523480156200001157600080fd5b5060405162000b0e38038062000b0e8339810160408190526200003491620001c1565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b5050506200027b565b828054620000769062000228565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b600082601f8301126200011f578081fd5b81516001600160401b03808211156200013c576200013c62000265565b604051601f8301601f19908116603f0116810190828211818310171562000167576200016762000265565b8160405283815260209250868385880101111562000183578485fd5b8491505b83821015620001a6578582018301518183018401529082019062000187565b83821115620001b757848385830101525b9695505050505050565b60008060408385031215620001d4578182fd5b82516001600160401b0380821115620001eb578384fd5b620001f9868387016200010e565b935060208501519150808211156200020f578283fd5b506200021e858286016200010e565b9150509250929050565b6002810460018216806200023d57607f821691505b602082108114156200025f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610883806200028b6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b4114610149578063a457c2d714610151578063a9059cbb14610164578063dd62ed3e14610177576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b661018a565b6040516100c3919061079b565b60405180910390f35b6100df6100da366004610772565b61021c565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610737565b610234565b604051601281526020016100c3565b6100df610131366004610772565b610258565b6100f36101443660046106e4565b61027a565b6100b6610299565b6100df61015f366004610772565b6102a8565b6100df610172366004610772565b610328565b6100f3610185366004610705565b610336565b60606003805461019990610812565b80601f01602080910402602001604051908101604052809291908181526020018280546101c590610812565b80156102125780601f106101e757610100808354040283529160200191610212565b820191906000526020600020905b8154815290600101906020018083116101f557829003601f168201915b5050505050905090565b60003361022a818585610361565b5060019392505050565b600033610242858285610485565b61024d8585856104ff565b506001949350505050565b60003361022a81858561026b8383610336565b61027591906107ee565b610361565b6001600160a01b0381166000908152602081905260409020545b919050565b60606004805461019990610812565b600033816102b68286610336565b90508381101561031b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61024d8286868403610361565b60003361022a8185856104ff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103c35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610312565b6001600160a01b0382166104245760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610312565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006104918484610336565b905060001981146104f957818110156104ec5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610312565b6104f98484848403610361565b50505050565b6001600160a01b0383166105635760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610312565b6001600160a01b0382166105c55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610312565b6001600160a01b0383166000908152602081905260409020548181101561063d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610312565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106749084906107ee565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106c091815260200190565b60405180910390a36104f9565b80356001600160a01b038116811461029457600080fd5b6000602082840312156106f5578081fd5b6106fe826106cd565b9392505050565b60008060408385031215610717578081fd5b610720836106cd565b915061072e602084016106cd565b90509250929050565b60008060006060848603121561074b578081fd5b610754846106cd565b9250610762602085016106cd565b9150604084013590509250925092565b60008060408385031215610784578182fd5b61078d836106cd565b946020939093013593505050565b6000602080835283518082850152825b818110156107c7578581018301518582016040015282016107ab565b818111156107d85783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111561080d57634e487b7160e01b81526011600452602481fd5b500190565b60028104600182168061082657607f821691505b6020821081141561084757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212201d65424c87801e0ad181baa5579aa2176229a4655dc3a200f3c9e86b201e1f5964736f6c63430008020033",
  "bytecodeSha1": "71605a868616f9bae27ca25f03debb23c02e3c85",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "ERC20",
  "coverageMap": {
    "branches": {
      "11": {},
      "3": {
        "ERC20._approve": {
          "30": [
            10241,
            10260,
            true
          ],
          "31": [
            10319,
            10340,
            true
          ]
        },
        "ERC20._spendAllowance": {
          "32": [
            10957,
            10994,
            false
          ],
          "33": [
            11018,
            11044,
            true
          ]
        },
        "ERC20._transfer": {
          "34": [
            7601,
            7619,
            true
          ],
          "35": [
            7679,
            7695,
            true
          ],
          "36": [
            7850,
            7871,
            true
          ]
        },
        "ERC20.decreaseAllowance": {
          "29": [
            6811,
            6846,
            true
          ]
        }
      },
      "4": {},
      "5": {}
    },
    "statements": {
      "11": {
        "Context._msgSender": {
          "3": [
            712,
            729
          ]
        }
      },
      "3": {
        "ERC20._approve": {
          "16": [
            10233,
            10301
          ],
          "17": [
            10311,
            10379
          ],
          "18": [
            10390,
            10426
          ],
          "19": [
            10436,
            10473
          ]
        },
        "ERC20._spendAllowance": {
          "20": [
            11010,
            11078
          ],
          "21": [
            11120,
            11171
          ]
        },
        "ERC20._transfer": {
          "22": [
            7593,
            7661
          ],
          "23": [
            7671,
            7735
          ],
          "24": [
            7842,
            7914
          ],
          "25": [
            7948,
            7986
          ],
          "26": [
            8006,
            8029
          ],
          "27": [
            8040,
            8071
          ],
          "28": [
            8082,
            8119
          ]
        },
        "ERC20.allowance": {
          "15": [
            4084,
            4118
          ]
        },
        "ERC20.approve": {
          "4": [
            4570,
            4602
          ],
          "5": [
            4612,
            4623
          ]
        },
        "ERC20.balanceOf": {
          "10": [
            3501,
            3526
          ]
        },
        "ERC20.decimals": {
          "1": [
            3168,
            3177
          ]
        },
        "ERC20.decreaseAllowance": {
          "12": [
            6803,
            6888
          ],
          "13": [
            6922,
            6982
          ]
        },
        "ERC20.increaseAllowance": {
          "9": [
            6015,
            6079
          ]
        },
        "ERC20.name": {
          "2": [
            2235,
            2247
          ]
        },
        "ERC20.symbol": {
          "11": [
            2448,
            2462
          ]
        },
        "ERC20.totalSupply": {
          "0": [
            3324,
            3343
          ]
        },
        "ERC20.transfer": {
          "14": [
            3862,
            3890
          ]
        },
        "ERC20.transferFrom": {
          "6": [
            5375,
            5413
          ],
          "7": [
            5423,
            5450
          ],
          "8": [
            5460,
            5471
          ]
        }
      },
      "4": {},
      "5": {}
    }
  },
  "dependencies": [
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Context",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC20",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC20Metadata"
  ],
  "deployedBytecode": "608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b4114610149578063a457c2d714610151578063a9059cbb14610164578063dd62ed3e14610177576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b661018a565b6040516100c3919061079b565b60405180910390f35b6100df6100da366004610772565b61021c565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610737565b610234565b604051601281526020016100c3565b6100df610131366004610772565b610258565b6100f36101443660046106e4565b61027a565b6100b6610299565b6100df61015f366004610772565b6102a8565b6100df610172366004610772565b610328565b6100f3610185366004610705565b610336565b60606003805461019990610812565b80601f01602080910402602001604051908101604052809291908181526020018280546101c590610812565b80156102125780601f106101e757610100808354040283529160200191610212565b820191906000526020600020905b8154815290600101906020018083116101f557829003601f168201915b5050505050905090565b60003361022a818585610361565b5060019392505050565b600033610242858285610485565b61024d8585856104ff565b506001949350505050565b60003361022a81858561026b8383610336565b61027591906107ee565b610361565b6001600160a01b0381166000908152602081905260409020545b919050565b60606004805461019990610812565b600033816102b68286610336565b90508381101561031b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61024d8286868403610361565b60003361022a8185856104ff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103c35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610312565b6001600160a01b0382166104245760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610312565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006104918484610336565b905060001981146104f957818110156104ec5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610312565b6104f98484848403610361565b50505050565b6001600160a01b0383166105635760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610312565b6001600160a01b0382166105c55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610312565b6001600160a01b0383166000908152602081905260409020548181101561063d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610312565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106749084906107ee565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106c091815260200190565b60405180910390a36104f9565b80356001600160a01b038116811461029457600080fd5b6000602082840312156106f5578081fd5b6106fe826106cd565b9392505050565b60008060408385031215610717578081fd5b610720836106cd565b915061072e602084016106cd565b90509250929050565b60008060006060848603121561074b578081fd5b610754846106cd565b9250610762602085016106cd565b9150604084013590509250925092565b60008060408385031215610784578182fd5b61078d836106cd565b946020939093013593505050565b6000602080835283518082850152825b818110156107c7578581018301518582016040015282016107ab565b818111156107d85783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111561080d57634e487b7160e01b81526011600452602481fd5b500190565b60028104600182168061082657607f821691505b6020821081141561084757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212201d65424c87801e0ad181baa5579aa2176229a4655dc3a200f3c9e86b201e1f5964736f6c63430008020033",
  "deployedSourceMap": "1403:11214:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4433:197;;;;;;:::i;:::-;;:::i;:::-;;;1445:14:67;;1438:22;1420:41;;1408:2;1393:18;4433:197:3;1375:92:67;3244:106:3;3331:12;;3244:106;;;5015:25:67;;;5003:2;4988:18;3244:106:3;4970:76:67;5192:286:3;;;;;;:::i;:::-;;:::i;3093:91::-;;;3175:2;5193:36:67;;5181:2;5166:18;3093:91:3;5148:87:67;5873:234:3;;;;;;:::i;:::-;;:::i;3408:125::-;;;;;;:::i;:::-;;:::i;2367:102::-;;;:::i;6594:427::-;;;;;;:::i;:::-;;:::i;3729:189::-;;;;;;:::i;:::-;;:::i;3976:149::-;;;;;;:::i;:::-;;:::i;2156:98::-;2210:13;2242:5;2235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98;:::o;4433:197::-;4516:4;719:10:11;4570:32:3;719:10:11;4586:7:3;4595:6;4570:8;:32::i;:::-;-1:-1:-1;4619:4:3;;4433:197;-1:-1:-1;;;4433:197:3:o;5192:286::-;5319:4;719:10:11;5375:38:3;5391:4;719:10:11;5406:6:3;5375:15;:38::i;:::-;5423:27;5433:4;5439:2;5443:6;5423:9;:27::i;:::-;-1:-1:-1;5467:4:3;;5192:286;-1:-1:-1;;;;5192:286:3:o;5873:234::-;5961:4;719:10:11;6015:64:3;719:10:11;6031:7:3;6068:10;6040:25;719:10:11;6031:7:3;6040:9;:25::i;:::-;:38;;;;:::i;:::-;6015:8;:64::i;3408:125::-;-1:-1:-1;;;;;3508:18:3;;3482:7;3508:18;;;;;;;;;;;3408:125;;;;:::o;2367:102::-;2423:13;2455:7;2448:14;;;;;:::i;6594:427::-;6687:4;719:10:11;6687:4:3;6768:25;719:10:11;6785:7:3;6768:9;:25::i;:::-;6741:52;;6831:15;6811:16;:35;;6803:85;;;;-1:-1:-1;;;6803:85:3;;4665:2:67;6803:85:3;;;4647:21:67;4704:2;4684:18;;;4677:30;4743:34;4723:18;;;4716:62;-1:-1:-1;;;4794:18:67;;;4787:35;4839:19;;6803:85:3;;;;;;;;;6922:60;6931:5;6938:7;6966:15;6947:16;:34;6922:8;:60::i;3729:189::-;3808:4;719:10:11;3862:28:3;719:10:11;3879:2:3;3883:6;3862:9;:28::i;3976:149::-;-1:-1:-1;;;;;4091:18:3;;;4065:7;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3976:149::o;10110:370::-;-1:-1:-1;;;;;10241:19:3;;10233:68;;;;-1:-1:-1;;;10233:68:3;;4260:2:67;10233:68:3;;;4242:21:67;4299:2;4279:18;;;4272:30;4338:34;4318:18;;;4311:62;-1:-1:-1;;;4389:18:67;;;4382:34;4433:19;;10233:68:3;4232:226:67;10233:68:3;-1:-1:-1;;;;;10319:21:3;;10311:68;;;;-1:-1:-1;;;10311:68:3;;2686:2:67;10311:68:3;;;2668:21:67;2725:2;2705:18;;;2698:30;2764:34;2744:18;;;2737:62;-1:-1:-1;;;2815:18:67;;;2808:32;2857:19;;10311:68:3;2658:224:67;10311:68:3;-1:-1:-1;;;;;10390:18:3;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10441:32;;5015:25:67;;;10441:32:3;;4988:18:67;10441:32:3;;;;;;;10110:370;;;:::o;10761:441::-;10891:24;10918:25;10928:5;10935:7;10918:9;:25::i;:::-;10891:52;;-1:-1:-1;;10957:16:3;:37;10953:243;;11038:6;11018:16;:26;;11010:68;;;;-1:-1:-1;;;11010:68:3;;3089:2:67;11010:68:3;;;3071:21:67;3128:2;3108:18;;;3101:30;3167:31;3147:18;;;3140:59;3216:18;;11010:68:3;3061:179:67;11010:68:3;11120:51;11129:5;11136:7;11164:6;11145:16;:25;11120:8;:51::i;:::-;10761:441;;;;:::o;7475:651::-;-1:-1:-1;;;;;7601:18:3;;7593:68;;;;-1:-1:-1;;;7593:68:3;;3854:2:67;7593:68:3;;;3836:21:67;3893:2;3873:18;;;3866:30;3932:34;3912:18;;;3905:62;-1:-1:-1;;;3983:18:67;;;3976:35;4028:19;;7593:68:3;3826:227:67;7593:68:3;-1:-1:-1;;;;;7679:16:3;;7671:64;;;;-1:-1:-1;;;7671:64:3;;2282:2:67;7671:64:3;;;2264:21:67;2321:2;2301:18;;;2294:30;2360:34;2340:18;;;2333:62;-1:-1:-1;;;2411:18:67;;;2404:33;2454:19;;7671:64:3;2254:225:67;7671:64:3;-1:-1:-1;;;;;7817:15:3;;7795:19;7817:15;;;;;;;;;;;7850:21;;;;7842:72;;;;-1:-1:-1;;;7842:72:3;;3447:2:67;7842:72:3;;;3429:21:67;3486:2;3466:18;;;3459:30;3525:34;3505:18;;;3498:62;-1:-1:-1;;;3576:18:67;;;3569:36;3622:19;;7842:72:3;3419:228:67;7842:72:3;-1:-1:-1;;;;;7948:15:3;;;:9;:15;;;;;;;;;;;7966:20;;;7948:38;;8006:13;;;;;;;;:23;;7980:6;;7948:9;8006:23;;7980:6;;8006:23;:::i;:::-;;;;;;;;8060:2;-1:-1:-1;;;;;8045:26:3;8054:4;-1:-1:-1;;;;;8045:26:3;;8064:6;8045:26;;;;5015:25:67;;5003:2;4988:18;;4970:76;8045:26:3;;;;;;;;8082:37;11786:121;14:173:67;82:20;;-1:-1:-1;;;;;131:31:67;;121:42;;111:2;;177:1;174;167:12;192:196;;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;:::-;343:39;262:126;-1:-1:-1;;;262:126:67:o;393:270::-;;;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;;;;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:264::-;;;1140:2;1128:9;1119:7;1115:23;1111:32;1108:2;;;1161:6;1153;1146:22;1108:2;1189:29;1208:9;1189:29;:::i;:::-;1179:39;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;1098:177:67:o;1472:603::-;;1613:2;1642;1631:9;1624:21;1674:6;1668:13;1717:6;1712:2;1701:9;1697:18;1690:34;1742:4;1755:140;1769:6;1766:1;1763:13;1755:140;;;1864:14;;;1860:23;;1854:30;1830:17;;;1849:2;1826:26;1819:66;1784:10;;1755:140;;;1913:6;1910:1;1907:13;1904:2;;;1983:4;1978:2;1969:6;1958:9;1954:22;1950:31;1943:45;1904:2;-1:-1:-1;2059:2:67;2038:15;-1:-1:-1;;2034:29:67;2019:45;;;;2066:2;2015:54;;1593:482;-1:-1:-1;;;1593:482:67:o;5240:229::-;;5311:1;5307:6;5304:1;5301:13;5298:2;;;-1:-1:-1;;;5337:33:67;;5393:4;5390:1;5383:15;5423:4;5344:3;5411:17;5298:2;-1:-1:-1;5454:9:67;;5288:181::o;5474:380::-;5559:1;5549:12;;5606:1;5596:12;;;5617:2;;5671:4;5663:6;5659:17;5649:27;;5617:2;5724;5716:6;5713:14;5693:18;5690:38;5687:2;;;5770:10;5765:3;5761:20;5758:1;5751:31;5805:4;5802:1;5795:15;5833:4;5830:1;5823:15;5687:2;;5529:325;;;:::o",
  "language": "Solidity",
  "natspec": {
    "details": "Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.",
    "kind": "dev",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "constructor": {
        "details": "Sets the values for {name} and {symbol}. The default value of {decimals} is 18. To select a different value for {decimals} you should overload it. All two of these values are immutable: they can only be set once during construction."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
      }
    },
    "version": 1
  },
  "offset": [
    1403,
    12617
  ],
  "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x177 JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x114 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x18A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x79B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x772 JUMP JUMPDEST PUSH2 0x21C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x737 JUMP JUMPDEST PUSH2 0x234 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x772 JUMP JUMPDEST PUSH2 0x258 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x6E4 JUMP JUMPDEST PUSH2 0x27A JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x299 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x15F CALLDATASIZE PUSH1 0x4 PUSH2 0x772 JUMP JUMPDEST PUSH2 0x2A8 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x172 CALLDATASIZE PUSH1 0x4 PUSH2 0x772 JUMP JUMPDEST PUSH2 0x328 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x185 CALLDATASIZE PUSH1 0x4 PUSH2 0x705 JUMP JUMPDEST PUSH2 0x336 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x199 SWAP1 PUSH2 0x812 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1C5 SWAP1 PUSH2 0x812 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x212 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1E7 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x212 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F5 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x22A DUP2 DUP6 DUP6 PUSH2 0x361 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x242 DUP6 DUP3 DUP6 PUSH2 0x485 JUMP JUMPDEST PUSH2 0x24D DUP6 DUP6 DUP6 PUSH2 0x4FF JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x22A DUP2 DUP6 DUP6 PUSH2 0x26B DUP4 DUP4 PUSH2 0x336 JUMP JUMPDEST PUSH2 0x275 SWAP2 SWAP1 PUSH2 0x7EE JUMP JUMPDEST PUSH2 0x361 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x199 SWAP1 PUSH2 0x812 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2B6 DUP3 DUP7 PUSH2 0x336 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x31B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x24D DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x361 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x22A DUP2 DUP6 DUP6 PUSH2 0x4FF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3C3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x312 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x424 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x312 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x491 DUP5 DUP5 PUSH2 0x336 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x4F9 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x312 JUMP JUMPDEST PUSH2 0x4F9 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x361 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x563 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x312 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x312 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x63D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x312 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE SWAP2 DUP6 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x674 SWAP1 DUP5 SWAP1 PUSH2 0x7EE JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x6C0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4F9 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6F5 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x6FE DUP3 PUSH2 0x6CD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x717 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x720 DUP4 PUSH2 0x6CD JUMP JUMPDEST SWAP2 POP PUSH2 0x72E PUSH1 0x20 DUP5 ADD PUSH2 0x6CD JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x74B JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x754 DUP5 PUSH2 0x6CD JUMP JUMPDEST SWAP3 POP PUSH2 0x762 PUSH1 0x20 DUP6 ADD PUSH2 0x6CD JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x784 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x78D DUP4 PUSH2 0x6CD JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7C7 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x7AB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x7D8 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x80D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x826 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x847 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR PUSH6 0x424C87801E0A 0xD1 DUP2 0xBA 0xA5 JUMPI SWAP11 LOG2 OR PUSH3 0x29A465 0x5D 0xC3 LOG2 STOP RETURN 0xC9 0xE8 PUSH12 0x201E1F5964736F6C63430008 MUL STOP CALLER ",
  "pcMap": {
    "0": {
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x80"
    },
    "2": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "4": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "5": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "CALLVALUE",
      "path": "3"
    },
    "6": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "7": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "ISZERO",
      "path": "3"
    },
    "8": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x10"
    },
    "11": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "12": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "14": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "15": {
      "dev": "Cannot send ether to nonpayable function",
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "REVERT",
      "path": "3"
    },
    "16": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "17": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "POP",
      "path": "3"
    },
    "18": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "20": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "21": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "LT",
      "path": "3"
    },
    "22": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xA9"
    },
    "25": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "26": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "28": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "CALLDATALOAD",
      "path": "3"
    },
    "29": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0xE0"
    },
    "31": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "SHR",
      "path": "3"
    },
    "32": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "33": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x39509351"
    },
    "38": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "GT",
      "path": "3"
    },
    "39": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x71"
    },
    "42": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "43": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "44": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x39509351"
    },
    "49": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "50": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x123"
    },
    "53": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "54": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "55": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x70A08231"
    },
    "60": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "61": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x136"
    },
    "64": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "65": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "66": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x95D89B41"
    },
    "71": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "72": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x149"
    },
    "75": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "76": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "77": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0xA457C2D7"
    },
    "82": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "83": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x151"
    },
    "86": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "87": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "88": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0xA9059CBB"
    },
    "93": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "94": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x164"
    },
    "97": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "98": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "99": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0xDD62ED3E"
    },
    "104": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "105": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x177"
    },
    "108": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "109": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xA9"
    },
    "112": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMP",
      "path": "3"
    },
    "113": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "114": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "115": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x6FDDE03"
    },
    "120": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "121": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xAE"
    },
    "124": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "125": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "126": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x95EA7B3"
    },
    "131": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "132": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xCC"
    },
    "135": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "136": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "137": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x18160DDD"
    },
    "142": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "143": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xEF"
    },
    "146": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "147": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "148": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x23B872DD"
    },
    "153": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "154": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x101"
    },
    "157": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "158": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "159": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH4",
      "path": "3",
      "value": "0x313CE567"
    },
    "164": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "EQ",
      "path": "3"
    },
    "165": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x114"
    },
    "168": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "169": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "170": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "172": {
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "DUP1",
      "path": "3"
    },
    "173": {
      "first_revert": true,
      "fn": null,
      "offset": [
        1403,
        12617
      ],
      "op": "REVERT",
      "path": "3"
    },
    "174": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "175": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xB6"
    },
    "178": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x18A"
    },
    "181": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2156,
        2254
      ],
      "op": "JUMP",
      "path": "3"
    },
    "182": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "183": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "185": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "186": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xC3"
    },
    "189": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "190": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "191": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x79B"
    },
    "194": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2156,
        2254
      ],
      "op": "JUMP",
      "path": "3"
    },
    "195": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "196": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "198": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "199": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "DUP1",
      "path": "3"
    },
    "200": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "201": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "SUB",
      "path": "3"
    },
    "202": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "203": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "RETURN",
      "path": "3"
    },
    "204": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "205": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xDF"
    },
    "208": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xDA"
    },
    "211": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "212": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "214": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x772"
    },
    "217": {
      "fn": "ERC20.approve",
      "jump": "i",
      "offset": [
        4433,
        4630
      ],
      "op": "JUMP",
      "path": "3"
    },
    "218": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "219": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x21C"
    },
    "222": {
      "fn": "ERC20.approve",
      "jump": "i",
      "offset": [
        4433,
        4630
      ],
      "op": "JUMP",
      "path": "3"
    },
    "223": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "224": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "226": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "227": {
      "op": "SWAP1"
    },
    "228": {
      "op": "ISZERO"
    },
    "229": {
      "op": "ISZERO"
    },
    "230": {
      "op": "DUP2"
    },
    "231": {
      "op": "MSTORE"
    },
    "232": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "234": {
      "op": "ADD"
    },
    "235": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xC3"
    },
    "238": {
      "op": "JUMP"
    },
    "239": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3244,
        3350
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "240": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3331,
        3343
      ],
      "op": "PUSH1",
      "path": "3",
      "statement": 0,
      "value": "0x2"
    },
    "242": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3331,
        3343
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "243": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3244,
        3350
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "244": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3244,
        3350
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "246": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3244,
        3350
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "247": {
      "op": "SWAP1"
    },
    "248": {
      "op": "DUP2"
    },
    "249": {
      "op": "MSTORE"
    },
    "250": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "252": {
      "op": "ADD"
    },
    "253": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3244,
        3350
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xC3"
    },
    "256": {
      "op": "JUMP"
    },
    "257": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "258": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xDF"
    },
    "261": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x10F"
    },
    "264": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "265": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "267": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x737"
    },
    "270": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5192,
        5478
      ],
      "op": "JUMP",
      "path": "3"
    },
    "271": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "272": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x234"
    },
    "275": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5192,
        5478
      ],
      "op": "JUMP",
      "path": "3"
    },
    "276": {
      "fn": "ERC20.decimals",
      "offset": [
        3093,
        3184
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "277": {
      "fn": "ERC20.decimals",
      "offset": [
        3093,
        3184
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "279": {
      "fn": "ERC20.decimals",
      "offset": [
        3093,
        3184
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "280": {
      "fn": "ERC20.decimals",
      "offset": [
        3175,
        3177
      ],
      "op": "PUSH1",
      "path": "3",
      "statement": 1,
      "value": "0x12"
    },
    "282": {
      "op": "DUP2"
    },
    "283": {
      "op": "MSTORE"
    },
    "284": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "286": {
      "op": "ADD"
    },
    "287": {
      "fn": "ERC20.decimals",
      "offset": [
        3093,
        3184
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xC3"
    },
    "290": {
      "op": "JUMP"
    },
    "291": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "292": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xDF"
    },
    "295": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x131"
    },
    "298": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "299": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "301": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x772"
    },
    "304": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        5873,
        6107
      ],
      "op": "JUMP",
      "path": "3"
    },
    "305": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "306": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x258"
    },
    "309": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        5873,
        6107
      ],
      "op": "JUMP",
      "path": "3"
    },
    "310": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "311": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xF3"
    },
    "314": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x144"
    },
    "317": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "318": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "320": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x6E4"
    },
    "323": {
      "fn": "ERC20.balanceOf",
      "jump": "i",
      "offset": [
        3408,
        3533
      ],
      "op": "JUMP",
      "path": "3"
    },
    "324": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "325": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x27A"
    },
    "328": {
      "fn": "ERC20.balanceOf",
      "jump": "i",
      "offset": [
        3408,
        3533
      ],
      "op": "JUMP",
      "path": "3"
    },
    "329": {
      "fn": "ERC20.symbol",
      "offset": [
        2367,
        2469
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "330": {
      "fn": "ERC20.symbol",
      "offset": [
        2367,
        2469
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xB6"
    },
    "333": {
      "fn": "ERC20.symbol",
      "offset": [
        2367,
        2469
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x299"
    },
    "336": {
      "fn": "ERC20.symbol",
      "jump": "i",
      "offset": [
        2367,
        2469
      ],
      "op": "JUMP",
      "path": "3"
    },
    "337": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "338": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xDF"
    },
    "341": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x15F"
    },
    "344": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "345": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "347": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x772"
    },
    "350": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6594,
        7021
      ],
      "op": "JUMP",
      "path": "3"
    },
    "351": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "352": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x2A8"
    },
    "355": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6594,
        7021
      ],
      "op": "JUMP",
      "path": "3"
    },
    "356": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "357": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xDF"
    },
    "360": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x172"
    },
    "363": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "364": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "366": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x772"
    },
    "369": {
      "fn": "ERC20.transfer",
      "jump": "i",
      "offset": [
        3729,
        3918
      ],
      "op": "JUMP",
      "path": "3"
    },
    "370": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "371": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x328"
    },
    "374": {
      "fn": "ERC20.transfer",
      "jump": "i",
      "offset": [
        3729,
        3918
      ],
      "op": "JUMP",
      "path": "3"
    },
    "375": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "376": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0xF3"
    },
    "379": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x185"
    },
    "382": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "CALLDATASIZE",
      "path": "3"
    },
    "383": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "385": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x705"
    },
    "388": {
      "fn": "ERC20.allowance",
      "jump": "i",
      "offset": [
        3976,
        4125
      ],
      "op": "JUMP",
      "path": "3"
    },
    "389": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "390": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x336"
    },
    "393": {
      "fn": "ERC20.allowance",
      "jump": "i",
      "offset": [
        3976,
        4125
      ],
      "op": "JUMP",
      "path": "3"
    },
    "394": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "395": {
      "fn": "ERC20.name",
      "offset": [
        2210,
        2223
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x60"
    },
    "397": {
      "fn": "ERC20.name",
      "offset": [
        2242,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "statement": 2,
      "value": "0x3"
    },
    "399": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "400": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "401": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x199"
    },
    "404": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "405": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x812"
    },
    "408": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMP",
      "path": "3"
    },
    "409": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "410": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "411": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x1F"
    },
    "413": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "414": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "416": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "417": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "418": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DIV",
      "path": "3"
    },
    "419": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MUL",
      "path": "3"
    },
    "420": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "422": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "423": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "425": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "426": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "427": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP2",
      "path": "3"
    },
    "428": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "429": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "431": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "432": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "433": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP3",
      "path": "3"
    },
    "434": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "435": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "436": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP2",
      "path": "3"
    },
    "437": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP2",
      "path": "3"
    },
    "438": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "439": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "441": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "442": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP3",
      "path": "3"
    },
    "443": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "444": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "445": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x1C5"
    },
    "448": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "449": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x812"
    },
    "452": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMP",
      "path": "3"
    },
    "453": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "454": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "455": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ISZERO",
      "path": "3"
    },
    "456": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x212"
    },
    "459": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "460": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "461": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x1F"
    },
    "463": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "LT",
      "path": "3"
    },
    "464": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x1E7"
    },
    "467": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "468": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x100"
    },
    "471": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "472": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP4",
      "path": "3"
    },
    "473": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "474": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DIV",
      "path": "3"
    },
    "475": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MUL",
      "path": "3"
    },
    "476": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP4",
      "path": "3"
    },
    "477": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "478": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "479": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "481": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "482": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "483": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x212"
    },
    "486": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMP",
      "path": "3"
    },
    "487": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "488": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP3",
      "path": "3"
    },
    "489": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "490": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "491": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "492": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "494": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "495": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "497": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "499": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "500": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "501": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "502": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP2",
      "path": "3"
    },
    "503": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "504": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP2",
      "path": "3"
    },
    "505": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "506": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "507": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x1"
    },
    "509": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "510": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "511": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "513": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "514": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP1",
      "path": "3"
    },
    "515": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP4",
      "path": "3"
    },
    "516": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "GT",
      "path": "3"
    },
    "517": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x1F5"
    },
    "520": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "521": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP3",
      "path": "3"
    },
    "522": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "523": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SUB",
      "path": "3"
    },
    "524": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x1F"
    },
    "526": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "AND",
      "path": "3"
    },
    "527": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "DUP3",
      "path": "3"
    },
    "528": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "ADD",
      "path": "3"
    },
    "529": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "530": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "531": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "POP",
      "path": "3"
    },
    "532": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "POP",
      "path": "3"
    },
    "533": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "POP",
      "path": "3"
    },
    "534": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "POP",
      "path": "3"
    },
    "535": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "POP",
      "path": "3"
    },
    "536": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "537": {
      "fn": "ERC20.name",
      "offset": [
        2235,
        2247
      ],
      "op": "POP",
      "path": "3"
    },
    "538": {
      "fn": "ERC20.name",
      "offset": [
        2156,
        2254
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "539": {
      "fn": "ERC20.name",
      "jump": "o",
      "offset": [
        2156,
        2254
      ],
      "op": "JUMP",
      "path": "3"
    },
    "540": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "541": {
      "fn": "ERC20.approve",
      "offset": [
        4516,
        4520
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "543": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "11",
      "statement": 3
    },
    "544": {
      "fn": "ERC20.approve",
      "offset": [
        4570,
        4602
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 4,
      "value": "0x22A"
    },
    "547": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP2",
      "path": "11"
    },
    "548": {
      "fn": "ERC20.approve",
      "offset": [
        4586,
        4593
      ],
      "op": "DUP6",
      "path": "3"
    },
    "549": {
      "fn": "ERC20.approve",
      "offset": [
        4595,
        4601
      ],
      "op": "DUP6",
      "path": "3"
    },
    "550": {
      "fn": "ERC20.approve",
      "offset": [
        4570,
        4578
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x361"
    },
    "553": {
      "fn": "ERC20.approve",
      "jump": "i",
      "offset": [
        4570,
        4602
      ],
      "op": "JUMP",
      "path": "3"
    },
    "554": {
      "fn": "ERC20.approve",
      "offset": [
        4570,
        4602
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "555": {
      "op": "POP"
    },
    "556": {
      "fn": "ERC20.approve",
      "offset": [
        4619,
        4623
      ],
      "op": "PUSH1",
      "path": "3",
      "statement": 5,
      "value": "0x1"
    },
    "558": {
      "fn": "ERC20.approve",
      "offset": [
        4619,
        4623
      ],
      "op": "SWAP4",
      "path": "3"
    },
    "559": {
      "fn": "ERC20.approve",
      "offset": [
        4433,
        4630
      ],
      "op": "SWAP3",
      "path": "3"
    },
    "560": {
      "op": "POP"
    },
    "561": {
      "op": "POP"
    },
    "562": {
      "op": "POP"
    },
    "563": {
      "fn": "ERC20.approve",
      "jump": "o",
      "offset": [
        4433,
        4630
      ],
      "op": "JUMP",
      "path": "3"
    },
    "564": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "565": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5319,
        5323
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "567": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "11"
    },
    "568": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5375,
        5413
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 6,
      "value": "0x242"
    },
    "571": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5391,
        5395
      ],
      "op": "DUP6",
      "path": "3"
    },
    "572": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP3",
      "path": "11"
    },
    "573": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5406,
        5412
      ],
      "op": "DUP6",
      "path": "3"
    },
    "574": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5375,
        5390
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x485"
    },
    "577": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5375,
        5413
      ],
      "op": "JUMP",
      "path": "3"
    },
    "578": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5375,
        5413
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "579": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5423,
        5450
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 7,
      "value": "0x24D"
    },
    "582": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5433,
        5437
      ],
      "op": "DUP6",
      "path": "3"
    },
    "583": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5439,
        5441
      ],
      "op": "DUP6",
      "path": "3"
    },
    "584": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5443,
        5449
      ],
      "op": "DUP6",
      "path": "3"
    },
    "585": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5423,
        5432
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x4FF"
    },
    "588": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5423,
        5450
      ],
      "op": "JUMP",
      "path": "3"
    },
    "589": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5423,
        5450
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "590": {
      "op": "POP"
    },
    "591": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5467,
        5471
      ],
      "op": "PUSH1",
      "path": "3",
      "statement": 8,
      "value": "0x1"
    },
    "593": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5467,
        5471
      ],
      "op": "SWAP5",
      "path": "3"
    },
    "594": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5192,
        5478
      ],
      "op": "SWAP4",
      "path": "3"
    },
    "595": {
      "op": "POP"
    },
    "596": {
      "op": "POP"
    },
    "597": {
      "op": "POP"
    },
    "598": {
      "op": "POP"
    },
    "599": {
      "fn": "ERC20.transferFrom",
      "jump": "o",
      "offset": [
        5192,
        5478
      ],
      "op": "JUMP",
      "path": "3"
    },
    "600": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5873,
        6107
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "601": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5961,
        5965
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "603": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "11"
    },
    "604": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6015,
        6079
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 9,
      "value": "0x22A"
    },
    "607": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP2",
      "path": "11"
    },
    "608": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6031,
        6038
      ],
      "op": "DUP6",
      "path": "3"
    },
    "609": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6068,
        6078
      ],
      "op": "DUP6",
      "path": "3"
    },
    "610": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6065
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x26B"
    },
    "613": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP4",
      "path": "11"
    },
    "614": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6031,
        6038
      ],
      "op": "DUP4",
      "path": "3"
    },
    "615": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6049
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x336"
    },
    "618": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        6040,
        6065
      ],
      "op": "JUMP",
      "path": "3"
    },
    "619": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6065
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "620": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6078
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x275"
    },
    "623": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6078
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "624": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6078
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "625": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6078
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x7EE"
    },
    "628": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        6040,
        6078
      ],
      "op": "JUMP",
      "path": "3"
    },
    "629": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6040,
        6078
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "630": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6015,
        6023
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x361"
    },
    "633": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        6015,
        6079
      ],
      "op": "JUMP",
      "path": "3"
    },
    "634": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "635": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "637": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "639": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "641": {
      "op": "SHL"
    },
    "642": {
      "op": "SUB"
    },
    "643": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "DUP2",
      "path": "3",
      "statement": 10
    },
    "644": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "AND",
      "path": "3"
    },
    "645": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3482,
        3489
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "647": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "648": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "DUP2",
      "path": "3"
    },
    "649": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "650": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "652": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "DUP2",
      "path": "3"
    },
    "653": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "654": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "655": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "657": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "658": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "659": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3508,
        3526
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "660": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "661": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "662": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "663": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3408,
        3533
      ],
      "op": "POP",
      "path": "3"
    },
    "664": {
      "fn": "ERC20.balanceOf",
      "jump": "o",
      "offset": [
        3408,
        3533
      ],
      "op": "JUMP",
      "path": "3"
    },
    "665": {
      "fn": "ERC20.symbol",
      "offset": [
        2367,
        2469
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "666": {
      "fn": "ERC20.symbol",
      "offset": [
        2423,
        2436
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x60"
    },
    "668": {
      "fn": "ERC20.symbol",
      "offset": [
        2455,
        2462
      ],
      "op": "PUSH1",
      "path": "3",
      "statement": 11,
      "value": "0x4"
    },
    "670": {
      "fn": "ERC20.symbol",
      "offset": [
        2448,
        2462
      ],
      "op": "DUP1",
      "path": "3"
    },
    "671": {
      "fn": "ERC20.symbol",
      "offset": [
        2448,
        2462
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "672": {
      "fn": "ERC20.symbol",
      "offset": [
        2448,
        2462
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x199"
    },
    "675": {
      "fn": "ERC20.symbol",
      "offset": [
        2448,
        2462
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "676": {
      "fn": "ERC20.symbol",
      "offset": [
        2448,
        2462
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x812"
    },
    "679": {
      "fn": "ERC20.symbol",
      "jump": "i",
      "offset": [
        2448,
        2462
      ],
      "op": "JUMP",
      "path": "3"
    },
    "680": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6594,
        7021
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "681": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6687,
        6691
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "683": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "11"
    },
    "684": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6687,
        6691
      ],
      "op": "DUP2",
      "path": "3"
    },
    "685": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6768,
        6793
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x2B6"
    },
    "688": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP3",
      "path": "11"
    },
    "689": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6785,
        6792
      ],
      "op": "DUP7",
      "path": "3"
    },
    "690": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6768,
        6777
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x336"
    },
    "693": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6768,
        6793
      ],
      "op": "JUMP",
      "path": "3"
    },
    "694": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6768,
        6793
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "695": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6741,
        6793
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "696": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6741,
        6793
      ],
      "op": "POP",
      "path": "3"
    },
    "697": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6831,
        6846
      ],
      "op": "DUP4",
      "path": "3",
      "statement": 12
    },
    "698": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6811,
        6827
      ],
      "op": "DUP2",
      "path": "3"
    },
    "699": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6811,
        6846
      ],
      "op": "LT",
      "path": "3"
    },
    "700": {
      "branch": 29,
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6811,
        6846
      ],
      "op": "ISZERO",
      "path": "3"
    },
    "701": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x31B"
    },
    "704": {
      "branch": 29,
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "705": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "707": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "708": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "712": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "714": {
      "op": "SHL"
    },
    "715": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "DUP2",
      "path": "3"
    },
    "716": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "717": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "719": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "721": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "DUP3",
      "path": "3"
    },
    "722": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "ADD",
      "path": "3"
    },
    "723": {
      "op": "MSTORE"
    },
    "724": {
      "op": "PUSH1",
      "value": "0x25"
    },
    "726": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "728": {
      "op": "DUP3"
    },
    "729": {
      "op": "ADD"
    },
    "730": {
      "op": "MSTORE"
    },
    "731": {
      "op": "PUSH32",
      "value": "0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77"
    },
    "764": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "766": {
      "op": "DUP3"
    },
    "767": {
      "op": "ADD"
    },
    "768": {
      "op": "MSTORE"
    },
    "769": {
      "op": "PUSH5",
      "value": "0x207A65726F"
    },
    "775": {
      "op": "PUSH1",
      "value": "0xD8"
    },
    "777": {
      "op": "SHL"
    },
    "778": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "780": {
      "op": "DUP3"
    },
    "781": {
      "op": "ADD"
    },
    "782": {
      "op": "MSTORE"
    },
    "783": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "785": {
      "op": "ADD"
    },
    "786": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "787": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "789": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "790": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "DUP1",
      "path": "3"
    },
    "791": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "792": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "SUB",
      "path": "3"
    },
    "793": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "794": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "REVERT",
      "optimizer_revert": true,
      "path": "3"
    },
    "795": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6803,
        6888
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "796": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6922,
        6982
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 13,
      "value": "0x24D"
    },
    "799": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6931,
        6936
      ],
      "op": "DUP3",
      "path": "3"
    },
    "800": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6938,
        6945
      ],
      "op": "DUP7",
      "path": "3"
    },
    "801": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6966,
        6981
      ],
      "op": "DUP7",
      "path": "3"
    },
    "802": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6947,
        6963
      ],
      "op": "DUP5",
      "path": "3"
    },
    "803": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6947,
        6981
      ],
      "op": "SUB",
      "path": "3"
    },
    "804": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6922,
        6930
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x361"
    },
    "807": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6922,
        6982
      ],
      "op": "JUMP",
      "path": "3"
    },
    "808": {
      "fn": "ERC20.transfer",
      "offset": [
        3729,
        3918
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "809": {
      "fn": "ERC20.transfer",
      "offset": [
        3808,
        3812
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "811": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "11"
    },
    "812": {
      "fn": "ERC20.transfer",
      "offset": [
        3862,
        3890
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 14,
      "value": "0x22A"
    },
    "815": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP2",
      "path": "11"
    },
    "816": {
      "fn": "ERC20.transfer",
      "offset": [
        3879,
        3881
      ],
      "op": "DUP6",
      "path": "3"
    },
    "817": {
      "fn": "ERC20.transfer",
      "offset": [
        3883,
        3889
      ],
      "op": "DUP6",
      "path": "3"
    },
    "818": {
      "fn": "ERC20.transfer",
      "offset": [
        3862,
        3871
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x4FF"
    },
    "821": {
      "fn": "ERC20.transfer",
      "jump": "i",
      "offset": [
        3862,
        3890
      ],
      "op": "JUMP",
      "path": "3"
    },
    "822": {
      "fn": "ERC20.allowance",
      "offset": [
        3976,
        4125
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "823": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "825": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "827": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "829": {
      "op": "SHL"
    },
    "830": {
      "op": "SUB"
    },
    "831": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "SWAP2",
      "path": "3",
      "statement": 15
    },
    "832": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "DUP3",
      "path": "3"
    },
    "833": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "AND",
      "path": "3"
    },
    "834": {
      "fn": "ERC20.allowance",
      "offset": [
        4065,
        4072
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "836": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "837": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "DUP2",
      "path": "3"
    },
    "838": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "839": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4102
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x1"
    },
    "841": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "843": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "844": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "DUP2",
      "path": "3"
    },
    "845": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "846": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "848": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "DUP1",
      "path": "3"
    },
    "849": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "DUP4",
      "path": "3"
    },
    "850": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4109
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "851": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SWAP4",
      "path": "3"
    },
    "852": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "853": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SWAP5",
      "path": "3"
    },
    "854": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "AND",
      "path": "3"
    },
    "855": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "DUP3",
      "path": "3"
    },
    "856": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "857": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "858": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "859": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "860": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "861": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "862": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "863": {
      "fn": "ERC20.allowance",
      "offset": [
        4091,
        4118
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "864": {
      "fn": "ERC20.allowance",
      "jump": "o",
      "offset": [
        3976,
        4125
      ],
      "op": "JUMP",
      "path": "3"
    },
    "865": {
      "fn": "ERC20._approve",
      "offset": [
        10110,
        10480
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "866": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "868": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "870": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "872": {
      "op": "SHL"
    },
    "873": {
      "op": "SUB"
    },
    "874": {
      "fn": "ERC20._approve",
      "offset": [
        10241,
        10260
      ],
      "op": "DUP4",
      "path": "3",
      "statement": 16
    },
    "875": {
      "branch": 30,
      "fn": "ERC20._approve",
      "offset": [
        10241,
        10260
      ],
      "op": "AND",
      "path": "3"
    },
    "876": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x3C3"
    },
    "879": {
      "branch": 30,
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "880": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "882": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "883": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "887": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "889": {
      "op": "SHL"
    },
    "890": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "DUP2",
      "path": "3"
    },
    "891": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "892": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "894": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "896": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "DUP3",
      "path": "3"
    },
    "897": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "ADD",
      "path": "3"
    },
    "898": {
      "op": "MSTORE"
    },
    "899": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "901": {
      "op": "DUP1"
    },
    "902": {
      "op": "DUP3"
    },
    "903": {
      "op": "ADD"
    },
    "904": {
      "op": "MSTORE"
    },
    "905": {
      "op": "PUSH32",
      "value": "0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464"
    },
    "938": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "940": {
      "op": "DUP3"
    },
    "941": {
      "op": "ADD"
    },
    "942": {
      "op": "MSTORE"
    },
    "943": {
      "op": "PUSH4",
      "value": "0x72657373"
    },
    "948": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "950": {
      "op": "SHL"
    },
    "951": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "953": {
      "op": "DUP3"
    },
    "954": {
      "op": "ADD"
    },
    "955": {
      "op": "MSTORE"
    },
    "956": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "958": {
      "op": "ADD"
    },
    "959": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x312"
    },
    "962": {
      "op": "JUMP"
    },
    "963": {
      "fn": "ERC20._approve",
      "offset": [
        10233,
        10301
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "964": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "966": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "968": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "970": {
      "op": "SHL"
    },
    "971": {
      "op": "SUB"
    },
    "972": {
      "fn": "ERC20._approve",
      "offset": [
        10319,
        10340
      ],
      "op": "DUP3",
      "path": "3",
      "statement": 17
    },
    "973": {
      "branch": 31,
      "fn": "ERC20._approve",
      "offset": [
        10319,
        10340
      ],
      "op": "AND",
      "path": "3"
    },
    "974": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x424"
    },
    "977": {
      "branch": 31,
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "978": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "980": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "981": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "985": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "987": {
      "op": "SHL"
    },
    "988": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "DUP2",
      "path": "3"
    },
    "989": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "990": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "992": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "994": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "DUP3",
      "path": "3"
    },
    "995": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "ADD",
      "path": "3"
    },
    "996": {
      "op": "MSTORE"
    },
    "997": {
      "op": "PUSH1",
      "value": "0x22"
    },
    "999": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1001": {
      "op": "DUP3"
    },
    "1002": {
      "op": "ADD"
    },
    "1003": {
      "op": "MSTORE"
    },
    "1004": {
      "op": "PUSH32",
      "value": "0x45524332303A20617070726F766520746F20746865207A65726F206164647265"
    },
    "1037": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1039": {
      "op": "DUP3"
    },
    "1040": {
      "op": "ADD"
    },
    "1041": {
      "op": "MSTORE"
    },
    "1042": {
      "op": "PUSH2",
      "value": "0x7373"
    },
    "1045": {
      "op": "PUSH1",
      "value": "0xF0"
    },
    "1047": {
      "op": "SHL"
    },
    "1048": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1050": {
      "op": "DUP3"
    },
    "1051": {
      "op": "ADD"
    },
    "1052": {
      "op": "MSTORE"
    },
    "1053": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1055": {
      "op": "ADD"
    },
    "1056": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x312"
    },
    "1059": {
      "op": "JUMP"
    },
    "1060": {
      "fn": "ERC20._approve",
      "offset": [
        10311,
        10379
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1061": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1063": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1065": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1067": {
      "op": "SHL"
    },
    "1068": {
      "op": "SUB"
    },
    "1069": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "DUP4",
      "path": "3",
      "statement": 18
    },
    "1070": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1071": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "AND",
      "path": "3"
    },
    "1072": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "1074": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1075": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1076": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1077": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10401
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x1"
    },
    "1079": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "1081": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1082": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1083": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1084": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1086": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "DUP1",
      "path": "3"
    },
    "1087": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "DUP4",
      "path": "3"
    },
    "1088": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10408
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "1089": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "SWAP5",
      "path": "3"
    },
    "1090": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "DUP8",
      "path": "3"
    },
    "1091": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "AND",
      "path": "3"
    },
    "1092": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "DUP1",
      "path": "3"
    },
    "1093": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1094": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1095": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "SWAP5",
      "path": "3"
    },
    "1096": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "DUP3",
      "path": "3"
    },
    "1097": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1098": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "1099": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "DUP3",
      "path": "3"
    },
    "1100": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1101": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10417
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "1102": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10426
      ],
      "op": "DUP6",
      "path": "3"
    },
    "1103": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10426
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1104": {
      "fn": "ERC20._approve",
      "offset": [
        10390,
        10426
      ],
      "op": "SSTORE",
      "path": "3"
    },
    "1105": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "SWAP1",
      "path": "3",
      "statement": 19
    },
    "1106": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1107": {
      "op": "DUP5"
    },
    "1108": {
      "op": "DUP2"
    },
    "1109": {
      "op": "MSTORE"
    },
    "1110": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "PUSH32",
      "path": "3",
      "value": "0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925"
    },
    "1143": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "1144": {
      "op": "ADD"
    },
    "1145": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1147": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1148": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "DUP1",
      "path": "3"
    },
    "1149": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "1150": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "SUB",
      "path": "3"
    },
    "1151": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1152": {
      "fn": "ERC20._approve",
      "offset": [
        10441,
        10473
      ],
      "op": "LOG3",
      "path": "3"
    },
    "1153": {
      "fn": "ERC20._approve",
      "offset": [
        10110,
        10480
      ],
      "op": "POP",
      "path": "3"
    },
    "1154": {
      "fn": "ERC20._approve",
      "offset": [
        10110,
        10480
      ],
      "op": "POP",
      "path": "3"
    },
    "1155": {
      "fn": "ERC20._approve",
      "offset": [
        10110,
        10480
      ],
      "op": "POP",
      "path": "3"
    },
    "1156": {
      "fn": "ERC20._approve",
      "jump": "o",
      "offset": [
        10110,
        10480
      ],
      "op": "JUMP",
      "path": "3"
    },
    "1157": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10761,
        11202
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1158": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10891,
        10915
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "1160": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10918,
        10943
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x491"
    },
    "1163": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10928,
        10933
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1164": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10935,
        10942
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1165": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10918,
        10927
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x336"
    },
    "1168": {
      "fn": "ERC20._spendAllowance",
      "jump": "i",
      "offset": [
        10918,
        10943
      ],
      "op": "JUMP",
      "path": "3"
    },
    "1169": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10918,
        10943
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1170": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10891,
        10943
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1171": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10891,
        10943
      ],
      "op": "POP",
      "path": "3"
    },
    "1172": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1174": {
      "op": "NOT"
    },
    "1175": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10957,
        10973
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1176": {
      "branch": 32,
      "fn": "ERC20._spendAllowance",
      "offset": [
        10957,
        10994
      ],
      "op": "EQ",
      "path": "3"
    },
    "1177": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10953,
        11196
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x4F9"
    },
    "1180": {
      "branch": 32,
      "fn": "ERC20._spendAllowance",
      "offset": [
        10953,
        11196
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "1181": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11038,
        11044
      ],
      "op": "DUP2",
      "path": "3",
      "statement": 20
    },
    "1182": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11018,
        11034
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1183": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11018,
        11044
      ],
      "op": "LT",
      "path": "3"
    },
    "1184": {
      "branch": 33,
      "fn": "ERC20._spendAllowance",
      "offset": [
        11018,
        11044
      ],
      "op": "ISZERO",
      "path": "3"
    },
    "1185": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x4EC"
    },
    "1188": {
      "branch": 33,
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "1189": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1191": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1192": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1196": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1198": {
      "op": "SHL"
    },
    "1199": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1200": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1201": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1203": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "1205": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "DUP3",
      "path": "3"
    },
    "1206": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "ADD",
      "path": "3"
    },
    "1207": {
      "op": "MSTORE"
    },
    "1208": {
      "op": "PUSH1",
      "value": "0x1D"
    },
    "1210": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1212": {
      "op": "DUP3"
    },
    "1213": {
      "op": "ADD"
    },
    "1214": {
      "op": "MSTORE"
    },
    "1215": {
      "op": "PUSH32",
      "value": "0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000"
    },
    "1248": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1250": {
      "op": "DUP3"
    },
    "1251": {
      "op": "ADD"
    },
    "1252": {
      "op": "MSTORE"
    },
    "1253": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1255": {
      "op": "ADD"
    },
    "1256": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x312"
    },
    "1259": {
      "op": "JUMP"
    },
    "1260": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11010,
        11078
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1261": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11120,
        11171
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 21,
      "value": "0x4F9"
    },
    "1264": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11129,
        11134
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1265": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11136,
        11143
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1266": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11164,
        11170
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1267": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11145,
        11161
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1268": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11145,
        11170
      ],
      "op": "SUB",
      "path": "3"
    },
    "1269": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11120,
        11128
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x361"
    },
    "1272": {
      "fn": "ERC20._spendAllowance",
      "jump": "i",
      "offset": [
        11120,
        11171
      ],
      "op": "JUMP",
      "path": "3"
    },
    "1273": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11120,
        11171
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1274": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10761,
        11202
      ],
      "op": "POP",
      "path": "3"
    },
    "1275": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10761,
        11202
      ],
      "op": "POP",
      "path": "3"
    },
    "1276": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10761,
        11202
      ],
      "op": "POP",
      "path": "3"
    },
    "1277": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        10761,
        11202
      ],
      "op": "POP",
      "path": "3"
    },
    "1278": {
      "fn": "ERC20._spendAllowance",
      "jump": "o",
      "offset": [
        10761,
        11202
      ],
      "op": "JUMP",
      "path": "3"
    },
    "1279": {
      "fn": "ERC20._transfer",
      "offset": [
        7475,
        8126
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1280": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1282": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1284": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1286": {
      "op": "SHL"
    },
    "1287": {
      "op": "SUB"
    },
    "1288": {
      "fn": "ERC20._transfer",
      "offset": [
        7601,
        7619
      ],
      "op": "DUP4",
      "path": "3",
      "statement": 22
    },
    "1289": {
      "branch": 34,
      "fn": "ERC20._transfer",
      "offset": [
        7601,
        7619
      ],
      "op": "AND",
      "path": "3"
    },
    "1290": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x563"
    },
    "1293": {
      "branch": 34,
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "1294": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1296": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1297": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1301": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1303": {
      "op": "SHL"
    },
    "1304": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1305": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1306": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1308": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "1310": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "DUP3",
      "path": "3"
    },
    "1311": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "ADD",
      "path": "3"
    },
    "1312": {
      "op": "MSTORE"
    },
    "1313": {
      "op": "PUSH1",
      "value": "0x25"
    },
    "1315": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1317": {
      "op": "DUP3"
    },
    "1318": {
      "op": "ADD"
    },
    "1319": {
      "op": "MSTORE"
    },
    "1320": {
      "op": "PUSH32",
      "value": "0x45524332303A207472616E736665722066726F6D20746865207A65726F206164"
    },
    "1353": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1355": {
      "op": "DUP3"
    },
    "1356": {
      "op": "ADD"
    },
    "1357": {
      "op": "MSTORE"
    },
    "1358": {
      "op": "PUSH5",
      "value": "0x6472657373"
    },
    "1364": {
      "op": "PUSH1",
      "value": "0xD8"
    },
    "1366": {
      "op": "SHL"
    },
    "1367": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1369": {
      "op": "DUP3"
    },
    "1370": {
      "op": "ADD"
    },
    "1371": {
      "op": "MSTORE"
    },
    "1372": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1374": {
      "op": "ADD"
    },
    "1375": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x312"
    },
    "1378": {
      "op": "JUMP"
    },
    "1379": {
      "fn": "ERC20._transfer",
      "offset": [
        7593,
        7661
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1380": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1382": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1384": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1386": {
      "op": "SHL"
    },
    "1387": {
      "op": "SUB"
    },
    "1388": {
      "fn": "ERC20._transfer",
      "offset": [
        7679,
        7695
      ],
      "op": "DUP3",
      "path": "3",
      "statement": 23
    },
    "1389": {
      "branch": 35,
      "fn": "ERC20._transfer",
      "offset": [
        7679,
        7695
      ],
      "op": "AND",
      "path": "3"
    },
    "1390": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x5C5"
    },
    "1393": {
      "branch": 35,
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "1394": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1396": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1397": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1401": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1403": {
      "op": "SHL"
    },
    "1404": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1405": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1406": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1408": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "1410": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "DUP3",
      "path": "3"
    },
    "1411": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "ADD",
      "path": "3"
    },
    "1412": {
      "op": "MSTORE"
    },
    "1413": {
      "op": "PUSH1",
      "value": "0x23"
    },
    "1415": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1417": {
      "op": "DUP3"
    },
    "1418": {
      "op": "ADD"
    },
    "1419": {
      "op": "MSTORE"
    },
    "1420": {
      "op": "PUSH32",
      "value": "0x45524332303A207472616E7366657220746F20746865207A65726F2061646472"
    },
    "1453": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1455": {
      "op": "DUP3"
    },
    "1456": {
      "op": "ADD"
    },
    "1457": {
      "op": "MSTORE"
    },
    "1458": {
      "op": "PUSH3",
      "value": "0x657373"
    },
    "1462": {
      "op": "PUSH1",
      "value": "0xE8"
    },
    "1464": {
      "op": "SHL"
    },
    "1465": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1467": {
      "op": "DUP3"
    },
    "1468": {
      "op": "ADD"
    },
    "1469": {
      "op": "MSTORE"
    },
    "1470": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1472": {
      "op": "ADD"
    },
    "1473": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x312"
    },
    "1476": {
      "op": "JUMP"
    },
    "1477": {
      "fn": "ERC20._transfer",
      "offset": [
        7671,
        7735
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1478": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1480": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1482": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1484": {
      "op": "SHL"
    },
    "1485": {
      "op": "SUB"
    },
    "1486": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "DUP4",
      "path": "3"
    },
    "1487": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "AND",
      "path": "3"
    },
    "1488": {
      "fn": "ERC20._transfer",
      "offset": [
        7795,
        7814
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "1490": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1491": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1492": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1493": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "1495": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1496": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1497": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1498": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1500": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1501": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "1502": {
      "fn": "ERC20._transfer",
      "offset": [
        7817,
        7832
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "1503": {
      "fn": "ERC20._transfer",
      "offset": [
        7850,
        7871
      ],
      "op": "DUP2",
      "path": "3",
      "statement": 24
    },
    "1504": {
      "fn": "ERC20._transfer",
      "offset": [
        7850,
        7871
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1505": {
      "fn": "ERC20._transfer",
      "offset": [
        7850,
        7871
      ],
      "op": "LT",
      "path": "3"
    },
    "1506": {
      "branch": 36,
      "fn": "ERC20._transfer",
      "offset": [
        7850,
        7871
      ],
      "op": "ISZERO",
      "path": "3"
    },
    "1507": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x63D"
    },
    "1510": {
      "branch": 36,
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "JUMPI",
      "path": "3"
    },
    "1511": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1513": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1514": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1518": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1520": {
      "op": "SHL"
    },
    "1521": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1522": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1523": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1525": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x4"
    },
    "1527": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "DUP3",
      "path": "3"
    },
    "1528": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "ADD",
      "path": "3"
    },
    "1529": {
      "op": "MSTORE"
    },
    "1530": {
      "op": "PUSH1",
      "value": "0x26"
    },
    "1532": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1534": {
      "op": "DUP3"
    },
    "1535": {
      "op": "ADD"
    },
    "1536": {
      "op": "MSTORE"
    },
    "1537": {
      "op": "PUSH32",
      "value": "0x45524332303A207472616E7366657220616D6F756E7420657863656564732062"
    },
    "1570": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1572": {
      "op": "DUP3"
    },
    "1573": {
      "op": "ADD"
    },
    "1574": {
      "op": "MSTORE"
    },
    "1575": {
      "op": "PUSH6",
      "value": "0x616C616E6365"
    },
    "1582": {
      "op": "PUSH1",
      "value": "0xD0"
    },
    "1584": {
      "op": "SHL"
    },
    "1585": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1587": {
      "op": "DUP3"
    },
    "1588": {
      "op": "ADD"
    },
    "1589": {
      "op": "MSTORE"
    },
    "1590": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1592": {
      "op": "ADD"
    },
    "1593": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x312"
    },
    "1596": {
      "op": "JUMP"
    },
    "1597": {
      "fn": "ERC20._transfer",
      "offset": [
        7842,
        7914
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1598": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1600": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1602": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1604": {
      "op": "SHL"
    },
    "1605": {
      "op": "SUB"
    },
    "1606": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "DUP1",
      "path": "3",
      "statement": 25
    },
    "1607": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "DUP6",
      "path": "3"
    },
    "1608": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "AND",
      "path": "3"
    },
    "1609": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7957
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x0"
    },
    "1611": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1612": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1613": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1614": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x20"
    },
    "1616": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1617": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1618": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1619": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1621": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "DUP1",
      "path": "3"
    },
    "1622": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "DUP3",
      "path": "3"
    },
    "1623": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7963
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "1624": {
      "fn": "ERC20._transfer",
      "offset": [
        7966,
        7986
      ],
      "op": "DUP6",
      "path": "3"
    },
    "1625": {
      "fn": "ERC20._transfer",
      "offset": [
        7966,
        7986
      ],
      "op": "DUP6",
      "path": "3"
    },
    "1626": {
      "fn": "ERC20._transfer",
      "offset": [
        7966,
        7986
      ],
      "op": "SUB",
      "path": "3"
    },
    "1627": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7986
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1628": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7986
      ],
      "op": "SSTORE",
      "path": "3"
    },
    "1629": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "SWAP2",
      "path": "3",
      "statement": 26
    },
    "1630": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "DUP6",
      "path": "3"
    },
    "1631": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "AND",
      "path": "3"
    },
    "1632": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1633": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "MSTORE",
      "path": "3"
    },
    "1634": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1635": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1636": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8019
      ],
      "op": "KECCAK256",
      "path": "3"
    },
    "1637": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "DUP1",
      "path": "3"
    },
    "1638": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "SLOAD",
      "path": "3"
    },
    "1639": {
      "fn": "ERC20._transfer",
      "offset": [
        7980,
        7986
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1640": {
      "fn": "ERC20._transfer",
      "offset": [
        7980,
        7986
      ],
      "op": "SWAP3",
      "path": "3"
    },
    "1641": {
      "fn": "ERC20._transfer",
      "offset": [
        7948,
        7957
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1642": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x674"
    },
    "1645": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1646": {
      "fn": "ERC20._transfer",
      "offset": [
        7980,
        7986
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1647": {
      "fn": "ERC20._transfer",
      "offset": [
        7980,
        7986
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1648": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x7EE"
    },
    "1651": {
      "fn": "ERC20._transfer",
      "jump": "i",
      "offset": [
        8006,
        8029
      ],
      "op": "JUMP",
      "path": "3"
    },
    "1652": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1653": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "SWAP3",
      "path": "3"
    },
    "1654": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "POP",
      "path": "3"
    },
    "1655": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "POP",
      "path": "3"
    },
    "1656": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "DUP2",
      "path": "3"
    },
    "1657": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1658": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "SSTORE",
      "path": "3"
    },
    "1659": {
      "fn": "ERC20._transfer",
      "offset": [
        8006,
        8029
      ],
      "op": "POP",
      "path": "3"
    },
    "1660": {
      "fn": "ERC20._transfer",
      "offset": [
        8060,
        8062
      ],
      "op": "DUP3",
      "path": "3",
      "statement": 27
    },
    "1661": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1663": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1665": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1667": {
      "op": "SHL"
    },
    "1668": {
      "op": "SUB"
    },
    "1669": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "AND",
      "path": "3"
    },
    "1670": {
      "fn": "ERC20._transfer",
      "offset": [
        8054,
        8058
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1671": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1673": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1675": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1677": {
      "op": "SHL"
    },
    "1678": {
      "op": "SUB"
    },
    "1679": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "AND",
      "path": "3"
    },
    "1680": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "PUSH32",
      "path": "3",
      "value": "0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF"
    },
    "1713": {
      "fn": "ERC20._transfer",
      "offset": [
        8064,
        8070
      ],
      "op": "DUP5",
      "path": "3"
    },
    "1714": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1716": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1717": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "PUSH2",
      "path": "3",
      "value": "0x6C0"
    },
    "1720": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "1721": {
      "op": "DUP2"
    },
    "1722": {
      "op": "MSTORE"
    },
    "1723": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1725": {
      "op": "ADD"
    },
    "1726": {
      "op": "SWAP1"
    },
    "1727": {
      "op": "JUMP"
    },
    "1728": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "JUMPDEST",
      "path": "3"
    },
    "1729": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "PUSH1",
      "path": "3",
      "value": "0x40"
    },
    "1731": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "MLOAD",
      "path": "3"
    },
    "1732": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "DUP1",
      "path": "3"
    },
    "1733": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "SWAP2",
      "path": "3"
    },
    "1734": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "SUB",
      "path": "3"
    },
    "1735": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "SWAP1",
      "path": "3"
    },
    "1736": {
      "fn": "ERC20._transfer",
      "offset": [
        8045,
        8071
      ],
      "op": "LOG3",
      "path": "3"
    },
    "1737": {
      "fn": "ERC20._transfer",
      "offset": [
        8082,
        8119
      ],
      "op": "PUSH2",
      "path": "3",
      "statement": 28,
      "value": "0x4F9"
    },
    "1740": {
      "fn": "ERC20._beforeTokenTransfer",
      "offset": [
        11786,
        11907
      ],
      "op": "JUMP",
      "path": "3"
    },
    "1741": {
      "op": "JUMPDEST"
    },
    "1742": {
      "op": "DUP1"
    },
    "1743": {
      "op": "CALLDATALOAD"
    },
    "1744": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1746": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1748": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1750": {
      "op": "SHL"
    },
    "1751": {
      "op": "SUB"
    },
    "1752": {
      "op": "DUP2"
    },
    "1753": {
      "op": "AND"
    },
    "1754": {
      "op": "DUP2"
    },
    "1755": {
      "op": "EQ"
    },
    "1756": {
      "op": "PUSH2",
      "value": "0x294"
    },
    "1759": {
      "op": "JUMPI"
    },
    "1760": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1762": {
      "op": "DUP1"
    },
    "1763": {
      "op": "REVERT"
    },
    "1764": {
      "op": "JUMPDEST"
    },
    "1765": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1767": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1769": {
      "op": "DUP3"
    },
    "1770": {
      "op": "DUP5"
    },
    "1771": {
      "op": "SUB"
    },
    "1772": {
      "op": "SLT"
    },
    "1773": {
      "op": "ISZERO"
    },
    "1774": {
      "op": "PUSH2",
      "value": "0x6F5"
    },
    "1777": {
      "op": "JUMPI"
    },
    "1778": {
      "op": "DUP1"
    },
    "1779": {
      "op": "DUP2"
    },
    "1780": {
      "op": "REVERT"
    },
    "1781": {
      "op": "JUMPDEST"
    },
    "1782": {
      "op": "PUSH2",
      "value": "0x6FE"
    },
    "1785": {
      "op": "DUP3"
    },
    "1786": {
      "op": "PUSH2",
      "value": "0x6CD"
    },
    "1789": {
      "jump": "i",
      "op": "JUMP"
    },
    "1790": {
      "op": "JUMPDEST"
    },
    "1791": {
      "op": "SWAP4"
    },
    "1792": {
      "op": "SWAP3"
    },
    "1793": {
      "op": "POP"
    },
    "1794": {
      "op": "POP"
    },
    "1795": {
      "op": "POP"
    },
    "1796": {
      "jump": "o",
      "op": "JUMP"
    },
    "1797": {
      "op": "JUMPDEST"
    },
    "1798": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1800": {
      "op": "DUP1"
    },
    "1801": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1803": {
      "op": "DUP4"
    },
    "1804": {
      "op": "DUP6"
    },
    "1805": {
      "op": "SUB"
    },
    "1806": {
      "op": "SLT"
    },
    "1807": {
      "op": "ISZERO"
    },
    "1808": {
      "op": "PUSH2",
      "value": "0x717"
    },
    "1811": {
      "op": "JUMPI"
    },
    "1812": {
      "op": "DUP1"
    },
    "1813": {
      "op": "DUP2"
    },
    "1814": {
      "op": "REVERT"
    },
    "1815": {
      "op": "JUMPDEST"
    },
    "1816": {
      "op": "PUSH2",
      "value": "0x720"
    },
    "1819": {
      "op": "DUP4"
    },
    "1820": {
      "op": "PUSH2",
      "value": "0x6CD"
    },
    "1823": {
      "jump": "i",
      "op": "JUMP"
    },
    "1824": {
      "op": "JUMPDEST"
    },
    "1825": {
      "op": "SWAP2"
    },
    "1826": {
      "op": "POP"
    },
    "1827": {
      "op": "PUSH2",
      "value": "0x72E"
    },
    "1830": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1832": {
      "op": "DUP5"
    },
    "1833": {
      "op": "ADD"
    },
    "1834": {
      "op": "PUSH2",
      "value": "0x6CD"
    },
    "1837": {
      "jump": "i",
      "op": "JUMP"
    },
    "1838": {
      "op": "JUMPDEST"
    },
    "1839": {
      "op": "SWAP1"
    },
    "1840": {
      "op": "POP"
    },
    "1841": {
      "op": "SWAP3"
    },
    "1842": {
      "op": "POP"
    },
    "1843": {
      "op": "SWAP3"
    },
    "1844": {
      "op": "SWAP1"
    },
    "1845": {
      "op": "POP"
    },
    "1846": {
      "jump": "o",
      "op": "JUMP"
    },
    "1847": {
      "op": "JUMPDEST"
    },
    "1848": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1850": {
      "op": "DUP1"
    },
    "1851": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1853": {
      "op": "PUSH1",
      "value": "0x60"
    },
    "1855": {
      "op": "DUP5"
    },
    "1856": {
      "op": "DUP7"
    },
    "1857": {
      "op": "SUB"
    },
    "1858": {
      "op": "SLT"
    },
    "1859": {
      "op": "ISZERO"
    },
    "1860": {
      "op": "PUSH2",
      "value": "0x74B"
    },
    "1863": {
      "op": "JUMPI"
    },
    "1864": {
      "op": "DUP1"
    },
    "1865": {
      "op": "DUP2"
    },
    "1866": {
      "op": "REVERT"
    },
    "1867": {
      "op": "JUMPDEST"
    },
    "1868": {
      "op": "PUSH2",
      "value": "0x754"
    },
    "1871": {
      "op": "DUP5"
    },
    "1872": {
      "op": "PUSH2",
      "value": "0x6CD"
    },
    "1875": {
      "jump": "i",
      "op": "JUMP"
    },
    "1876": {
      "op": "JUMPDEST"
    },
    "1877": {
      "op": "SWAP3"
    },
    "1878": {
      "op": "POP"
    },
    "1879": {
      "op": "PUSH2",
      "value": "0x762"
    },
    "1882": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1884": {
      "op": "DUP6"
    },
    "1885": {
      "op": "ADD"
    },
    "1886": {
      "op": "PUSH2",
      "value": "0x6CD"
    },
    "1889": {
      "jump": "i",
      "op": "JUMP"
    },
    "1890": {
      "op": "JUMPDEST"
    },
    "1891": {
      "op": "SWAP2"
    },
    "1892": {
      "op": "POP"
    },
    "1893": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1895": {
      "op": "DUP5"
    },
    "1896": {
      "op": "ADD"
    },
    "1897": {
      "op": "CALLDATALOAD"
    },
    "1898": {
      "op": "SWAP1"
    },
    "1899": {
      "op": "POP"
    },
    "1900": {
      "op": "SWAP3"
    },
    "1901": {
      "op": "POP"
    },
    "1902": {
      "op": "SWAP3"
    },
    "1903": {
      "op": "POP"
    },
    "1904": {
      "op": "SWAP3"
    },
    "1905": {
      "jump": "o",
      "op": "JUMP"
    },
    "1906": {
      "op": "JUMPDEST"
    },
    "1907": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1909": {
      "op": "DUP1"
    },
    "1910": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1912": {
      "op": "DUP4"
    },
    "1913": {
      "op": "DUP6"
    },
    "1914": {
      "op": "SUB"
    },
    "1915": {
      "op": "SLT"
    },
    "1916": {
      "op": "ISZERO"
    },
    "1917": {
      "op": "PUSH2",
      "value": "0x784"
    },
    "1920": {
      "op": "JUMPI"
    },
    "1921": {
      "op": "DUP2"
    },
    "1922": {
      "op": "DUP3"
    },
    "1923": {
      "op": "REVERT"
    },
    "1924": {
      "op": "JUMPDEST"
    },
    "1925": {
      "op": "PUSH2",
      "value": "0x78D"
    },
    "1928": {
      "op": "DUP4"
    },
    "1929": {
      "op": "PUSH2",
      "value": "0x6CD"
    },
    "1932": {
      "jump": "i",
      "op": "JUMP"
    },
    "1933": {
      "op": "JUMPDEST"
    },
    "1934": {
      "op": "SWAP5"
    },
    "1935": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1937": {
      "op": "SWAP4"
    },
    "1938": {
      "op": "SWAP1"
    },
    "1939": {
      "op": "SWAP4"
    },
    "1940": {
      "op": "ADD"
    },
    "1941": {
      "op": "CALLDATALOAD"
    },
    "1942": {
      "op": "SWAP4"
    },
    "1943": {
      "op": "POP"
    },
    "1944": {
      "op": "POP"
    },
    "1945": {
      "op": "POP"
    },
    "1946": {
      "jump": "o",
      "op": "JUMP"
    },
    "1947": {
      "op": "JUMPDEST"
    },
    "1948": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1950": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1952": {
      "op": "DUP1"
    },
    "1953": {
      "op": "DUP4"
    },
    "1954": {
      "op": "MSTORE"
    },
    "1955": {
      "op": "DUP4"
    },
    "1956": {
      "op": "MLOAD"
    },
    "1957": {
      "op": "DUP1"
    },
    "1958": {
      "op": "DUP3"
    },
    "1959": {
      "op": "DUP6"
    },
    "1960": {
      "op": "ADD"
    },
    "1961": {
      "op": "MSTORE"
    },
    "1962": {
      "op": "DUP3"
    },
    "1963": {
      "op": "JUMPDEST"
    },
    "1964": {
      "op": "DUP2"
    },
    "1965": {
      "op": "DUP2"
    },
    "1966": {
      "op": "LT"
    },
    "1967": {
      "op": "ISZERO"
    },
    "1968": {
      "op": "PUSH2",
      "value": "0x7C7"
    },
    "1971": {
      "op": "JUMPI"
    },
    "1972": {
      "op": "DUP6"
    },
    "1973": {
      "op": "DUP2"
    },
    "1974": {
      "op": "ADD"
    },
    "1975": {
      "op": "DUP4"
    },
    "1976": {
      "op": "ADD"
    },
    "1977": {
      "op": "MLOAD"
    },
    "1978": {
      "op": "DUP6"
    },
    "1979": {
      "op": "DUP3"
    },
    "1980": {
      "op": "ADD"
    },
    "1981": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1983": {
      "op": "ADD"
    },
    "1984": {
      "op": "MSTORE"
    },
    "1985": {
      "op": "DUP3"
    },
    "1986": {
      "op": "ADD"
    },
    "1987": {
      "op": "PUSH2",
      "value": "0x7AB"
    },
    "1990": {
      "op": "JUMP"
    },
    "1991": {
      "op": "JUMPDEST"
    },
    "1992": {
      "op": "DUP2"
    },
    "1993": {
      "op": "DUP2"
    },
    "1994": {
      "op": "GT"
    },
    "1995": {
      "op": "ISZERO"
    },
    "1996": {
      "op": "PUSH2",
      "value": "0x7D8"
    },
    "1999": {
      "op": "JUMPI"
    },
    "2000": {
      "op": "DUP4"
    },
    "2001": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "2003": {
      "op": "DUP4"
    },
    "2004": {
      "op": "DUP8"
    },
    "2005": {
      "op": "ADD"
    },
    "2006": {
      "op": "ADD"
    },
    "2007": {
      "op": "MSTORE"
    },
    "2008": {
      "op": "JUMPDEST"
    },
    "2009": {
      "op": "POP"
    },
    "2010": {
      "op": "PUSH1",
      "value": "0x1F"
    },
    "2012": {
      "op": "ADD"
    },
    "2013": {
      "op": "PUSH1",
      "value": "0x1F"
    },
    "2015": {
      "op": "NOT"
    },
    "2016": {
      "op": "AND"
    },
    "2017": {
      "op": "SWAP3"
    },
    "2018": {
      "op": "SWAP1"
    },
    "2019": {
      "op": "SWAP3"
    },
    "2020": {
      "op": "ADD"
    },
    "2021": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "2023": {
      "op": "ADD"
    },
    "2024": {
      "op": "SWAP4"
    },
    "2025": {
      "op": "SWAP3"
    },
    "2026": {
      "op": "POP"
    },
    "2027": {
      "op": "POP"
    },
    "2028": {
      "op": "POP"
    },
    "2029": {
      "jump": "o",
      "op": "JUMP"
    },
    "2030": {
      "op": "JUMPDEST"
    },
    "2031": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "2033": {
      "op": "DUP3"
    },
    "2034": {
      "op": "NOT"
    },
    "2035": {
      "op": "DUP3"
    },
    "2036": {
      "op": "GT"
    },
    "2037": {
      "op": "ISZERO"
    },
    "2038": {
      "op": "PUSH2",
      "value": "0x80D"
    },
    "2041": {
      "op": "JUMPI"
    },
    "2042": {
      "op": "PUSH4",
      "value": "0x4E487B71"
    },
    "2047": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "2049": {
      "op": "SHL"
    },
    "2050": {
      "op": "DUP2"
    },
    "2051": {
      "op": "MSTORE"
    },
    "2052": {
      "op": "PUSH1",
      "value": "0x11"
    },
    "2054": {
      "op": "PUSH1",
      "value": "0x4"
    },
    "2056": {
      "op": "MSTORE"
    },
    "2057": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "2059": {
      "op": "DUP2"
    },
    "2060": {
      "op": "REVERT"
    },
    "2061": {
      "op": "JUMPDEST"
    },
    "2062": {
      "op": "POP"
    },
    "2063": {
      "op": "ADD"
    },
    "2064": {
      "op": "SWAP1"
    },
    "2065": {
      "jump": "o",
      "op": "JUMP"
    },
    "2066": {
      "op": "JUMPDEST"
    },
    "2067": {
      "op": "PUSH1",
      "value": "0x2"
    },
    "2069": {
      "op": "DUP2"
    },
    "2070": {
      "op": "DIV"
    },
    "2071": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "2073": {
      "op": "DUP3"
    },
    "2074": {
      "op": "AND"
    },
    "2075": {
      "op": "DUP1"
    },
    "2076": {
      "op": "PUSH2",
      "value": "0x826"
    },
    "2079": {
      "op": "JUMPI"
    },
    "2080": {
      "op": "PUSH1",
      "value": "0x7F"
    },
    "2082": {
      "op": "DUP3"
    },
    "2083": {
      "op": "AND"
    },
    "2084": {
      "op": "SWAP2"
    },
    "2085": {
      "op": "POP"
    },
    "2086": {
      "op": "JUMPDEST"
    },
    "2087": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "2089": {
      "op": "DUP3"
    },
    "2090": {
      "op": "LT"
    },
    "2091": {
      "op": "DUP2"
    },
    "2092": {
      "op": "EQ"
    },
    "2093": {
      "op": "ISZERO"
    },
    "2094": {
      "op": "PUSH2",
      "value": "0x847"
    },
    "2097": {
      "op": "JUMPI"
    },
    "2098": {
      "op": "PUSH4",
      "value": "0x4E487B71"
    },
    "2103": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "2105": {
      "op": "SHL"
    },
    "2106": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "2108": {
      "op": "MSTORE"
    },
    "2109": {
      "op": "PUSH1",
      "value": "0x22"
    },
    "2111": {
      "op": "PUSH1",
      "value": "0x4"
    },
    "2113": {
      "op": "MSTORE"
    },
    "2114": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "2116": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "2118": {
      "op": "REVERT"
    },
    "2119": {
      "op": "JUMPDEST"
    },
    "2120": {
      "op": "POP"
    },
    "2121": {
      "op": "SWAP2"
    },
    "2122": {
      "op": "SWAP1"
    },
    "2123": {
      "op": "POP"
    },
    "2124": {
      "jump": "o",
      "op": "JUMP"
    }
  },
  "sha1": "a1d74f68b995fd6b21d18f71c76fb72a1bc8be2b",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20.sol\";\nimport \"./extensions/IERC20Metadata.sol\";\nimport \"../../utils/Context.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * The default value of {decimals} is 18. To select a different value for\n     * {decimals} you should overload it.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\n     * overridden;\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, amount);\n        _transfer(from, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        uint256 currentAllowance = allowance(owner, spender);\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(owner, spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, amount);\n\n        uint256 fromBalance = _balances[from];\n        require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n        unchecked {\n            _balances[from] = fromBalance - amount;\n        }\n        _balances[to] += amount;\n\n        emit Transfer(from, to, amount);\n\n        _afterTokenTransfer(from, to, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        _balances[account] += amount;\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n        }\n        _totalSupply -= amount;\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n     *\n     * Does not update the allowance amount in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Might emit an {Approval} event.\n     */\n    function _spendAllowance(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n            unchecked {\n                _approve(owner, spender, currentAllowance - amount);\n            }\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * has been transferred to `to`.\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n}\n",
  "sourceMap": "1403:11214:3:-:0;;;1978:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2044:13;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;2067:17:3;;;;:7;;:17;;;;;:::i;:::-;;1978:113;;1403:11214;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1403:11214:3;;;-1:-1:-1;1403:11214:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:909:67;;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;170:13;;-1:-1:-1;;;;;232:10:67;;;229:2;;;245:18;;:::i;:::-;320:2;314:9;288:2;374:13;;-1:-1:-1;;370:22:67;;;394:2;366:31;362:40;350:53;;;418:18;;;438:22;;;415:46;412:2;;;464:18;;:::i;:::-;504:10;500:2;493:22;539:2;531:6;524:18;561:4;551:14;;606:3;601:2;596;588:6;584:15;580:24;577:33;574:2;;;627:5;620;613:20;574:2;653:5;644:14;;667:133;681:2;678:1;675:9;667:133;;;769:14;;;765:23;;759:30;738:14;;;734:23;;727:63;692:10;;;;667:133;;;818:2;815:1;812:9;809:2;;;877:5;872:2;867;859:6;855:15;851:24;844:39;809:2;911:6;78:845;-1:-1:-1;;;;;;78:845:67:o;928:592::-;;;1088:2;1076:9;1067:7;1063:23;1059:32;1056:2;;;1109:6;1101;1094:22;1056:2;1141:16;;-1:-1:-1;;;;;1206:14:67;;;1203:2;;;1238:6;1230;1223:22;1203:2;1266:61;1319:7;1310:6;1299:9;1295:22;1266:61;:::i;:::-;1256:71;;1373:2;1362:9;1358:18;1352:25;1336:41;;1402:2;1392:8;1389:16;1386:2;;;1423:6;1415;1408:22;1386:2;;1451:63;1506:7;1495:8;1484:9;1480:24;1451:63;:::i;:::-;1441:73;;;1046:474;;;;;:::o;1525:380::-;1610:1;1600:12;;1657:1;1647:12;;;1668:2;;1722:4;1714:6;1710:17;1700:27;;1668:2;1775;1767:6;1764:14;1744:18;1741:38;1738:2;;;1821:10;1816:3;1812:20;1809:1;1802:31;1856:4;1853:1;1846:15;1884:4;1881:1;1874:15;1738:2;;1580:325;;;:::o;1910:127::-;1971:10;1966:3;1962:20;1959:1;1952:31;2002:4;1999:1;1992:15;2026:4;2023:1;2016:15;1942:95;1403:11214:3;;;;;;",
  "sourcePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/ERC20.sol",
  "type": "contract"
}