{
  "contractName": "Faucet",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amountEachTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "amountEachTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "recivedRecord",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "tokenContract",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amountEachTime",
          "type": "uint256"
        }
      ],
      "name": "setAmountEachTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountEachTime\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"amountEachTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"recivedRecord\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountEachTime\",\"type\":\"uint256\"}],\"name\":\"setAmountEachTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenContract\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/Faucet.sol\":{\"keccak256\":\"0xa4d2e0673ed7342d11cd539de2d19a4464bb207ac6b7f21d91217553d3e02446\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e3ac87e2d0572cdbc5709cf26b85f8ac6c31a7e1bdbc78368e6fbaffcbff9e1\",\"dweb:/ipfs/QmdAHJFVffbLgyzmikBgghvE26JVXP3si2okTWgSvMMN5E\"]},\"project:/contracts/IERC20.sol\":{\"keccak256\":\"0xb6bb17d43c382a73519566ebff93b98e7ca9e2350260a2654487436a9d0ad085\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b73b2a5d2f2660ea9be4040e466ea41a10ba50748b568bbee6740d07686ef92\",\"dweb:/ipfs/QmXyQgnM6zn3KGCKfhLSBLaqYrFnBoHDGrDXTsCkdfJngc\"]}},\"version\":1}",
  "bytecode": "[encoded data, 5796 characters]",
  "deployedBytecode": "[encoded data, 4946 characters]",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:1715:2",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "47:35:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "57:19:2",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "73:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "67:5:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "67:9:2"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "57:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "allocate_unbounded",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "40:6:2",
                "type": ""
              }
            ],
            "src": "7:75:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "177:28:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "194:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "197:1:2",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "187:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "187:12:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "187:12:2"
                }
              ]
            },
            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
            "nodeType": "YulFunctionDefinition",
            "src": "88:117:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "300:28:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "317:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "320:1:2",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "310:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "310:12:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "310:12:2"
                }
              ]
            },
            "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
            "nodeType": "YulFunctionDefinition",
            "src": "211:117:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "379:81:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "389:65:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "404:5:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "411:42:2",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "400:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "400:54:2"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "389:7:2"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "361:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "371:7:2",
                "type": ""
              }
            ],
            "src": "334:126:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "511:51:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "521:35:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "550:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "532:17:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "532:24:2"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "521:7:2"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "493:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "503:7:2",
                "type": ""
              }
            ],
            "src": "466:96:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "611:79:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "668:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "677:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "680:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "670:6:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "670:12:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "670:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "634:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "659:5:2"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_address",
                              "nodeType": "YulIdentifier",
                              "src": "641:17:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "641:24:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "631:2:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "631:35:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "624:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "624:43:2"
                  },
                  "nodeType": "YulIf",
                  "src": "621:63:2"
                }
              ]
            },
            "name": "validator_revert_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "604:5:2",
                "type": ""
              }
            ],
            "src": "568:122:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "759:80:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "769:22:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "784:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "778:5:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "778:13:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "769:5:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "827:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "800:26:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "800:33:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "800:33:2"
                }
              ]
            },
            "name": "abi_decode_t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "737:6:2",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "745:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "753:5:2",
                "type": ""
              }
            ],
            "src": "696:143:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "890:32:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "900:16:2",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "911:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "900:7:2"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "872:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "882:7:2",
                "type": ""
              }
            ],
            "src": "845:77:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "971:79:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1028:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1037:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1040:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1030:6:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1030:12:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1030:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "994:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1019:5:2"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "1001:17:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1001:24:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "991:2:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "991:35:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "984:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "984:43:2"
                  },
                  "nodeType": "YulIf",
                  "src": "981:63:2"
                }
              ]
            },
            "name": "validator_revert_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "964:5:2",
                "type": ""
              }
            ],
            "src": "928:122:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1119:80:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1129:22:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1144:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1138:5:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1138:13:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1129:5:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1187:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "1160:26:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1160:33:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1160:33:2"
                }
              ]
            },
            "name": "abi_decode_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1097:6:2",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1105:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1113:5:2",
                "type": ""
              }
            ],
            "src": "1056:143:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1299:413:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1345:83:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "1347:77:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1347:79:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1347:79:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1320:7:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1329:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1316:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1316:23:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1341:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1312:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1312:32:2"
                  },
                  "nodeType": "YulIf",
                  "src": "1309:119:2"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "1438:128:2",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1453:15:2",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1467:1:2",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "1457:6:2",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1482:74:2",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1528:9:2"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1539:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1524:3:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1524:22:2"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1548:7:2"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "1492:31:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1492:64:2"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1482:6:2"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "1576:129:2",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1591:16:2",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1605:2:2",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "1595:6:2",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1621:74:2",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1667:9:2"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1678:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1663:3:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1663:22:2"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1687:7:2"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "1631:31:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1631:64:2"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "1621:6:2"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1261:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1272:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1284:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1292:6:2",
                "type": ""
              }
            ],
            "src": "1205:507:2"
          }
        ]
      },
      "contents": "{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n}\n",
      "id": 2,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:8681:2",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "47:35:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "57:19:2",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "73:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "67:5:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "67:9:2"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "57:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "allocate_unbounded",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "40:6:2",
                "type": ""
              }
            ],
            "src": "7:75:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "177:28:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "194:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "197:1:2",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "187:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "187:12:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "187:12:2"
                }
              ]
            },
            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
            "nodeType": "YulFunctionDefinition",
            "src": "88:117:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "300:28:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "317:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "320:1:2",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "310:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "310:12:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "310:12:2"
                }
              ]
            },
            "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
            "nodeType": "YulFunctionDefinition",
            "src": "211:117:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "379:81:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "389:65:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "404:5:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "411:42:2",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "400:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "400:54:2"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "389:7:2"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "361:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "371:7:2",
                "type": ""
              }
            ],
            "src": "334:126:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "511:51:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "521:35:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "550:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "532:17:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "532:24:2"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "521:7:2"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "493:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "503:7:2",
                "type": ""
              }
            ],
            "src": "466:96:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "611:79:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "668:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "677:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "680:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "670:6:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "670:12:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "670:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "634:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "659:5:2"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_address",
                              "nodeType": "YulIdentifier",
                              "src": "641:17:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "641:24:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "631:2:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "631:35:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "624:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "624:43:2"
                  },
                  "nodeType": "YulIf",
                  "src": "621:63:2"
                }
              ]
            },
            "name": "validator_revert_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "604:5:2",
                "type": ""
              }
            ],
            "src": "568:122:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "748:87:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "758:29:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "780:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "767:12:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "767:20:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "758:5:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "823:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "796:26:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "796:33:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "796:33:2"
                }
              ]
            },
            "name": "abi_decode_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "726:6:2",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "734:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "742:5:2",
                "type": ""
              }
            ],
            "src": "696:139:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "907:263:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "953:83:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "955:77:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "955:79:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "955:79:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "928:7:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "937:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "924:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "924:23:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "949:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "920:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "920:32:2"
                  },
                  "nodeType": "YulIf",
                  "src": "917:119:2"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "1046:117:2",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1061:15:2",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1075:1:2",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "1065:6:2",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1090:63:2",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1125:9:2"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1136:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1121:3:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1121:22:2"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1145:7:2"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "1100:20:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1100:53:2"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1090:6:2"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "877:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "888:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "900:6:2",
                "type": ""
              }
            ],
            "src": "841:329:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1221:32:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1231:16:2",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1242:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "1231:7:2"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1203:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "1213:7:2",
                "type": ""
              }
            ],
            "src": "1176:77:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1324:53:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1341:3:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1364:5:2"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "1346:17:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1346:24:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1334:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1334:37:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1334:37:2"
                }
              ]
            },
            "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1312:5:2",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1319:3:2",
                "type": ""
              }
            ],
            "src": "1259:118:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1481:124:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1491:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1503:9:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1514:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1499:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1499:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1491:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1571:6:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1584:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1595:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1580:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1580:17:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "1527:43:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1527:71:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1527:71:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1453:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1465:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1476:4:2",
                "type": ""
              }
            ],
            "src": "1383:222:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1643:28:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1653:12:2",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1660:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "1653:3:2"
                    }
                  ]
                }
              ]
            },
            "name": "identity",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1629:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "1639:3:2",
                "type": ""
              }
            ],
            "src": "1611:60:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1737:82:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1747:66:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1805:5:2"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint160",
                              "nodeType": "YulIdentifier",
                              "src": "1787:17:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1787:24:2"
                          }
                        ],
                        "functionName": {
                          "name": "identity",
                          "nodeType": "YulIdentifier",
                          "src": "1778:8:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1778:34:2"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "1760:17:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1760:53:2"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "1747:9:2"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_uint160_to_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1717:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "1727:9:2",
                "type": ""
              }
            ],
            "src": "1677:142:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1885:66:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1895:50:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1939:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "convert_t_uint160_to_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "1908:30:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1908:37:2"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "1895:9:2"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_uint160_to_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1865:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "1875:9:2",
                "type": ""
              }
            ],
            "src": "1825:126:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2031:66:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2041:50:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2085:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "convert_t_uint160_to_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "2054:30:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2054:37:2"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "2041:9:2"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_contract$_IERC20_$193_to_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2011:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "2021:9:2",
                "type": ""
              }
            ],
            "src": "1957:140:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2182:80:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2199:3:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2249:5:2"
                          }
                        ],
                        "functionName": {
                          "name": "convert_t_contract$_IERC20_$193_to_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "2204:44:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2204:51:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2192:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2192:64:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2192:64:2"
                }
              ]
            },
            "name": "abi_encode_t_contract$_IERC20_$193_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2170:5:2",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "2177:3:2",
                "type": ""
              }
            ],
            "src": "2103:159:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2380:138:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2390:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2402:9:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2413:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2398:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2398:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2390:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2484:6:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2497:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2508:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2493:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2493:17:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_contract$_IERC20_$193_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "2426:57:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2426:85:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2426:85:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_IERC20_$193__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2352:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2364:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2375:4:2",
                "type": ""
              }
            ],
            "src": "2268:250:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2567:79:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2624:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2633:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2636:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2626:6:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2626:12:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2626:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2590:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2615:5:2"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "2597:17:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2597:24:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "2587:2:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2587:35:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2580:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2580:43:2"
                  },
                  "nodeType": "YulIf",
                  "src": "2577:63:2"
                }
              ]
            },
            "name": "validator_revert_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2560:5:2",
                "type": ""
              }
            ],
            "src": "2524:122:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2704:87:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2714:29:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2736:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2723:12:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2723:20:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2714:5:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2779:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "2752:26:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2752:33:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2752:33:2"
                }
              ]
            },
            "name": "abi_decode_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2682:6:2",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2690:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2698:5:2",
                "type": ""
              }
            ],
            "src": "2652:139:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2863:263:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2909:83:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "2911:77:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2911:79:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2911:79:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2884:7:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2893:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2880:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2880:23:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2905:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2876:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2876:32:2"
                  },
                  "nodeType": "YulIf",
                  "src": "2873:119:2"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3002:117:2",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3017:15:2",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3031:1:2",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3021:6:2",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3046:63:2",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3081:9:2"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3092:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3077:3:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3077:22:2"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3101:7:2"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "3056:20:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3056:53:2"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3046:6:2"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2833:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2844:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2856:6:2",
                "type": ""
              }
            ],
            "src": "2797:329:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3197:53:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3214:3:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3237:5:2"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "3219:17:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3219:24:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3207:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3207:37:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3207:37:2"
                }
              ]
            },
            "name": "abi_encode_t_address_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3185:5:2",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3192:3:2",
                "type": ""
              }
            ],
            "src": "3132:118:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3354:124:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3364:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3376:9:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3387:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3372:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3372:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3364:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3444:6:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3457:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3468:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3453:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3453:17:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "3400:43:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3400:71:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3400:71:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3326:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3338:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3349:4:2",
                "type": ""
              }
            ],
            "src": "3256:222:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3512:152:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3529:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3532:77:2",
                        "type": "",
                        "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3522:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3522:88:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3522:88:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3626:1:2",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3629:4:2",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3619:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3619:15:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3619:15:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3650:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3653:4:2",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "3643:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3643:15:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3643:15:2"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "3484:180:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3715:149:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3725:25:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3748:1:2"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "3730:17:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3730:20:2"
                  },
                  "variableNames": [
                    {
                      "name": "x",
                      "nodeType": "YulIdentifier",
                      "src": "3725:1:2"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3759:25:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "3782:1:2"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "3764:17:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3764:20:2"
                  },
                  "variableNames": [
                    {
                      "name": "y",
                      "nodeType": "YulIdentifier",
                      "src": "3759:1:2"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3793:17:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3805:1:2"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "3808:1:2"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "3801:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3801:9:2"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "3793:4:2"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3835:22:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "3837:16:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3837:18:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3837:18:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "diff",
                        "nodeType": "YulIdentifier",
                        "src": "3826:4:2"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3832:1:2"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3823:2:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3823:11:2"
                  },
                  "nodeType": "YulIf",
                  "src": "3820:37:2"
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "3701:1:2",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "3704:1:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "3710:4:2",
                "type": ""
              }
            ],
            "src": "3670:194:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3966:73:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3983:3:2"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3988:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3976:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3976:19:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3976:19:2"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4004:29:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "4023:3:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4028:4:2",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4019:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4019:14:2"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "4004:11:2"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3938:3:2",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "3943:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "3954:11:2",
                "type": ""
              }
            ],
            "src": "3870:169:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4151:128:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "4173:6:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4181:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4169:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4169:14:2"
                      },
                      {
                        "hexValue": "596f752063616e206f6e6c79207265717565737420746f6b656e73206f6e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4185:34:2",
                        "type": "",
                        "value": "You can only request tokens once"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4162:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4162:58:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4162:58:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "4241:6:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4249:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4237:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4237:15:2"
                      },
                      {
                        "hexValue": "20657665727920323420686f757273",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4254:17:2",
                        "type": "",
                        "value": " every 24 hours"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4230:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4230:42:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4230:42:2"
                }
              ]
            },
            "name": "store_literal_in_memory_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "4143:6:2",
                "type": ""
              }
            ],
            "src": "4045:234:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4431:220:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4441:74:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "4507:3:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4512:2:2",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "4448:58:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4448:67:2"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "4441:3:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "4613:3:2"
                      }
                    ],
                    "functionName": {
                      "name": "store_literal_in_memory_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25",
                      "nodeType": "YulIdentifier",
                      "src": "4524:88:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4524:93:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4524:93:2"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4626:19:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "4637:3:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4642:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4633:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4633:12:2"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "4626:3:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "4419:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "4427:3:2",
                "type": ""
              }
            ],
            "src": "4285:366:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4828:248:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4838:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4850:9:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4861:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4846:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4846:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4838:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4885:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4896:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4881:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4881:17:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "4904:4:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4910:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4900:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4900:20:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4874:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4874:47:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4874:47:2"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4930:139:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "5064:4:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "4938:124:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4938:131:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4930:4:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4808:9:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4823:4:2",
                "type": ""
              }
            ],
            "src": "4657:419:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5145:80:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5155:22:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5170:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5164:5:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5164:13:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "5155:5:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5213:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "5186:26:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5186:33:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5186:33:2"
                }
              ]
            },
            "name": "abi_decode_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "5123:6:2",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "5131:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5139:5:2",
                "type": ""
              }
            ],
            "src": "5082:143:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5308:274:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5354:83:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "5356:77:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5356:79:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5356:79:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5329:7:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5338:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5325:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5325:23:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5350:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5321:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5321:32:2"
                  },
                  "nodeType": "YulIf",
                  "src": "5318:119:2"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5447:128:2",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5462:15:2",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5476:1:2",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5466:6:2",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5491:74:2",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5537:9:2"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5548:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5533:3:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5533:22:2"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5557:7:2"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "5501:31:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5501:64:2"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "5491:6:2"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5278:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5289:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5301:6:2",
                "type": ""
              }
            ],
            "src": "5231:351:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5694:114:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "5716:6:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5724:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5712:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5712:14:2"
                      },
                      {
                        "hexValue": "4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e74726163",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5728:34:2",
                        "type": "",
                        "value": "Not enough tokens in the contrac"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5705:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5705:58:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5705:58:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "5784:6:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5792:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5780:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5780:15:2"
                      },
                      {
                        "hexValue": "74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5797:3:2",
                        "type": "",
                        "value": "t"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5773:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5773:28:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5773:28:2"
                }
              ]
            },
            "name": "store_literal_in_memory_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "5686:6:2",
                "type": ""
              }
            ],
            "src": "5588:220:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5960:220:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5970:74:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6036:3:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6041:2:2",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "5977:58:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5977:67:2"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "5970:3:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6142:3:2"
                      }
                    ],
                    "functionName": {
                      "name": "store_literal_in_memory_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c",
                      "nodeType": "YulIdentifier",
                      "src": "6053:88:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6053:93:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6053:93:2"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6155:19:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6166:3:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6171:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6162:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6162:12:2"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "6155:3:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "5948:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "5956:3:2",
                "type": ""
              }
            ],
            "src": "5814:366:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6357:248:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6367:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6379:9:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6390:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6375:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6375:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6367:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6414:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6425:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6410:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6410:17:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "6433:4:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6439:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6429:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6429:20:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6403:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6403:47:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6403:47:2"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6459:139:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "6593:4:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "6467:124:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6467:131:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6459:4:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6337:9:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6352:4:2",
                "type": ""
              }
            ],
            "src": "6186:419:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6737:206:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6747:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6759:9:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6770:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6755:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6755:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6747:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "6827:6:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6840:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6851:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6836:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6836:17:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "6783:43:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6783:71:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6783:71:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "6908:6:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6921:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6932:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6917:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6917:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "6864:43:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6864:72:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6864:72:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6701:9:2",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6713:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6721:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6732:4:2",
                "type": ""
              }
            ],
            "src": "6611:332:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6991:48:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7001:32:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "7026:5:2"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "7019:6:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7019:13:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "7012:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7012:21:2"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "7001:7:2"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "6973:5:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "6983:7:2",
                "type": ""
              }
            ],
            "src": "6949:90:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7085:76:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7139:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7148:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7151:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7141:6:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7141:12:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7141:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "7108:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "7130:5:2"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_bool",
                              "nodeType": "YulIdentifier",
                              "src": "7115:14:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7115:21:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "7105:2:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7105:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "7098:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7098:40:2"
                  },
                  "nodeType": "YulIf",
                  "src": "7095:60:2"
                }
              ]
            },
            "name": "validator_revert_t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "7078:5:2",
                "type": ""
              }
            ],
            "src": "7045:116:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7227:77:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7237:22:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7252:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "7246:5:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7246:13:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "7237:5:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "7292:5:2"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_bool",
                      "nodeType": "YulIdentifier",
                      "src": "7268:23:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7268:30:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7268:30:2"
                }
              ]
            },
            "name": "abi_decode_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "7205:6:2",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7213:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "7221:5:2",
                "type": ""
              }
            ],
            "src": "7167:137:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7384:271:2",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7430:83:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "7432:77:2"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7432:79:2"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7432:79:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7405:7:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7414:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7401:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7401:23:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7426:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7397:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7397:32:2"
                  },
                  "nodeType": "YulIf",
                  "src": "7394:119:2"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "7523:125:2",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "7538:15:2",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7552:1:2",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "7542:6:2",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "7567:71:2",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7610:9:2"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7621:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7606:3:2"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7606:22:2"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7630:7:2"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bool_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "7577:28:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7577:61:2"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "7567:6:2"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7354:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7365:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7377:6:2",
                "type": ""
              }
            ],
            "src": "7310:345:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7767:114:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "7789:6:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7797:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7785:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7785:14:2"
                      },
                      {
                        "hexValue": "4f6e6c7920746865206f776e65722063616e207365742074686520616d6f756e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7801:34:2",
                        "type": "",
                        "value": "Only the owner can set the amoun"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7778:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7778:58:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7778:58:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "7857:6:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7865:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7853:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7853:15:2"
                      },
                      {
                        "hexValue": "74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7870:3:2",
                        "type": "",
                        "value": "t"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7846:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7846:28:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7846:28:2"
                }
              ]
            },
            "name": "store_literal_in_memory_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "7759:6:2",
                "type": ""
              }
            ],
            "src": "7661:220:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8033:220:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8043:74:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8109:3:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8114:2:2",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "8050:58:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8050:67:2"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "8043:3:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8215:3:2"
                      }
                    ],
                    "functionName": {
                      "name": "store_literal_in_memory_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d",
                      "nodeType": "YulIdentifier",
                      "src": "8126:88:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8126:93:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8126:93:2"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8228:19:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8239:3:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8244:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8235:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8235:12:2"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "8228:3:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "8021:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "8029:3:2",
                "type": ""
              }
            ],
            "src": "7887:366:2"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8430:248:2",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8440:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8452:9:2"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8463:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8448:3:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8448:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8440:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8487:9:2"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8498:1:2",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8483:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8483:17:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "8506:4:2"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8512:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8502:3:2"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8502:20:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8476:6:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8476:47:2"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8476:47:2"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8532:139:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "8666:4:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "8540:124:2"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8540:131:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8532:4:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8410:9:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8425:4:2",
                "type": ""
              }
            ],
            "src": "8259:419:2"
          }
        ]
      },
      "contents": "{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_IERC20_$193_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IERC20_$193_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IERC20_$193_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IERC20_$193__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IERC20_$193_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25(memPtr) {\n\n        mstore(add(memPtr, 0), \"You can only request tokens once\")\n\n        mstore(add(memPtr, 32), \" every 24 hours\")\n\n    }\n\n    function abi_encode_t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 47)\n        store_literal_in_memory_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c(memPtr) {\n\n        mstore(add(memPtr, 0), \"Not enough tokens in the contrac\")\n\n        mstore(add(memPtr, 32), \"t\")\n\n    }\n\n    function abi_encode_t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n        store_literal_in_memory_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d(memPtr) {\n\n        mstore(add(memPtr, 0), \"Only the owner can set the amoun\")\n\n        mstore(add(memPtr, 32), \"t\")\n\n    }\n\n    function abi_encode_t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n        store_literal_in_memory_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n",
      "id": 2,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "82:1365:0:-:0;;;329:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;430:21;407:13;;:45;;;;;;;;;;;;;;;;;;479:15;462:14;:32;;;;512:10;504:5;;:18;;;;;;;;;;;;;;;;;;329:200;;82:1365;;88:117:2;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:77::-;882:7;911:5;900:16;;845:77;;;:::o;928:122::-;1001:24;1019:5;1001:24;:::i;:::-;994:5;991:35;981:63;;1040:1;1037;1030:12;981:63;928:122;:::o;1056:143::-;1113:5;1144:6;1138:13;1129:22;;1160:33;1187:5;1160:33;:::i;:::-;1056:143;;;;:::o;1205:507::-;1284:6;1292;1341:2;1329:9;1320:7;1316:23;1312:32;1309:119;;;1347:79;;:::i;:::-;1309:119;1467:1;1492:64;1548:7;1539:6;1528:9;1524:22;1492:64;:::i;:::-;1482:74;;1438:128;1605:2;1631:64;1687:7;1678:6;1667:9;1663:22;1631:64;:::i;:::-;1621:74;;1576:129;1205:507;;;;;:::o;82:1365:0:-;;;;;;;",
  "deployedSourceMap": "82:1365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;153:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;599:555;;;:::i;:::-;;104:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1231:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;283:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;223:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;153:48;;;;;;;;;;;;;;;;;:::o;599:555::-;670:1;642:13;:25;656:10;642:25;;;;;;;;;;;;;;;;:29;638:219;;;759:6;740:15;712:13;:25;726:10;712:25;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:53;;687:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;638:219;929:14;;887:13;;;;;;;;;;:23;;;919:4;887:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;866:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;1040:15;1012:13;:25;1026:10;1012:25;;;;;;;;;;;;;;;:43;;;;1087:13;;;;;;;;;;:22;;;1110:10;1122:14;;1087:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;599:555::o;104:27::-;;;;;;;;;;;;:::o;1231:214::-;1322:5;;;;;;;;;;;1308:19;;:10;:19;;;1300:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;1392:15;1375:14;:32;;;;1231:214;:::o;283:20::-;;;;;;;;;;;;;:::o;223:29::-;;;;:::o;88:117:2:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:60::-;1639:3;1660:5;1653:12;;1611:60;;;:::o;1677:142::-;1727:9;1760:53;1778:34;1787:24;1805:5;1787:24;:::i;:::-;1778:34;:::i;:::-;1760:53;:::i;:::-;1747:66;;1677:142;;;:::o;1825:126::-;1875:9;1908:37;1939:5;1908:37;:::i;:::-;1895:50;;1825:126;;;:::o;1957:140::-;2021:9;2054:37;2085:5;2054:37;:::i;:::-;2041:50;;1957:140;;;:::o;2103:159::-;2204:51;2249:5;2204:51;:::i;:::-;2199:3;2192:64;2103:159;;:::o;2268:250::-;2375:4;2413:2;2402:9;2398:18;2390:26;;2426:85;2508:1;2497:9;2493:17;2484:6;2426:85;:::i;:::-;2268:250;;;;:::o;2524:122::-;2597:24;2615:5;2597:24;:::i;:::-;2590:5;2587:35;2577:63;;2636:1;2633;2626:12;2577:63;2524:122;:::o;2652:139::-;2698:5;2736:6;2723:20;2714:29;;2752:33;2779:5;2752:33;:::i;:::-;2652:139;;;;:::o;2797:329::-;2856:6;2905:2;2893:9;2884:7;2880:23;2876:32;2873:119;;;2911:79;;:::i;:::-;2873:119;3031:1;3056:53;3101:7;3092:6;3081:9;3077:22;3056:53;:::i;:::-;3046:63;;3002:117;2797:329;;;;:::o;3132:118::-;3219:24;3237:5;3219:24;:::i;:::-;3214:3;3207:37;3132:118;;:::o;3256:222::-;3349:4;3387:2;3376:9;3372:18;3364:26;;3400:71;3468:1;3457:9;3453:17;3444:6;3400:71;:::i;:::-;3256:222;;;;:::o;3484:180::-;3532:77;3529:1;3522:88;3629:4;3626:1;3619:15;3653:4;3650:1;3643:15;3670:194;3710:4;3730:20;3748:1;3730:20;:::i;:::-;3725:25;;3764:20;3782:1;3764:20;:::i;:::-;3759:25;;3808:1;3805;3801:9;3793:17;;3832:1;3826:4;3823:11;3820:37;;;3837:18;;:::i;:::-;3820:37;3670:194;;;;:::o;3870:169::-;3954:11;3988:6;3983:3;3976:19;4028:4;4023:3;4019:14;4004:29;;3870:169;;;;:::o;4045:234::-;4185:34;4181:1;4173:6;4169:14;4162:58;4254:17;4249:2;4241:6;4237:15;4230:42;4045:234;:::o;4285:366::-;4427:3;4448:67;4512:2;4507:3;4448:67;:::i;:::-;4441:74;;4524:93;4613:3;4524:93;:::i;:::-;4642:2;4637:3;4633:12;4626:19;;4285:366;;;:::o;4657:419::-;4823:4;4861:2;4850:9;4846:18;4838:26;;4910:9;4904:4;4900:20;4896:1;4885:9;4881:17;4874:47;4938:131;5064:4;4938:131;:::i;:::-;4930:139;;4657:419;;;:::o;5082:143::-;5139:5;5170:6;5164:13;5155:22;;5186:33;5213:5;5186:33;:::i;:::-;5082:143;;;;:::o;5231:351::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:64;5557:7;5548:6;5537:9;5533:22;5501:64;:::i;:::-;5491:74;;5447:128;5231:351;;;;:::o;5588:220::-;5728:34;5724:1;5716:6;5712:14;5705:58;5797:3;5792:2;5784:6;5780:15;5773:28;5588:220;:::o;5814:366::-;5956:3;5977:67;6041:2;6036:3;5977:67;:::i;:::-;5970:74;;6053:93;6142:3;6053:93;:::i;:::-;6171:2;6166:3;6162:12;6155:19;;5814:366;;;:::o;6186:419::-;6352:4;6390:2;6379:9;6375:18;6367:26;;6439:9;6433:4;6429:20;6425:1;6414:9;6410:17;6403:47;6467:131;6593:4;6467:131;:::i;:::-;6459:139;;6186:419;;;:::o;6611:332::-;6732:4;6770:2;6759:9;6755:18;6747:26;;6783:71;6851:1;6840:9;6836:17;6827:6;6783:71;:::i;:::-;6864:72;6932:2;6921:9;6917:18;6908:6;6864:72;:::i;:::-;6611:332;;;;;:::o;6949:90::-;6983:7;7026:5;7019:13;7012:21;7001:32;;6949:90;;;:::o;7045:116::-;7115:21;7130:5;7115:21;:::i;:::-;7108:5;7105:32;7095:60;;7151:1;7148;7141:12;7095:60;7045:116;:::o;7167:137::-;7221:5;7252:6;7246:13;7237:22;;7268:30;7292:5;7268:30;:::i;:::-;7167:137;;;;:::o;7310:345::-;7377:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:61;7630:7;7621:6;7610:9;7606:22;7577:61;:::i;:::-;7567:71;;7523:125;7310:345;;;;:::o;7661:220::-;7801:34;7797:1;7789:6;7785:14;7778:58;7870:3;7865:2;7857:6;7853:15;7846:28;7661:220;:::o;7887:366::-;8029:3;8050:67;8114:2;8109:3;8050:67;:::i;:::-;8043:74;;8126:93;8215:3;8126:93;:::i;:::-;8244:2;8239:3;8235:12;8228:19;;7887:366;;;:::o;8259:419::-;8425:4;8463:2;8452:9;8448:18;8440:26;;8512:9;8506:4;8502:20;8498:1;8487:9;8483:17;8476:47;8540:131;8666:4;8540:131;:::i;:::-;8532:139;;8259:419;;;:::o",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20.sol\";\n\ncontract Faucet {\n    IERC20 public tokenContract; // 代币合约\n    mapping(address => uint256) public recivedRecord; // 领取记录\n    uint256 public amountEachTime; // 每次领取的数量\n    address public owner; // 合约发布者\n\n    constructor(address _tokenContractAddress, uint256 _amountEachTime) {\n        tokenContract = IERC20(_tokenContractAddress);\n        amountEachTime = _amountEachTime;\n        owner = msg.sender;\n    }\n\n    // 领取代币，每个地址每24小时只能领取一次\n    function withdraw() external {\n        if (recivedRecord[msg.sender] > 0) {\n            require(\n                recivedRecord[msg.sender] - block.timestamp >= 1 days,\n                \"You can only request tokens once every 24 hours\"\n            );\n        }\n        require(\n            tokenContract.balanceOf(address(this)) >= amountEachTime,\n            \"Not enough tokens in the contract\"\n        );\n        recivedRecord[msg.sender] = block.timestamp; // 更新领取记录\n        tokenContract.transfer(msg.sender, amountEachTime); // 转账\n    }\n\n    // 设置每次领取的数量，只有合约发布者可以调用\n    function setAmountEachTime(uint256 _amountEachTime) public {\n        require(msg.sender == owner, \"Only the owner can set the amount\");\n        amountEachTime = _amountEachTime; // 更新每次领取的数量\n    }\n}\n",
  "sourcePath": "/Users/luzhenqian/Work/web3/web3-examples/contract/noah-token/contracts/Faucet.sol",
  "ast": {
    "absolutePath": "project:/contracts/Faucet.sol",
    "exportedSymbols": {
      "Faucet": [
        109
      ],
      "IERC20": [
        193
      ]
    },
    "id": 110,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:23:0"
      },
      {
        "absolutePath": "project:/contracts/IERC20.sol",
        "file": "./IERC20.sol",
        "id": 2,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 110,
        "sourceUnit": 194,
        "src": "58:22:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "Faucet",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 109,
        "linearizedBaseContracts": [
          109
        ],
        "name": "Faucet",
        "nameLocation": "91:6:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "55a373d6",
            "id": 5,
            "mutability": "mutable",
            "name": "tokenContract",
            "nameLocation": "118:13:0",
            "nodeType": "VariableDeclaration",
            "scope": 109,
            "src": "104:27:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20_$193",
              "typeString": "contract IERC20"
            },
            "typeName": {
              "id": 4,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 3,
                "name": "IERC20",
                "nameLocations": [
                  "104:6:0"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 193,
                "src": "104:6:0"
              },
              "referencedDeclaration": 193,
              "src": "104:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$193",
                "typeString": "contract IERC20"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "18ed695b",
            "id": 9,
            "mutability": "mutable",
            "name": "recivedRecord",
            "nameLocation": "188:13:0",
            "nodeType": "VariableDeclaration",
            "scope": 109,
            "src": "153:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 8,
              "keyType": {
                "id": 6,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "161:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "153:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 7,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "172:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "d56272bd",
            "id": 11,
            "mutability": "mutable",
            "name": "amountEachTime",
            "nameLocation": "238:14:0",
            "nodeType": "VariableDeclaration",
            "scope": 109,
            "src": "223:29:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "223:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 13,
            "mutability": "mutable",
            "name": "owner",
            "nameLocation": "298:5:0",
            "nodeType": "VariableDeclaration",
            "scope": 109,
            "src": "283:20:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "283:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 35,
              "nodeType": "Block",
              "src": "397:132:0",
              "statements": [
                {
                  "expression": {
                    "id": 24,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 20,
                      "name": "tokenContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5,
                      "src": "407:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$193",
                        "typeString": "contract IERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 22,
                          "name": "_tokenContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15,
                          "src": "430:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 21,
                        "name": "IERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 193,
                        "src": "423:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IERC20_$193_$",
                          "typeString": "type(contract IERC20)"
                        }
                      },
                      "id": 23,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "423:29:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$193",
                        "typeString": "contract IERC20"
                      }
                    },
                    "src": "407:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$193",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 25,
                  "nodeType": "ExpressionStatement",
                  "src": "407:45:0"
                },
                {
                  "expression": {
                    "id": 28,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26,
                      "name": "amountEachTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11,
                      "src": "462:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27,
                      "name": "_amountEachTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17,
                      "src": "479:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "462:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 29,
                  "nodeType": "ExpressionStatement",
                  "src": "462:32:0"
                },
                {
                  "expression": {
                    "id": 33,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 30,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13,
                      "src": "504:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 31,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "512:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 32,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "516:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "512:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "504:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 34,
                  "nodeType": "ExpressionStatement",
                  "src": "504:18:0"
                }
              ]
            },
            "id": 36,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15,
                  "mutability": "mutable",
                  "name": "_tokenContractAddress",
                  "nameLocation": "349:21:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 36,
                  "src": "341:29:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "341:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17,
                  "mutability": "mutable",
                  "name": "_amountEachTime",
                  "nameLocation": "380:15:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 36,
                  "src": "372:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "340:56:0"
            },
            "returnParameters": {
              "id": 19,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "397:0:0"
            },
            "scope": 109,
            "src": "329:200:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 89,
              "nodeType": "Block",
              "src": "628:526:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 44,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 39,
                        "name": "recivedRecord",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9,
                        "src": "642:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 42,
                      "indexExpression": {
                        "expression": {
                          "id": 40,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "656:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 41,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "660:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "656:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "642:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 43,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "670:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "642:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59,
                  "nodeType": "IfStatement",
                  "src": "638:219:0",
                  "trueBody": {
                    "id": 58,
                    "nodeType": "Block",
                    "src": "673:184:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 54,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 52,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "id": 46,
                                    "name": "recivedRecord",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9,
                                    "src": "712:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 49,
                                  "indexExpression": {
                                    "expression": {
                                      "id": 47,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967281,
                                      "src": "726:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 48,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "730:6:0",
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "726:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "712:25:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "expression": {
                                    "id": 50,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967292,
                                    "src": "740:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 51,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "746:9:0",
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "740:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "712:43:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 53,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "759:6:0",
                                "subdenomination": "days",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_86400_by_1",
                                  "typeString": "int_const 86400"
                                },
                                "value": "1"
                              },
                              "src": "712:53:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "596f752063616e206f6e6c79207265717565737420746f6b656e73206f6e636520657665727920323420686f757273",
                              "id": 55,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "783:49:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25",
                                "typeString": "literal_string \"You can only request tokens once every 24 hours\""
                              },
                              "value": "You can only request tokens once every 24 hours"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4b43ed7f580ec36c027c357c77529f74a7a002b8e07be0c43d8ce5fc85eb2b25",
                                "typeString": "literal_string \"You can only request tokens once every 24 hours\""
                              }
                            ],
                            "id": 45,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "687:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 56,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "687:159:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 57,
                        "nodeType": "ExpressionStatement",
                        "src": "687:159:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 69,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 65,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "919:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Faucet_$109",
                                    "typeString": "contract Faucet"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Faucet_$109",
                                    "typeString": "contract Faucet"
                                  }
                                ],
                                "id": 64,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "911:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 63,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "911:7:0",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 66,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "911:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 61,
                              "name": "tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5,
                              "src": "887:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$193",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 62,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "901:9:0",
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 138,
                            "src": "887:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 67,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "887:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 68,
                          "name": "amountEachTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11,
                          "src": "929:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "887:56:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e7472616374",
                        "id": 70,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "957:35:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c",
                          "typeString": "literal_string \"Not enough tokens in the contract\""
                        },
                        "value": "Not enough tokens in the contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_959505d6981f86f0c6cd07dec1d06d3184e540da7045476dc2b1bea329849d7c",
                          "typeString": "literal_string \"Not enough tokens in the contract\""
                        }
                      ],
                      "id": 60,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "866:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 71,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "866:136:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 72,
                  "nodeType": "ExpressionStatement",
                  "src": "866:136:0"
                },
                {
                  "expression": {
                    "id": 79,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 73,
                        "name": "recivedRecord",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9,
                        "src": "1012:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 76,
                      "indexExpression": {
                        "expression": {
                          "id": 74,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1026:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 75,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1030:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1026:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1012:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 77,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "1040:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 78,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1046:9:0",
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "1040:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1012:43:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 80,
                  "nodeType": "ExpressionStatement",
                  "src": "1012:43:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 84,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1110:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 85,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1114:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1110:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 86,
                        "name": "amountEachTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11,
                        "src": "1122:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 81,
                        "name": "tokenContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5,
                        "src": "1087:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$193",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 83,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1101:8:0",
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 147,
                      "src": "1087:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 87,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1087:50:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 88,
                  "nodeType": "ExpressionStatement",
                  "src": "1087:50:0"
                }
              ]
            },
            "functionSelector": "3ccfd60b",
            "id": 90,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nameLocation": "608:8:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 37,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "616:2:0"
            },
            "returnParameters": {
              "id": 38,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "628:0:0"
            },
            "scope": 109,
            "src": "599:555:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 107,
              "nodeType": "Block",
              "src": "1290:155:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 99,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 96,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "1308:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 97,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1312:6:0",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1308:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 98,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13,
                          "src": "1322:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1308:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f6e6c7920746865206f776e65722063616e207365742074686520616d6f756e74",
                        "id": 100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1329:35:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d",
                          "typeString": "literal_string \"Only the owner can set the amount\""
                        },
                        "value": "Only the owner can set the amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1fb4bb3ed5fc94a74dc895c65b01a091d3dcd7964815d24f0f20f9176e04a15d",
                          "typeString": "literal_string \"Only the owner can set the amount\""
                        }
                      ],
                      "id": 95,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1300:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1300:65:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 102,
                  "nodeType": "ExpressionStatement",
                  "src": "1300:65:0"
                },
                {
                  "expression": {
                    "id": 105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 103,
                      "name": "amountEachTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11,
                      "src": "1375:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 104,
                      "name": "_amountEachTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 92,
                      "src": "1392:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1375:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 106,
                  "nodeType": "ExpressionStatement",
                  "src": "1375:32:0"
                }
              ]
            },
            "functionSelector": "5e9e23b4",
            "id": 108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setAmountEachTime",
            "nameLocation": "1240:17:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 93,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 92,
                  "mutability": "mutable",
                  "name": "_amountEachTime",
                  "nameLocation": "1266:15:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 108,
                  "src": "1258:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 91,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1258:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1257:25:0"
            },
            "returnParameters": {
              "id": 94,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1290:0:0"
            },
            "scope": 109,
            "src": "1231:214:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 110,
        "src": "82:1365:0",
        "usedErrors": []
      }
    ],
    "src": "33:1415:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {
    "5": {
      "events": {},
      "links": {},
      "address": "0x06a502d8c9F6e2AA23E555Add0d631EC3547FdaC",
      "transactionHash": "0xc766ab8e6f3745bb00f2ceeea1ca86355cfe0fd308c26b0d55171972313ec286"
    },
    "5777": {
      "events": {},
      "links": {},
      "address": "0x4565E31828c779A610c4b50755D3Cf4E163984eE",
      "transactionHash": "0xf7e7497a2d3ff0bfebf28fb3aab3fd916074b96092f4c24c3d38ba58b7128d36"
    }
  },
  "schemaVersion": "3.4.11",
  "updatedAt": "2023-01-09T07:29:28.163Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}