{
  "contractName": "NoahToken",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_initName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_initSymbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "_initDecimals",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "_initTotalSupply",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "remaining",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_initName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_initSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_initDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_initTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/NoahToken.sol\":\"NoahToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/IERC20.sol\":{\"keccak256\":\"0xb6bb17d43c382a73519566ebff93b98e7ca9e2350260a2654487436a9d0ad085\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b73b2a5d2f2660ea9be4040e466ea41a10ba50748b568bbee6740d07686ef92\",\"dweb:/ipfs/QmXyQgnM6zn3KGCKfhLSBLaqYrFnBoHDGrDXTsCkdfJngc\"]},\"project:/contracts/NoahToken.sol\":{\"keccak256\":\"0x7c85f81fdfd251b38ac71d76ce989217cc4e68711f02d885a3c1b39051dd96b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://becc6cb04a39d6e978a8940fda05c1bd6421763e2ceda4e31146678f67abda1b\",\"dweb:/ipfs/QmZh8gnUYNmXkLeiz51mPcjRTmHqZ88nPWtcFsvvxHdjTg\"]}},\"version\":1}",
  "bytecode": "[encoded data, 11318 characters]",
  "deployedBytecode": "[encoded data, 7666 characters]",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:9521:3",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "47:35:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "57:19:3",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "73:2:3",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "67:5:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "67:9:3"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "57:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "allocate_unbounded",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "40:6:3",
                "type": ""
              }
            ],
            "src": "7:75:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "177:28:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "194:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "197:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "187:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "187:12:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "187:12:3"
                }
              ]
            },
            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
            "nodeType": "YulFunctionDefinition",
            "src": "88:117:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "300:28:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "317:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "320:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "310:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "310:12:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "310:12:3"
                }
              ]
            },
            "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
            "nodeType": "YulFunctionDefinition",
            "src": "211:117:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "423:28:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "440:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "443:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "433:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "433:12:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "433:12:3"
                }
              ]
            },
            "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
            "nodeType": "YulFunctionDefinition",
            "src": "334:117:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "546:28:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "563:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "566:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "556:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "556:12:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "556:12:3"
                }
              ]
            },
            "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
            "nodeType": "YulFunctionDefinition",
            "src": "457:117:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "628:54:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "638:38:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "656:5:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "663:2:3",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "652:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "652:14:3"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "672:2:3",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "668:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "668:7:3"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "648:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "648:28:3"
                  },
                  "variableNames": [
                    {
                      "name": "result",
                      "nodeType": "YulIdentifier",
                      "src": "638:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "round_up_to_mul_of_32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "611:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "result",
                "nodeType": "YulTypedName",
                "src": "621:6:3",
                "type": ""
              }
            ],
            "src": "580:102:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "716:152:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "733:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "736:77:3",
                        "type": "",
                        "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "726:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "726:88:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "726:88:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "830:1:3",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "833:4:3",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "823:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "823:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "823:15:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "854:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "857:4:3",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "847:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "847:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "847:15:3"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "688:180:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "917:238:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "927:58:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "949:6:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "size",
                            "nodeType": "YulIdentifier",
                            "src": "979:4:3"
                          }
                        ],
                        "functionName": {
                          "name": "round_up_to_mul_of_32",
                          "nodeType": "YulIdentifier",
                          "src": "957:21:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "957:27:3"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "945:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "945:40:3"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "931:10:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1096:22:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1098:16:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1098:18:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1098:18:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1039:10:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1051:18:3",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1036:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1036:34:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1075:10:3"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1087:6:3"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "1072:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1072:22:3"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "1033:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1033:62:3"
                  },
                  "nodeType": "YulIf",
                  "src": "1030:88:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1134:2:3",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "1138:10:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1127:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1127:22:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1127:22:3"
                }
              ]
            },
            "name": "finalize_allocation",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "903:6:3",
                "type": ""
              },
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "911:4:3",
                "type": ""
              }
            ],
            "src": "874:281:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1202:88:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1212:30:3",
                  "value": {
                    "arguments": [],
                    "functionName": {
                      "name": "allocate_unbounded",
                      "nodeType": "YulIdentifier",
                      "src": "1222:18:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1222:20:3"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "1212:6:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1271:6:3"
                      },
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "1279:4:3"
                      }
                    ],
                    "functionName": {
                      "name": "finalize_allocation",
                      "nodeType": "YulIdentifier",
                      "src": "1251:19:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1251:33:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1251:33:3"
                }
              ]
            },
            "name": "allocate_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "1186:4:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "1195:6:3",
                "type": ""
              }
            ],
            "src": "1161:129:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1363:241:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1468:22:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1470:16:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1470:18:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1470:18:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1440:6:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1448:18:3",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1437:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1437:30:3"
                  },
                  "nodeType": "YulIf",
                  "src": "1434:56:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1500:37:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1530:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "round_up_to_mul_of_32",
                      "nodeType": "YulIdentifier",
                      "src": "1508:21:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1508:29:3"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "1500:4:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1574:23:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "1586:4:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1592:4:3",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1582:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1582:15:3"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "1574:4:3"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_t_string_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1347:6:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "1358:4:3",
                "type": ""
              }
            ],
            "src": "1296:308:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1672:184:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1682:10:3",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1691:1:3",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "1686:1:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1751:63:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "1776:3:3"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "1781:1:3"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1772:3:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1772:11:3"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "1795:3:3"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "1800:1:3"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1791:3:3"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1791:11:3"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "1785:5:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1785:18:3"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1765:6:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1765:39:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1765:39:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "1712:1:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1715:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "1709:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1709:13:3"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "1723:19:3",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1725:15:3",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "1734:1:3"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1737:2:3",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1730:3:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1730:10:3"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "1725:1:3"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "1705:3:3",
                    "statements": []
                  },
                  "src": "1701:113:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "1834:3:3"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "1839:6:3"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1830:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1830:16:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1848:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1823:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1823:27:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1823:27:3"
                }
              ]
            },
            "name": "copy_memory_to_memory_with_cleanup",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "1654:3:3",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "1659:3:3",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1664:6:3",
                "type": ""
              }
            ],
            "src": "1610:246:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1957:339:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1967:75:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2034:6:3"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_t_string_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "1992:41:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1992:49:3"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "1976:15:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1976:66:3"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "1967:5:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "2058:5:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2065:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2051:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2051:21:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2051:21:3"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2081:27:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "2096:5:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2103:4:3",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2092:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2092:16:3"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "2085:3:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2146:83:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
                            "nodeType": "YulIdentifier",
                            "src": "2148:77:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2148:79:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2148:79:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "2127:3:3"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2132:6:3"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2123:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2123:16:3"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "2141:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2120:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2120:25:3"
                  },
                  "nodeType": "YulIf",
                  "src": "2117:112:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "2273:3:3"
                      },
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "2278:3:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2283:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory_with_cleanup",
                      "nodeType": "YulIdentifier",
                      "src": "2238:34:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2238:52:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2238:52:3"
                }
              ]
            },
            "name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "1930:3:3",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1935:6:3",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1943:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "1951:5:3",
                "type": ""
              }
            ],
            "src": "1862:434:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2389:282:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2438:83:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
                            "nodeType": "YulIdentifier",
                            "src": "2440:77:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2440:79:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2440:79:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2417:6:3"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2425:4:3",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2413:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2413:17:3"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "2432:3:3"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "2409:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2409:27:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2402:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2402:35:3"
                  },
                  "nodeType": "YulIf",
                  "src": "2399:122:3"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2530:27:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2550:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "2544:5:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2544:13:3"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "2534:6:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2566:99:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2638:6:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2646:4:3",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2634:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2634:17:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2653:6:3"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "2661:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "2575:58:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2575:90:3"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "2566:5:3"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_t_string_memory_ptr_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2367:6:3",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2375:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "2383:5:3",
                "type": ""
              }
            ],
            "src": "2316:355:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2720:43:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2730:27:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2745:5:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2752:4:3",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "2741:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2741:16:3"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "2730:7:3"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2702:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "2712:7:3",
                "type": ""
              }
            ],
            "src": "2677:86:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2810:77:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2865:16:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2874:1:3",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2877:1:3",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2867:6:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2867:12:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2867:12:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2833:5:3"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2856:5:3"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint8",
                              "nodeType": "YulIdentifier",
                              "src": "2840:15:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2840:22:3"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "2830:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2830:33:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2823:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2823:41:3"
                  },
                  "nodeType": "YulIf",
                  "src": "2820:61:3"
                }
              ]
            },
            "name": "validator_revert_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2803:5:3",
                "type": ""
              }
            ],
            "src": "2769:118:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2954:78:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2964:22:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2979:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "2973:5:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2973:13:3"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2964:5:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3020:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "2995:24:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2995:31:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2995:31:3"
                }
              ]
            },
            "name": "abi_decode_t_uint8_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2932:6:3",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2940:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2948:5:3",
                "type": ""
              }
            ],
            "src": "2893:139:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3083:32:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3093:16:3",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3104:5:3"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "3093:7:3"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3065:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "3075:7:3",
                "type": ""
              }
            ],
            "src": "3038:77:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3164:79:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3221:16:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3230:1:3",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3233:1:3",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3223:6:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3223:12:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3223:12:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3187:5:3"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3212:5:3"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "3194:17:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3194:24:3"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "3184:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3184:35:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "3177:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3177:43:3"
                  },
                  "nodeType": "YulIf",
                  "src": "3174:63:3"
                }
              ]
            },
            "name": "validator_revert_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3157:5:3",
                "type": ""
              }
            ],
            "src": "3121:122:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3312:80:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3322:22:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3337:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "3331:5:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3331:13:3"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "3322:5:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3380:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "3353:26:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3353:33:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3353:33:3"
                }
              ]
            },
            "name": "abi_decode_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "3290:6:3",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "3298:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3306:5:3",
                "type": ""
              }
            ],
            "src": "3249:143:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3544:1016:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3591:83:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "3593:77:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3593:79:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3593:79:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3565:7:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3574:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3561:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3561:23:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3586:3:3",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3557:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3557:33:3"
                  },
                  "nodeType": "YulIf",
                  "src": "3554:120:3"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3684:291:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3699:38:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3723:9:3"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3734:1:3",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3719:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3719:17:3"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "3713:5:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3713:24:3"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3703:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "3784:83:3",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [],
                              "functionName": {
                                "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
                                "nodeType": "YulIdentifier",
                                "src": "3786:77:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3786:79:3"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3786:79:3"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3756:6:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3764:18:3",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "3753:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3753:30:3"
                      },
                      "nodeType": "YulIf",
                      "src": "3750:117:3"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3881:84:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3937:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3948:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3933:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3933:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3957:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_string_memory_ptr_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "3891:41:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3891:74:3"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3881:6:3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3985:292:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4000:39:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4024:9:3"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4035:2:3",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4020:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4020:18:3"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "4014:5:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4014:25:3"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4004:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "4086:83:3",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [],
                              "functionName": {
                                "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
                                "nodeType": "YulIdentifier",
                                "src": "4088:77:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4088:79:3"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "4088:79:3"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4058:6:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4066:18:3",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "4055:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4055:30:3"
                      },
                      "nodeType": "YulIf",
                      "src": "4052:117:3"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4183:84:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4239:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4250:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4235:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4235:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4259:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_string_memory_ptr_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "4193:41:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4193:74:3"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "4183:6:3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4287:127:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4302:16:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4316:2:3",
                        "type": "",
                        "value": "64"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4306:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4332:72:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4376:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4387:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4372:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4372:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4396:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint8_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "4342:29:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4342:62:3"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "4332:6:3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4424:129:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4439:16:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4453:2:3",
                        "type": "",
                        "value": "96"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4443:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4469:74:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4515:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4526:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4511:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4511:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4535:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "4479:31:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4479:64:3"
                      },
                      "variableNames": [
                        {
                          "name": "value3",
                          "nodeType": "YulIdentifier",
                          "src": "4469:6:3"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3490:9:3",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3501:7:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3513:6:3",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3521:6:3",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3529:6:3",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3537:6:3",
                "type": ""
              }
            ],
            "src": "3398:1162:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4625:40:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4636:22:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4652:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "4646:5:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4646:12:3"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "4636:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "array_length_t_string_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4608:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "4618:6:3",
                "type": ""
              }
            ],
            "src": "4566:99:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4699:152:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4716:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4719:77:3",
                        "type": "",
                        "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4709:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4709:88:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4709:88:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4813:1:3",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4816:4:3",
                        "type": "",
                        "value": "0x22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4806:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4806:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4806:15:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4837:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4840:4:3",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "4830:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4830:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4830:15:3"
                }
              ]
            },
            "name": "panic_error_0x22",
            "nodeType": "YulFunctionDefinition",
            "src": "4671:180:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4908:269:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4918:22:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "4932:4:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4938:1:3",
                        "type": "",
                        "value": "2"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "4928:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4928:12:3"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "4918:6:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4949:38:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "4979:4:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4985:1:3",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "4975:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4975:12:3"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nodeType": "YulTypedName",
                      "src": "4953:18:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5026:51:3",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5040:27:3",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nodeType": "YulIdentifier",
                              "src": "5054:6:3"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5062:4:3",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "5050:3:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5050:17:3"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "5040:6:3"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "5006:18:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4999:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4999:26:3"
                  },
                  "nodeType": "YulIf",
                  "src": "4996:81:3"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5129:42:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x22",
                            "nodeType": "YulIdentifier",
                            "src": "5143:16:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5143:18:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5143:18:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "5093:18:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "5116:6:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5124:2:3",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "5113:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5113:14:3"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "5090:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5090:38:3"
                  },
                  "nodeType": "YulIf",
                  "src": "5087:84:3"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "4892:4:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "4901:6:3",
                "type": ""
              }
            ],
            "src": "4857:320:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5237:87:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5247:11:3",
                  "value": {
                    "name": "ptr",
                    "nodeType": "YulIdentifier",
                    "src": "5255:3:3"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "5247:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5275:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "name": "ptr",
                        "nodeType": "YulIdentifier",
                        "src": "5278:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5268:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5268:14:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5268:14:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5291:26:3",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5309:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5312:4:3",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "keccak256",
                      "nodeType": "YulIdentifier",
                      "src": "5299:9:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5299:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "5291:4:3"
                    }
                  ]
                }
              ]
            },
            "name": "array_dataslot_t_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "ptr",
                "nodeType": "YulTypedName",
                "src": "5224:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "5232:4:3",
                "type": ""
              }
            ],
            "src": "5183:141:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5374:49:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5384:33:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "5402:5:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5409:2:3",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5398:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5398:14:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5414:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "5394:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5394:23:3"
                  },
                  "variableNames": [
                    {
                      "name": "result",
                      "nodeType": "YulIdentifier",
                      "src": "5384:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "divide_by_32_ceil",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5357:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "result",
                "nodeType": "YulTypedName",
                "src": "5367:6:3",
                "type": ""
              }
            ],
            "src": "5330:93:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5482:54:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5492:37:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "bits",
                        "nodeType": "YulIdentifier",
                        "src": "5517:4:3"
                      },
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5523:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "shl",
                      "nodeType": "YulIdentifier",
                      "src": "5513:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5513:16:3"
                  },
                  "variableNames": [
                    {
                      "name": "newValue",
                      "nodeType": "YulIdentifier",
                      "src": "5492:8:3"
                    }
                  ]
                }
              ]
            },
            "name": "shift_left_dynamic",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "bits",
                "nodeType": "YulTypedName",
                "src": "5457:4:3",
                "type": ""
              },
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5463:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "newValue",
                "nodeType": "YulTypedName",
                "src": "5473:8:3",
                "type": ""
              }
            ],
            "src": "5429:107:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5618:317:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5628:35:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "shiftBytes",
                        "nodeType": "YulIdentifier",
                        "src": "5649:10:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5661:1:3",
                        "type": "",
                        "value": "8"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "5645:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5645:18:3"
                  },
                  "variables": [
                    {
                      "name": "shiftBits",
                      "nodeType": "YulTypedName",
                      "src": "5632:9:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5672:109:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "shiftBits",
                        "nodeType": "YulIdentifier",
                        "src": "5703:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5714:66:3",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "shift_left_dynamic",
                      "nodeType": "YulIdentifier",
                      "src": "5684:18:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5684:97:3"
                  },
                  "variables": [
                    {
                      "name": "mask",
                      "nodeType": "YulTypedName",
                      "src": "5676:4:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5790:51:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "shiftBits",
                        "nodeType": "YulIdentifier",
                        "src": "5821:9:3"
                      },
                      {
                        "name": "toInsert",
                        "nodeType": "YulIdentifier",
                        "src": "5832:8:3"
                      }
                    ],
                    "functionName": {
                      "name": "shift_left_dynamic",
                      "nodeType": "YulIdentifier",
                      "src": "5802:18:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5802:39:3"
                  },
                  "variableNames": [
                    {
                      "name": "toInsert",
                      "nodeType": "YulIdentifier",
                      "src": "5790:8:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5850:30:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5863:5:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "mask",
                            "nodeType": "YulIdentifier",
                            "src": "5874:4:3"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "5870:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5870:9:3"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "5859:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5859:21:3"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "5850:5:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5889:40:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5902:5:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "toInsert",
                            "nodeType": "YulIdentifier",
                            "src": "5913:8:3"
                          },
                          {
                            "name": "mask",
                            "nodeType": "YulIdentifier",
                            "src": "5923:4:3"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5909:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5909:19:3"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "5899:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5899:30:3"
                  },
                  "variableNames": [
                    {
                      "name": "result",
                      "nodeType": "YulIdentifier",
                      "src": "5889:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "update_byte_slice_dynamic32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5579:5:3",
                "type": ""
              },
              {
                "name": "shiftBytes",
                "nodeType": "YulTypedName",
                "src": "5586:10:3",
                "type": ""
              },
              {
                "name": "toInsert",
                "nodeType": "YulTypedName",
                "src": "5598:8:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "result",
                "nodeType": "YulTypedName",
                "src": "5611:6:3",
                "type": ""
              }
            ],
            "src": "5542:393:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5973:28:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5983:12:3",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "5990:5:3"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "5983:3:3"
                    }
                  ]
                }
              ]
            },
            "name": "identity",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5959:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "5969:3:3",
                "type": ""
              }
            ],
            "src": "5941:60:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6067:82:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6077:66:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "6135:5:3"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "6117:17:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6117:24:3"
                          }
                        ],
                        "functionName": {
                          "name": "identity",
                          "nodeType": "YulIdentifier",
                          "src": "6108:8:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6108:34:3"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "6090:17:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6090:53:3"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "6077:9:3"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_uint256_to_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "6047:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "6057:9:3",
                "type": ""
              }
            ],
            "src": "6007:142:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6202:28:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6212:12:3",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "6219:5:3"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "6212:3:3"
                    }
                  ]
                }
              ]
            },
            "name": "prepare_store_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "6188:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "6198:3:3",
                "type": ""
              }
            ],
            "src": "6155:75:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6312:193:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6322:63:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value_0",
                        "nodeType": "YulIdentifier",
                        "src": "6377:7:3"
                      }
                    ],
                    "functionName": {
                      "name": "convert_t_uint256_to_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "6346:30:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6346:39:3"
                  },
                  "variables": [
                    {
                      "name": "convertedValue_0",
                      "nodeType": "YulTypedName",
                      "src": "6326:16:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nodeType": "YulIdentifier",
                        "src": "6401:4:3"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "slot",
                                "nodeType": "YulIdentifier",
                                "src": "6441:4:3"
                              }
                            ],
                            "functionName": {
                              "name": "sload",
                              "nodeType": "YulIdentifier",
                              "src": "6435:5:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6435:11:3"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6448:6:3"
                          },
                          {
                            "arguments": [
                              {
                                "name": "convertedValue_0",
                                "nodeType": "YulIdentifier",
                                "src": "6480:16:3"
                              }
                            ],
                            "functionName": {
                              "name": "prepare_store_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "6456:23:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6456:41:3"
                          }
                        ],
                        "functionName": {
                          "name": "update_byte_slice_dynamic32",
                          "nodeType": "YulIdentifier",
                          "src": "6407:27:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6407:91:3"
                      }
                    ],
                    "functionName": {
                      "name": "sstore",
                      "nodeType": "YulIdentifier",
                      "src": "6394:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6394:105:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6394:105:3"
                }
              ]
            },
            "name": "update_storage_value_t_uint256_to_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nodeType": "YulTypedName",
                "src": "6289:4:3",
                "type": ""
              },
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "6295:6:3",
                "type": ""
              },
              {
                "name": "value_0",
                "nodeType": "YulTypedName",
                "src": "6303:7:3",
                "type": ""
              }
            ],
            "src": "6236:269:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6560:24:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6570:8:3",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6577:1:3",
                    "type": "",
                    "value": "0"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "6570:3:3"
                    }
                  ]
                }
              ]
            },
            "name": "zero_value_for_split_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "6556:3:3",
                "type": ""
              }
            ],
            "src": "6511:73:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6643:136:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6653:46:3",
                  "value": {
                    "arguments": [],
                    "functionName": {
                      "name": "zero_value_for_split_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "6667:30:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6667:32:3"
                  },
                  "variables": [
                    {
                      "name": "zero_0",
                      "nodeType": "YulTypedName",
                      "src": "6657:6:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nodeType": "YulIdentifier",
                        "src": "6752:4:3"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6758:6:3"
                      },
                      {
                        "name": "zero_0",
                        "nodeType": "YulIdentifier",
                        "src": "6766:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "update_storage_value_t_uint256_to_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "6708:43:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6708:65:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6708:65:3"
                }
              ]
            },
            "name": "storage_set_to_zero_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nodeType": "YulTypedName",
                "src": "6629:4:3",
                "type": ""
              },
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "6635:6:3",
                "type": ""
              }
            ],
            "src": "6590:189:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6835:136:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6902:63:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "start",
                              "nodeType": "YulIdentifier",
                              "src": "6946:5:3"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6953:1:3",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "storage_set_to_zero_t_uint256",
                            "nodeType": "YulIdentifier",
                            "src": "6916:29:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6916:39:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6916:39:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "start",
                        "nodeType": "YulIdentifier",
                        "src": "6855:5:3"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "6862:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "6852:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6852:14:3"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "6867:26:3",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6869:22:3",
                        "value": {
                          "arguments": [
                            {
                              "name": "start",
                              "nodeType": "YulIdentifier",
                              "src": "6882:5:3"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6889:1:3",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "6878:3:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6878:13:3"
                        },
                        "variableNames": [
                          {
                            "name": "start",
                            "nodeType": "YulIdentifier",
                            "src": "6869:5:3"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "6849:2:3",
                    "statements": []
                  },
                  "src": "6845:120:3"
                }
              ]
            },
            "name": "clear_storage_range_t_bytes1",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "start",
                "nodeType": "YulTypedName",
                "src": "6823:5:3",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "6830:3:3",
                "type": ""
              }
            ],
            "src": "6785:186:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7056:464:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7082:431:3",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "7096:54:3",
                        "value": {
                          "arguments": [
                            {
                              "name": "array",
                              "nodeType": "YulIdentifier",
                              "src": "7144:5:3"
                            }
                          ],
                          "functionName": {
                            "name": "array_dataslot_t_string_storage",
                            "nodeType": "YulIdentifier",
                            "src": "7112:31:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7112:38:3"
                        },
                        "variables": [
                          {
                            "name": "dataArea",
                            "nodeType": "YulTypedName",
                            "src": "7100:8:3",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "7163:63:3",
                        "value": {
                          "arguments": [
                            {
                              "name": "dataArea",
                              "nodeType": "YulIdentifier",
                              "src": "7186:8:3"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "startIndex",
                                  "nodeType": "YulIdentifier",
                                  "src": "7214:10:3"
                                }
                              ],
                              "functionName": {
                                "name": "divide_by_32_ceil",
                                "nodeType": "YulIdentifier",
                                "src": "7196:17:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7196:29:3"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "7182:3:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7182:44:3"
                        },
                        "variables": [
                          {
                            "name": "deleteStart",
                            "nodeType": "YulTypedName",
                            "src": "7167:11:3",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7383:27:3",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7385:23:3",
                              "value": {
                                "name": "dataArea",
                                "nodeType": "YulIdentifier",
                                "src": "7400:8:3"
                              },
                              "variableNames": [
                                {
                                  "name": "deleteStart",
                                  "nodeType": "YulIdentifier",
                                  "src": "7385:11:3"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "startIndex",
                              "nodeType": "YulIdentifier",
                              "src": "7367:10:3"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7379:2:3",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "lt",
                            "nodeType": "YulIdentifier",
                            "src": "7364:2:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7364:18:3"
                        },
                        "nodeType": "YulIf",
                        "src": "7361:49:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "deleteStart",
                              "nodeType": "YulIdentifier",
                              "src": "7452:11:3"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "dataArea",
                                  "nodeType": "YulIdentifier",
                                  "src": "7469:8:3"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "len",
                                      "nodeType": "YulIdentifier",
                                      "src": "7497:3:3"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "divide_by_32_ceil",
                                    "nodeType": "YulIdentifier",
                                    "src": "7479:17:3"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7479:22:3"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "7465:3:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7465:37:3"
                            }
                          ],
                          "functionName": {
                            "name": "clear_storage_range_t_bytes1",
                            "nodeType": "YulIdentifier",
                            "src": "7423:28:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7423:80:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7423:80:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "7073:3:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7078:2:3",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7070:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7070:11:3"
                  },
                  "nodeType": "YulIf",
                  "src": "7067:446:3"
                }
              ]
            },
            "name": "clean_up_bytearray_end_slots_t_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "7032:5:3",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "7039:3:3",
                "type": ""
              },
              {
                "name": "startIndex",
                "nodeType": "YulTypedName",
                "src": "7044:10:3",
                "type": ""
              }
            ],
            "src": "6977:543:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7589:54:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7599:37:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "bits",
                        "nodeType": "YulIdentifier",
                        "src": "7624:4:3"
                      },
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "7630:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "7620:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7620:16:3"
                  },
                  "variableNames": [
                    {
                      "name": "newValue",
                      "nodeType": "YulIdentifier",
                      "src": "7599:8:3"
                    }
                  ]
                }
              ]
            },
            "name": "shift_right_unsigned_dynamic",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "bits",
                "nodeType": "YulTypedName",
                "src": "7564:4:3",
                "type": ""
              },
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "7570:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "newValue",
                "nodeType": "YulTypedName",
                "src": "7580:8:3",
                "type": ""
              }
            ],
            "src": "7526:117:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7700:118:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7710:68:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7759:1:3",
                                "type": "",
                                "value": "8"
                              },
                              {
                                "name": "bytes",
                                "nodeType": "YulIdentifier",
                                "src": "7762:5:3"
                              }
                            ],
                            "functionName": {
                              "name": "mul",
                              "nodeType": "YulIdentifier",
                              "src": "7755:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7755:13:3"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7774:1:3",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "7770:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7770:6:3"
                          }
                        ],
                        "functionName": {
                          "name": "shift_right_unsigned_dynamic",
                          "nodeType": "YulIdentifier",
                          "src": "7726:28:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7726:51:3"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nodeType": "YulIdentifier",
                      "src": "7722:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7722:56:3"
                  },
                  "variables": [
                    {
                      "name": "mask",
                      "nodeType": "YulTypedName",
                      "src": "7714:4:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7787:25:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "7801:4:3"
                      },
                      {
                        "name": "mask",
                        "nodeType": "YulIdentifier",
                        "src": "7807:4:3"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "7797:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7797:15:3"
                  },
                  "variableNames": [
                    {
                      "name": "result",
                      "nodeType": "YulIdentifier",
                      "src": "7787:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "mask_bytes_dynamic",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "7677:4:3",
                "type": ""
              },
              {
                "name": "bytes",
                "nodeType": "YulTypedName",
                "src": "7683:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "result",
                "nodeType": "YulTypedName",
                "src": "7693:6:3",
                "type": ""
              }
            ],
            "src": "7649:169:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7904:214:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8037:37:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "8064:4:3"
                      },
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "8070:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "mask_bytes_dynamic",
                      "nodeType": "YulIdentifier",
                      "src": "8045:18:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8045:29:3"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "8037:4:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8083:29:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "8094:4:3"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8104:1:3",
                            "type": "",
                            "value": "2"
                          },
                          {
                            "name": "len",
                            "nodeType": "YulIdentifier",
                            "src": "8107:3:3"
                          }
                        ],
                        "functionName": {
                          "name": "mul",
                          "nodeType": "YulIdentifier",
                          "src": "8100:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8100:11:3"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "8091:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8091:21:3"
                  },
                  "variableNames": [
                    {
                      "name": "used",
                      "nodeType": "YulIdentifier",
                      "src": "8083:4:3"
                    }
                  ]
                }
              ]
            },
            "name": "extract_used_part_and_set_length_of_short_byte_array",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "7885:4:3",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "7891:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "used",
                "nodeType": "YulTypedName",
                "src": "7899:4:3",
                "type": ""
              }
            ],
            "src": "7823:295:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8215:1303:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8226:51:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "8273:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "array_length_t_string_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "8240:32:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8240:37:3"
                  },
                  "variables": [
                    {
                      "name": "newLen",
                      "nodeType": "YulTypedName",
                      "src": "8230:6:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8362:22:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "8364:16:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8364:18:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8364:18:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "8334:6:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8342:18:3",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8331:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8331:30:3"
                  },
                  "nodeType": "YulIf",
                  "src": "8328:56:3"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8394:52:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "slot",
                            "nodeType": "YulIdentifier",
                            "src": "8440:4:3"
                          }
                        ],
                        "functionName": {
                          "name": "sload",
                          "nodeType": "YulIdentifier",
                          "src": "8434:5:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8434:11:3"
                      }
                    ],
                    "functionName": {
                      "name": "extract_byte_array_length",
                      "nodeType": "YulIdentifier",
                      "src": "8408:25:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8408:38:3"
                  },
                  "variables": [
                    {
                      "name": "oldLen",
                      "nodeType": "YulTypedName",
                      "src": "8398:6:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nodeType": "YulIdentifier",
                        "src": "8539:4:3"
                      },
                      {
                        "name": "oldLen",
                        "nodeType": "YulIdentifier",
                        "src": "8545:6:3"
                      },
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "8553:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "clean_up_bytearray_end_slots_t_string_storage",
                      "nodeType": "YulIdentifier",
                      "src": "8493:45:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8493:67:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8493:67:3"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8570:18:3",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "8587:1:3",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulTypedName",
                      "src": "8574:9:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8598:17:3",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "8611:4:3",
                    "type": "",
                    "value": "0x20"
                  },
                  "variableNames": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulIdentifier",
                      "src": "8598:9:3"
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "8662:611:3",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "8676:37:3",
                            "value": {
                              "arguments": [
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "8695:6:3"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8707:4:3",
                                      "type": "",
                                      "value": "0x1f"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "8703:3:3"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8703:9:3"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "8691:3:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8691:22:3"
                            },
                            "variables": [
                              {
                                "name": "loopEnd",
                                "nodeType": "YulTypedName",
                                "src": "8680:7:3",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "8727:51:3",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "8773:4:3"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_t_string_storage",
                                "nodeType": "YulIdentifier",
                                "src": "8741:31:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8741:37:3"
                            },
                            "variables": [
                              {
                                "name": "dstPtr",
                                "nodeType": "YulTypedName",
                                "src": "8731:6:3",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "8791:10:3",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8800:1:3",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "8795:1:3",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "8859:163:3",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8884:6:3"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "src",
                                                "nodeType": "YulIdentifier",
                                                "src": "8902:3:3"
                                              },
                                              {
                                                "name": "srcOffset",
                                                "nodeType": "YulIdentifier",
                                                "src": "8907:9:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "8898:3:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8898:19:3"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "8892:5:3"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8892:26:3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "8877:6:3"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8877:42:3"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "8877:42:3"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "8936:24:3",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8950:6:3"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8958:1:3",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8946:3:3"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8946:14:3"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dstPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "8936:6:3"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "8977:31:3",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "srcOffset",
                                        "nodeType": "YulIdentifier",
                                        "src": "8994:9:3"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9005:2:3",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8990:3:3"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8990:18:3"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "srcOffset",
                                      "nodeType": "YulIdentifier",
                                      "src": "8977:9:3"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "8825:1:3"
                                },
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "8828:7:3"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "8822:2:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8822:14:3"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "8837:21:3",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "8839:17:3",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "8848:1:3"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8851:4:3",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8844:3:3"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8844:12:3"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "8839:1:3"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "8818:3:3",
                              "statements": []
                            },
                            "src": "8814:208:3"
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "9058:156:3",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "9076:43:3",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "9103:3:3"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "9108:9:3"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9099:3:3"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9099:19:3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "9093:5:3"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9093:26:3"
                                  },
                                  "variables": [
                                    {
                                      "name": "lastValue",
                                      "nodeType": "YulTypedName",
                                      "src": "9080:9:3",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "9143:6:3"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "lastValue",
                                            "nodeType": "YulIdentifier",
                                            "src": "9170:9:3"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "newLen",
                                                "nodeType": "YulIdentifier",
                                                "src": "9185:6:3"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9193:4:3",
                                                "type": "",
                                                "value": "0x1f"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "9181:3:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9181:17:3"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mask_bytes_dynamic",
                                          "nodeType": "YulIdentifier",
                                          "src": "9151:18:3"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9151:48:3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "9136:6:3"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9136:64:3"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "9136:64:3"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "9041:7:3"
                                },
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "9050:6:3"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "9038:2:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9038:19:3"
                            },
                            "nodeType": "YulIf",
                            "src": "9035:179:3"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "9234:4:3"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "newLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "9248:6:3"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9256:1:3",
                                          "type": "",
                                          "value": "2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mul",
                                        "nodeType": "YulIdentifier",
                                        "src": "9244:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9244:14:3"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "9260:1:3",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "9240:3:3"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9240:22:3"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "9227:6:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9227:36:3"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "9227:36:3"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "8655:618:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8660:1:3",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "9290:222:3",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "9304:14:3",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9317:1:3",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "9308:5:3",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "9341:67:3",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "9359:35:3",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "9378:3:3"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "9383:9:3"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9374:3:3"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9374:19:3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "9368:5:3"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9368:26:3"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "9359:5:3"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "name": "newLen",
                              "nodeType": "YulIdentifier",
                              "src": "9334:6:3"
                            },
                            "nodeType": "YulIf",
                            "src": "9331:77:3"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "9428:4:3"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "9487:5:3"
                                    },
                                    {
                                      "name": "newLen",
                                      "nodeType": "YulIdentifier",
                                      "src": "9494:6:3"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "extract_used_part_and_set_length_of_short_byte_array",
                                    "nodeType": "YulIdentifier",
                                    "src": "9434:52:3"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9434:67:3"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "9421:6:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9421:81:3"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "9421:81:3"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "9282:230:3",
                      "value": "default"
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "8635:6:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8643:2:3",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8632:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8632:14:3"
                  },
                  "nodeType": "YulSwitch",
                  "src": "8625:887:3"
                }
              ]
            },
            "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nodeType": "YulTypedName",
                "src": "8204:4:3",
                "type": ""
              },
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "8210:3:3",
                "type": ""
              }
            ],
            "src": "8123:1395:3"
          }
        ]
      },
      "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 revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_string_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n\n    function abi_decode_available_length_t_string_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_memory_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // string\n    function abi_decode_t_string_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_string_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function validator_revert_t_uint8(value) {\n        if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint8_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint8(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_string_memory_ptrt_string_memory_ptrt_uint8t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := mload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := mload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint8_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function array_dataslot_t_string_storage(ptr) -> data {\n        data := ptr\n\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n\n    }\n\n    function divide_by_32_ceil(value) -> result {\n        result := div(add(value, 31), 32)\n    }\n\n    function shift_left_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shl(bits, value)\n\n    }\n\n    function update_byte_slice_dynamic32(value, shiftBytes, toInsert) -> result {\n        let shiftBits := mul(shiftBytes, 8)\n        let mask := shift_left_dynamic(shiftBits, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        toInsert := shift_left_dynamic(shiftBits, toInsert)\n        value := and(value, not(mask))\n        result := or(value, and(toInsert, mask))\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint256_to_t_uint256(value) -> converted {\n        converted := cleanup_t_uint256(identity(cleanup_t_uint256(value)))\n    }\n\n    function prepare_store_t_uint256(value) -> ret {\n        ret := value\n    }\n\n    function update_storage_value_t_uint256_to_t_uint256(slot, offset, value_0) {\n        let convertedValue_0 := convert_t_uint256_to_t_uint256(value_0)\n        sstore(slot, update_byte_slice_dynamic32(sload(slot), offset, prepare_store_t_uint256(convertedValue_0)))\n    }\n\n    function zero_value_for_split_t_uint256() -> ret {\n        ret := 0\n    }\n\n    function storage_set_to_zero_t_uint256(slot, offset) {\n        let zero_0 := zero_value_for_split_t_uint256()\n        update_storage_value_t_uint256_to_t_uint256(slot, offset, zero_0)\n    }\n\n    function clear_storage_range_t_bytes1(start, end) {\n        for {} lt(start, end) { start := add(start, 1) }\n        {\n            storage_set_to_zero_t_uint256(start, 0)\n        }\n    }\n\n    function clean_up_bytearray_end_slots_t_string_storage(array, len, startIndex) {\n\n        if gt(len, 31) {\n            let dataArea := array_dataslot_t_string_storage(array)\n            let deleteStart := add(dataArea, divide_by_32_ceil(startIndex))\n            // If we are clearing array to be short byte array, we want to clear only data starting from array data area.\n            if lt(startIndex, 32) { deleteStart := dataArea }\n            clear_storage_range_t_bytes1(deleteStart, add(dataArea, divide_by_32_ceil(len)))\n        }\n\n    }\n\n    function shift_right_unsigned_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shr(bits, value)\n\n    }\n\n    function mask_bytes_dynamic(data, bytes) -> result {\n        let mask := not(shift_right_unsigned_dynamic(mul(8, bytes), not(0)))\n        result := and(data, mask)\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used {\n        // we want to save only elements that are part of the array after resizing\n        // others should be set to zero\n        data := mask_bytes_dynamic(data, len)\n        used := or(data, mul(2, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src) {\n\n        let newLen := array_length_t_string_memory_ptr(src)\n        // Make sure array length is sane\n        if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n\n        let oldLen := extract_byte_array_length(sload(slot))\n\n        // potentially truncate data\n        clean_up_bytearray_end_slots_t_string_storage(slot, oldLen, newLen)\n\n        let srcOffset := 0\n\n        srcOffset := 0x20\n\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(0x1f))\n\n            let dstPtr := array_dataslot_t_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, 0x20) } {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 32)\n            }\n            if lt(loopEnd, newLen) {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, mask_bytes_dynamic(lastValue, and(newLen, 0x1f)))\n            }\n            sstore(slot, add(mul(newLen, 2), 1))\n        }\n        default {\n            let value := 0\n            if newLen {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n\n}\n",
      "id": 3,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:9060:3",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "66:40:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "77:22:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "93:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "87:5:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "87:12:3"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "77:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "array_length_t_string_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "49:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "59:6:3",
                "type": ""
              }
            ],
            "src": "7:99:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "208:73:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "225:3:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "230:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "218:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "218:19:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "218:19:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "246:29:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "265:3:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "270:4:3",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "261:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "261:14:3"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "246:11:3"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "180:3:3",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "185:6:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "196:11:3",
                "type": ""
              }
            ],
            "src": "112:169:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "349:184:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "359:10:3",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "368:1:3",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "363:1:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "428:63:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "453:3:3"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "458:1:3"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "449:3:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "449:11:3"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "472:3:3"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "477:1:3"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "468:3:3"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "468:11:3"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "462:5:3"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "462:18:3"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "442:6:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "442:39:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "442:39:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "389:1:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "392:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "386:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "386:13:3"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "400:19:3",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "402:15:3",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "411:1:3"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "414:2:3",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "407:3:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "407:10:3"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "402:1:3"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "382:3:3",
                    "statements": []
                  },
                  "src": "378:113:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "511:3:3"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "516:6:3"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "507:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "507:16:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "525:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "500:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "500:27:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "500:27:3"
                }
              ]
            },
            "name": "copy_memory_to_memory_with_cleanup",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "331:3:3",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "336:3:3",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "341:6:3",
                "type": ""
              }
            ],
            "src": "287:246:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "587:54:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "597:38:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "615:5:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "622:2:3",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "611:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "611:14:3"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "631:2:3",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "627:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "627:7:3"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "607:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "607:28:3"
                  },
                  "variableNames": [
                    {
                      "name": "result",
                      "nodeType": "YulIdentifier",
                      "src": "597:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "round_up_to_mul_of_32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "570:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "result",
                "nodeType": "YulTypedName",
                "src": "580:6:3",
                "type": ""
              }
            ],
            "src": "539:102:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "739:285:3",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "749:53:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "796:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "array_length_t_string_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "763:32:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "763:39:3"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "753:6:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "811:78:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "877:3:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "882:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "818:58:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "818:71:3"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "811:3:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "937:5:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "944:4:3",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "933:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "933:16:3"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "951:3:3"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "956:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory_with_cleanup",
                      "nodeType": "YulIdentifier",
                      "src": "898:34:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "898:65:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "898:65:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "972:46:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "983:3:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "1010:6:3"
                          }
                        ],
                        "functionName": {
                          "name": "round_up_to_mul_of_32",
                          "nodeType": "YulIdentifier",
                          "src": "988:21:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "988:29:3"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "979:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "979:39:3"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "972:3:3"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "720:5:3",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "727:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "735:3:3",
                "type": ""
              }
            ],
            "src": "647:377:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1148:195:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1158:26:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1170:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1181:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1166:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1166:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1158:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1205:9:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1216:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1201:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1201:17:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "1224:4:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1230:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1220:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1220:20:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1194:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1194:47:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1194:47:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1250:86:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1322:6:3"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "1331:4:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "1258:63:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1258:78:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1250:4:3"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1120:9:3",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1132:6:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1143:4:3",
                "type": ""
              }
            ],
            "src": "1030:313:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1389:35:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1399:19:3",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1415:2:3",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1409:5:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1409:9:3"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "1399:6:3"
                    }
                  ]
                }
              ]
            },
            "name": "allocate_unbounded",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "1382:6:3",
                "type": ""
              }
            ],
            "src": "1349:75:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1519:28:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1536:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1539:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "1529:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1529:12:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1529:12:3"
                }
              ]
            },
            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
            "nodeType": "YulFunctionDefinition",
            "src": "1430:117:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1642:28:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1659:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1662:1:3",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "1652:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1652:12:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1652:12:3"
                }
              ]
            },
            "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
            "nodeType": "YulFunctionDefinition",
            "src": "1553:117:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1721:81:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1731:65:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1746:5:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1753:42:3",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "1742:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1742:54:3"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "1731:7:3"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1703:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "1713:7:3",
                "type": ""
              }
            ],
            "src": "1676:126:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1853:51:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1863:35:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1892:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "1874:17:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1874:24:3"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "1863:7:3"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1835:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "1845:7:3",
                "type": ""
              }
            ],
            "src": "1808:96:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1953:79:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2010:16:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2019:1:3",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2022:1:3",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2012:6:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2012:12:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2012:12:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1976:5:3"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2001:5:3"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_address",
                              "nodeType": "YulIdentifier",
                              "src": "1983:17:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1983:24:3"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "1973:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1973:35:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1966:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1966:43:3"
                  },
                  "nodeType": "YulIf",
                  "src": "1963:63:3"
                }
              ]
            },
            "name": "validator_revert_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1946:5:3",
                "type": ""
              }
            ],
            "src": "1910:122:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2090:87:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2100:29:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2122:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2109:12:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2109:20:3"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2100:5:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2165:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "2138:26:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2138:33:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2138:33:3"
                }
              ]
            },
            "name": "abi_decode_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2068:6:3",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2076:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2084:5:3",
                "type": ""
              }
            ],
            "src": "2038:139:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2228:32:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2238:16:3",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2249:5:3"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "2238:7:3"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2210:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "2220:7:3",
                "type": ""
              }
            ],
            "src": "2183:77:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2309:79:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2366:16:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2375:1:3",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2378:1:3",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2368:6:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2368:12:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2368:12:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2332:5:3"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2357:5:3"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "2339:17:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2339:24:3"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "2329:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2329:35:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2322:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2322:43:3"
                  },
                  "nodeType": "YulIf",
                  "src": "2319:63:3"
                }
              ]
            },
            "name": "validator_revert_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2302:5:3",
                "type": ""
              }
            ],
            "src": "2266:122:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2446:87:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2456:29:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2478:6:3"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2465:12:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2465:20:3"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2456:5:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2521:5:3"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "2494:26:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2494:33:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2494:33:3"
                }
              ]
            },
            "name": "abi_decode_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2424:6:3",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2432:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2440:5:3",
                "type": ""
              }
            ],
            "src": "2394:139:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2622:391:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2668:83:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "2670:77:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2670:79:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2670:79:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2643:7:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2652:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2639:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2639:23:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2664:2:3",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2635:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2635:32:3"
                  },
                  "nodeType": "YulIf",
                  "src": "2632:119:3"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2761:117:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2776:15:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2790:1:3",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2780:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2805:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2840:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2851:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2836:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2836:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2860:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "2815:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2815:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "2805:6:3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2888:118:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2903:16:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2917:2:3",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2907:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2933:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2968:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2979:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2964:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2964:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2988:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "2943:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2943:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "2933:6:3"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2584:9:3",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2595:7:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2607:6:3",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2615:6:3",
                "type": ""
              }
            ],
            "src": "2539:474:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3061:48:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3071:32:3",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3096:5:3"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "3089:6:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3089:13:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "3082:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3082:21:3"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "3071:7:3"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3043:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "3053:7:3",
                "type": ""
              }
            ],
            "src": "3019:90:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3174:50:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3191:3:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3211:5:3"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_bool",
                          "nodeType": "YulIdentifier",
                          "src": "3196:14:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3196:21:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3184:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3184:34:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3184:34:3"
                }
              ]
            },
            "name": "abi_encode_t_bool_to_t_bool_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3162:5:3",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3169:3:3",
                "type": ""
              }
            ],
            "src": "3115:109:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3322:118:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3332:26:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3344:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3355:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3340:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3340:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3332:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3406:6:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3419:9:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3430:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3415:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3415:17:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bool_to_t_bool_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "3368:37:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3368:65:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3368:65:3"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3294:9:3",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3306:6:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3317:4:3",
                "type": ""
              }
            ],
            "src": "3230:210:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3511:53:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3528:3:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3551:5:3"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "3533:17:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3533:24:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3521:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3521:37:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3521:37:3"
                }
              ]
            },
            "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3499:5:3",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3506:3:3",
                "type": ""
              }
            ],
            "src": "3446:118:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3668:124:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3678:26:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3690:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3701:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3686:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3686:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3678:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3758:6:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3771:9:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3782:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3767:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3767:17:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "3714:43:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3714:71:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3714:71:3"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3640:9:3",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3652:6:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3663:4:3",
                "type": ""
              }
            ],
            "src": "3570:222:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3898:519:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3944:83:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "3946:77:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3946:79:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3946:79:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3919:7:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3928:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3915:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3915:23:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3940:2:3",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3911:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3911:32:3"
                  },
                  "nodeType": "YulIf",
                  "src": "3908:119:3"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4037:117:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4052:15:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4066:1:3",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4056:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4081:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4116:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4127:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4112:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4112:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4136:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "4091:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4091:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "4081:6:3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4164:118:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4179:16:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4193:2:3",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4183:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4209:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4244:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4255:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4240:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4240:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4264:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "4219:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4219:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "4209:6:3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4292:118:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4307:16:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4321:2:3",
                        "type": "",
                        "value": "64"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4311:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4337:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4372:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4383:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4368:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4368:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4392:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "4347:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4347:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "4337:6:3"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3852:9:3",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3863:7:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3875:6:3",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3883:6:3",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3891:6:3",
                "type": ""
              }
            ],
            "src": "3798:619:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4466:43:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4476:27:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4491:5:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4498:4:3",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "4487:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4487:16:3"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "4476:7:3"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4448:5:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "4458:7:3",
                "type": ""
              }
            ],
            "src": "4423:86:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4576:51:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "4593:3:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "4614:5:3"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint8",
                          "nodeType": "YulIdentifier",
                          "src": "4598:15:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4598:22:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4586:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4586:35:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4586:35:3"
                }
              ]
            },
            "name": "abi_encode_t_uint8_to_t_uint8_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4564:5:3",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "4571:3:3",
                "type": ""
              }
            ],
            "src": "4515:112:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4727:120:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4737:26:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4749:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4760:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4745:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4745:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4737:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "4813:6:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4826:9:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4837:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4822:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4822:17:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint8_to_t_uint8_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "4773:39:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4773:67:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4773:67:3"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4699:9:3",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4711:6:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4722:4:3",
                "type": ""
              }
            ],
            "src": "4633:214:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4919:263:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4965:83:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "4967:77:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4967:79:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4967:79:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4940:7:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4949:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4936:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4936:23:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4961:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4932:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4932:32:3"
                  },
                  "nodeType": "YulIf",
                  "src": "4929:119:3"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5058:117:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5073:15:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5087:1:3",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5077:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5102:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5137:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5148:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5133:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5133:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5157:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "5112:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5112:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "5102:6:3"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4889:9:3",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4900:7:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4912:6:3",
                "type": ""
              }
            ],
            "src": "4853:329:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5253:53:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "5270:3:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "5293:5:3"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "5275:17:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5275:24:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5263:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5263:37:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5263:37:3"
                }
              ]
            },
            "name": "abi_encode_t_address_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5241:5:3",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "5248:3:3",
                "type": ""
              }
            ],
            "src": "5188:118:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5410:124:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5420:26:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5432:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5443:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5428:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5428:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5420:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "5500:6:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5513:9:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5524:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5509:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5509:17:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "5456:43:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5456:71:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5456:71:3"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5382:9:3",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5394:6:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5405:4:3",
                "type": ""
              }
            ],
            "src": "5312:222:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5623:391:3",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5669:83:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                            "nodeType": "YulIdentifier",
                            "src": "5671:77:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5671:79:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5671:79:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5644:7:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5653:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5640:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5640:23:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5665:2:3",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5636:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5636:32:3"
                  },
                  "nodeType": "YulIf",
                  "src": "5633:119:3"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5762:117:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5777:15:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5791:1:3",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5781:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5806:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5841:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5852:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5837:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5837:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5861:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "5816:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5816:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "5806:6:3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5889:118:3",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5904:16:3",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5918:2:3",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5908:6:3",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5934:63:3",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5969:9:3"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5980:6:3"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5965:3:3"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5965:22:3"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5989:7:3"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "5944:20:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5944:53:3"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "5934:6:3"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5585:9:3",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5596:7:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5608:6:3",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5616:6:3",
                "type": ""
              }
            ],
            "src": "5540:474:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6048:152:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6065:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6068:77:3",
                        "type": "",
                        "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6058:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6058:88:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6058:88:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6162:1:3",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6165:4:3",
                        "type": "",
                        "value": "0x22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6155:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6155:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6155:15:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6186:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6189:4:3",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "6179:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6179:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6179:15:3"
                }
              ]
            },
            "name": "panic_error_0x22",
            "nodeType": "YulFunctionDefinition",
            "src": "6020:180:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6257:269:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6267:22:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "6281:4:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6287:1:3",
                        "type": "",
                        "value": "2"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "6277:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6277:12:3"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "6267:6:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6298:38:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "6328:4:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6334:1:3",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "6324:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6324:12:3"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nodeType": "YulTypedName",
                      "src": "6302:18:3",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6375:51:3",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6389:27:3",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nodeType": "YulIdentifier",
                              "src": "6403:6:3"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6411:4:3",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "6399:3:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6399:17:3"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "6389:6:3"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "6355:18:3"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "6348:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6348:26:3"
                  },
                  "nodeType": "YulIf",
                  "src": "6345:81:3"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6478:42:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x22",
                            "nodeType": "YulIdentifier",
                            "src": "6492:16:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6492:18:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6492:18:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "6442:18:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "6465:6:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6473:2:3",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "6462:2:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6462:14:3"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "6439:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6439:38:3"
                  },
                  "nodeType": "YulIf",
                  "src": "6436:84:3"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "6241:4:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "6250:6:3",
                "type": ""
              }
            ],
            "src": "6206:320:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6638:64:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "6660:6:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6668:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6656:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6656:14:3"
                      },
                      {
                        "hexValue": "496e73756666696369656e742062616c616e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6672:22:3",
                        "type": "",
                        "value": "Insufficient balance"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6649:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6649:46:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6649:46:3"
                }
              ]
            },
            "name": "store_literal_in_memory_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "6630:6:3",
                "type": ""
              }
            ],
            "src": "6532:170:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6854:220:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6864:74:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6930:3:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6935:2:3",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "6871:58:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6871:67:3"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "6864:3:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7036:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "store_literal_in_memory_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5",
                      "nodeType": "YulIdentifier",
                      "src": "6947:88:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6947:93:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6947:93:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7049:19:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7060:3:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7065:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7056:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7056:12:3"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "7049:3:3"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "6842:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "6850:3:3",
                "type": ""
              }
            ],
            "src": "6708:366:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7251:248:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7261:26:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7273:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7284:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7269:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7269:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7261:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7308:9:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7319:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7304:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7304:17:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "7327:4:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7333:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7323:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7323:20:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7297:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7297:47:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7297:47:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7353:139:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "7487:4:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "7361:124:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7361:131:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7353:4:3"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7231:9:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7246:4:3",
                "type": ""
              }
            ],
            "src": "7080:419:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7611:66:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "7633:6:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7641:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7629:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7629:14:3"
                      },
                      {
                        "hexValue": "496e73756666696369656e7420616c6c6f77616e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7645:24:3",
                        "type": "",
                        "value": "Insufficient allowance"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7622:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7622:48:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7622:48:3"
                }
              ]
            },
            "name": "store_literal_in_memory_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "7603:6:3",
                "type": ""
              }
            ],
            "src": "7505:172:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7829:220:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7839:74:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7905:3:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7910:2:3",
                        "type": "",
                        "value": "22"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "7846:58:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7846:67:3"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "7839:3:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8011:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "store_literal_in_memory_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc",
                      "nodeType": "YulIdentifier",
                      "src": "7922:88:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7922:93:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7922:93:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8024:19:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8035:3:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8040:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8031:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8031:12:3"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "8024:3:3"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "7817:3:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7825:3:3",
                "type": ""
              }
            ],
            "src": "7683:366:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8226:248:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8236:26:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8248:9:3"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8259:2:3",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8244:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8244:18:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8236:4:3"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8283:9:3"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8294:1:3",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8279:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8279:17:3"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "8302:4:3"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8308:9:3"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8298:3:3"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8298:20:3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8272:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8272:47:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8272:47:3"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8328:139:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "8462:4:3"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "8336:124:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8336:131:3"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8328:4:3"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8206:9:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8221:4:3",
                "type": ""
              }
            ],
            "src": "8055:419:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8508:152:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8525:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8528:77:3",
                        "type": "",
                        "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8518:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8518:88:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8518:88:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8622:1:3",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8625:4:3",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8615:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8615:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8615:15:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8646:1:3",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8649:4:3",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "8639:6:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8639:15:3"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8639:15:3"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "8480:180:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8711:149:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8721:25:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8744:1:3"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "8726:17:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8726:20:3"
                  },
                  "variableNames": [
                    {
                      "name": "x",
                      "nodeType": "YulIdentifier",
                      "src": "8721:1:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8755:25:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "8778:1:3"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "8760:17:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8760:20:3"
                  },
                  "variableNames": [
                    {
                      "name": "y",
                      "nodeType": "YulIdentifier",
                      "src": "8755:1:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8789:17:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8801:1:3"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "8804:1:3"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "8797:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8797:9:3"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "8789:4:3"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8831:22:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "8833:16:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8833:18:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8833:18:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "diff",
                        "nodeType": "YulIdentifier",
                        "src": "8822:4:3"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8828:1:3"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8819:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8819:11:3"
                  },
                  "nodeType": "YulIf",
                  "src": "8816:37:3"
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "8697:1:3",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "8700:1:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "8706:4:3",
                "type": ""
              }
            ],
            "src": "8666:194:3"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8910:147:3",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8920:25:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8943:1:3"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "8925:17:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8925:20:3"
                  },
                  "variableNames": [
                    {
                      "name": "x",
                      "nodeType": "YulIdentifier",
                      "src": "8920:1:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8954:25:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "8977:1:3"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "8959:17:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8959:20:3"
                  },
                  "variableNames": [
                    {
                      "name": "y",
                      "nodeType": "YulIdentifier",
                      "src": "8954:1:3"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8988:16:3",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8999:1:3"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9002:1:3"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8995:3:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8995:9:3"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "8988:3:3"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9028:22:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9030:16:3"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9030:18:3"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9030:18:3"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9020:1:3"
                      },
                      {
                        "name": "sum",
                        "nodeType": "YulIdentifier",
                        "src": "9023:3:3"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "9017:2:3"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9017:10:3"
                  },
                  "nodeType": "YulIf",
                  "src": "9014:36:3"
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "8897:1:3",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "8900:1:3",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "8906:3:3",
                "type": ""
              }
            ],
            "src": "8866:191:3"
          }
        ]
      },
      "contents": "{\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\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 copy_memory_to_memory_with_cleanup(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\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 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(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(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(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\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 abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { 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            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\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 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 abi_decode_tuple_t_addresst_address(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(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function store_literal_in_memory_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5(memPtr) {\n\n        mstore(add(memPtr, 0), \"Insufficient balance\")\n\n    }\n\n    function abi_encode_t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 20)\n        store_literal_in_memory_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5__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_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc(memPtr) {\n\n        mstore(add(memPtr, 0), \"Insufficient allowance\")\n\n    }\n\n    function abi_encode_t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 22)\n        store_literal_in_memory_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc__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_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc_to_t_string_memory_ptr_fromStack( tail)\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 checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n}\n",
      "id": 3,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "82:3240:2:-:0;;;499:513;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;744:9;736:5;:17;;;;;;:::i;:::-;;773:11;763:7;:21;;;;;;:::i;:::-;;806:13;794:9;;:25;;;;;;;;;;;;;;;;;;844:16;829:12;:31;;;;878:10;870:5;;:18;;;;;;;;;;;;;;;;;;989:16;970:9;:16;980:5;;;;;;;;;;;970:16;;;;;;;;;;;;;;;:35;;;;499:513;;;;82:3240;;7:75:3;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:102;621:6;672:2;668:7;663:2;656:5;652:14;648:28;638:38;;580:102;;;:::o;688:180::-;736:77;733:1;726:88;833:4;830:1;823:15;857:4;854:1;847:15;874:281;957:27;979:4;957:27;:::i;:::-;949:6;945:40;1087:6;1075:10;1072:22;1051:18;1039:10;1036:34;1033:62;1030:88;;;1098:18;;:::i;:::-;1030:88;1138:10;1134:2;1127:22;917:238;874:281;;:::o;1161:129::-;1195:6;1222:20;;:::i;:::-;1212:30;;1251:33;1279:4;1271:6;1251:33;:::i;:::-;1161:129;;;:::o;1296:308::-;1358:4;1448:18;1440:6;1437:30;1434:56;;;1470:18;;:::i;:::-;1434:56;1508:29;1530:6;1508:29;:::i;:::-;1500:37;;1592:4;1586;1582:15;1574:23;;1296:308;;;:::o;1610:246::-;1691:1;1701:113;1715:6;1712:1;1709:13;1701:113;;;1800:1;1795:3;1791:11;1785:18;1781:1;1776:3;1772:11;1765:39;1737:2;1734:1;1730:10;1725:15;;1701:113;;;1848:1;1839:6;1834:3;1830:16;1823:27;1672:184;1610:246;;;:::o;1862:434::-;1951:5;1976:66;1992:49;2034:6;1992:49;:::i;:::-;1976:66;:::i;:::-;1967:75;;2065:6;2058:5;2051:21;2103:4;2096:5;2092:16;2141:3;2132:6;2127:3;2123:16;2120:25;2117:112;;;2148:79;;:::i;:::-;2117:112;2238:52;2283:6;2278:3;2273;2238:52;:::i;:::-;1957:339;1862:434;;;;;:::o;2316:355::-;2383:5;2432:3;2425:4;2417:6;2413:17;2409:27;2399:122;;2440:79;;:::i;:::-;2399:122;2550:6;2544:13;2575:90;2661:3;2653:6;2646:4;2638:6;2634:17;2575:90;:::i;:::-;2566:99;;2389:282;2316:355;;;;:::o;2677:86::-;2712:7;2752:4;2745:5;2741:16;2730:27;;2677:86;;;:::o;2769:118::-;2840:22;2856:5;2840:22;:::i;:::-;2833:5;2830:33;2820:61;;2877:1;2874;2867:12;2820:61;2769:118;:::o;2893:139::-;2948:5;2979:6;2973:13;2964:22;;2995:31;3020:5;2995:31;:::i;:::-;2893:139;;;;:::o;3038:77::-;3075:7;3104:5;3093:16;;3038:77;;;:::o;3121:122::-;3194:24;3212:5;3194:24;:::i;:::-;3187:5;3184:35;3174:63;;3233:1;3230;3223:12;3174:63;3121:122;:::o;3249:143::-;3306:5;3337:6;3331:13;3322:22;;3353:33;3380:5;3353:33;:::i;:::-;3249:143;;;;:::o;3398:1162::-;3513:6;3521;3529;3537;3586:3;3574:9;3565:7;3561:23;3557:33;3554:120;;;3593:79;;:::i;:::-;3554:120;3734:1;3723:9;3719:17;3713:24;3764:18;3756:6;3753:30;3750:117;;;3786:79;;:::i;:::-;3750:117;3891:74;3957:7;3948:6;3937:9;3933:22;3891:74;:::i;:::-;3881:84;;3684:291;4035:2;4024:9;4020:18;4014:25;4066:18;4058:6;4055:30;4052:117;;;4088:79;;:::i;:::-;4052:117;4193:74;4259:7;4250:6;4239:9;4235:22;4193:74;:::i;:::-;4183:84;;3985:292;4316:2;4342:62;4396:7;4387:6;4376:9;4372:22;4342:62;:::i;:::-;4332:72;;4287:127;4453:2;4479:64;4535:7;4526:6;4515:9;4511:22;4479:64;:::i;:::-;4469:74;;4424:129;3398:1162;;;;;;;:::o;4566:99::-;4618:6;4652:5;4646:12;4636:22;;4566:99;;;:::o;4671:180::-;4719:77;4716:1;4709:88;4816:4;4813:1;4806:15;4840:4;4837:1;4830:15;4857:320;4901:6;4938:1;4932:4;4928:12;4918:22;;4985:1;4979:4;4975:12;5006:18;4996:81;;5062:4;5054:6;5050:17;5040:27;;4996:81;5124:2;5116:6;5113:14;5093:18;5090:38;5087:84;;5143:18;;:::i;:::-;5087:84;4908:269;4857:320;;;:::o;5183:141::-;5232:4;5255:3;5247:11;;5278:3;5275:1;5268:14;5312:4;5309:1;5299:18;5291:26;;5183:141;;;:::o;5330:93::-;5367:6;5414:2;5409;5402:5;5398:14;5394:23;5384:33;;5330:93;;;:::o;5429:107::-;5473:8;5523:5;5517:4;5513:16;5492:37;;5429:107;;;;:::o;5542:393::-;5611:6;5661:1;5649:10;5645:18;5684:97;5714:66;5703:9;5684:97;:::i;:::-;5802:39;5832:8;5821:9;5802:39;:::i;:::-;5790:51;;5874:4;5870:9;5863:5;5859:21;5850:30;;5923:4;5913:8;5909:19;5902:5;5899:30;5889:40;;5618:317;;5542:393;;;;;:::o;5941:60::-;5969:3;5990:5;5983:12;;5941:60;;;:::o;6007:142::-;6057:9;6090:53;6108:34;6117:24;6135:5;6117:24;:::i;:::-;6108:34;:::i;:::-;6090:53;:::i;:::-;6077:66;;6007:142;;;:::o;6155:75::-;6198:3;6219:5;6212:12;;6155:75;;;:::o;6236:269::-;6346:39;6377:7;6346:39;:::i;:::-;6407:91;6456:41;6480:16;6456:41;:::i;:::-;6448:6;6441:4;6435:11;6407:91;:::i;:::-;6401:4;6394:105;6312:193;6236:269;;;:::o;6511:73::-;6556:3;6511:73;:::o;6590:189::-;6667:32;;:::i;:::-;6708:65;6766:6;6758;6752:4;6708:65;:::i;:::-;6643:136;6590:189;;:::o;6785:186::-;6845:120;6862:3;6855:5;6852:14;6845:120;;;6916:39;6953:1;6946:5;6916:39;:::i;:::-;6889:1;6882:5;6878:13;6869:22;;6845:120;;;6785:186;;:::o;6977:543::-;7078:2;7073:3;7070:11;7067:446;;;7112:38;7144:5;7112:38;:::i;:::-;7196:29;7214:10;7196:29;:::i;:::-;7186:8;7182:44;7379:2;7367:10;7364:18;7361:49;;;7400:8;7385:23;;7361:49;7423:80;7479:22;7497:3;7479:22;:::i;:::-;7469:8;7465:37;7452:11;7423:80;:::i;:::-;7082:431;;7067:446;6977:543;;;:::o;7526:117::-;7580:8;7630:5;7624:4;7620:16;7599:37;;7526:117;;;;:::o;7649:169::-;7693:6;7726:51;7774:1;7770:6;7762:5;7759:1;7755:13;7726:51;:::i;:::-;7722:56;7807:4;7801;7797:15;7787:25;;7700:118;7649:169;;;;:::o;7823:295::-;7899:4;8045:29;8070:3;8064:4;8045:29;:::i;:::-;8037:37;;8107:3;8104:1;8100:11;8094:4;8091:21;8083:29;;7823:295;;;;:::o;8123:1395::-;8240:37;8273:3;8240:37;:::i;:::-;8342:18;8334:6;8331:30;8328:56;;;8364:18;;:::i;:::-;8328:56;8408:38;8440:4;8434:11;8408:38;:::i;:::-;8493:67;8553:6;8545;8539:4;8493:67;:::i;:::-;8587:1;8611:4;8598:17;;8643:2;8635:6;8632:14;8660:1;8655:618;;;;9317:1;9334:6;9331:77;;;9383:9;9378:3;9374:19;9368:26;9359:35;;9331:77;9434:67;9494:6;9487:5;9434:67;:::i;:::-;9428:4;9421:81;9290:222;8625:887;;8655:618;8707:4;8703:9;8695:6;8691:22;8741:37;8773:4;8741:37;:::i;:::-;8800:1;8814:208;8828:7;8825:1;8822:14;8814:208;;;8907:9;8902:3;8898:19;8892:26;8884:6;8877:42;8958:1;8950:6;8946:14;8936:24;;9005:2;8994:9;8990:18;8977:31;;8851:4;8848:1;8844:12;8839:17;;8814:208;;;9050:6;9041:7;9038:19;9035:179;;;9108:9;9103:3;9099:19;9093:26;9151:48;9193:4;9185:6;9181:17;9170:9;9151:48;:::i;:::-;9143:6;9136:64;9058:156;9035:179;9260:1;9256;9248:6;9244:14;9240:22;9234:4;9227:36;8662:611;;;8625:887;;8215:1303;;;8123:1395;;:::o;82:3240:2:-;;;;;;;",
  "deployedSourceMap": "82:3240:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1018:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1316:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2077:727;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1218:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1422:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;453:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1116:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1589:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3128:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1018:92;1066:13;1098:5;1091:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1018:92;:::o;2810:312::-;2912:12;3005:6;2970:10;:22;2981:10;2970:22;;;;;;;;;;;;;;;:32;2993:8;2970:32;;;;;;;;;;;;;;;:41;;;;3077:8;3056:38;;3065:10;3056:38;;;3087:6;3056:38;;;;;;:::i;:::-;;;;;;;;3111:4;3104:11;;2810:312;;;;:::o;1316:100::-;1371:7;1397:12;;1390:19;;1316:100;:::o;2077:727::-;2200:12;2297:6;2277:9;:16;2287:5;2277:16;;;;;;;;;;;;;;;;:26;;2269:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;2434:6;2401:10;:17;2412:5;2401:17;;;;;;;;;;;;;;;:29;2419:10;2401:29;;;;;;;;;;;;;;;;:39;;2380:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;2551:6;2531:9;:16;2541:5;2531:16;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;2618:6;2600:9;:14;2610:3;2600:14;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;2697:6;2664:10;:17;2675:5;2664:17;;;;;;;;;;;;;;;:29;2682:10;2664:29;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;2764:3;2748:28;;2757:5;2748:28;;;2769:6;2748:28;;;;;;:::i;:::-;;;;;;;;2793:4;2786:11;;2077:727;;;;;:::o;1218:92::-;1270:5;1294:9;;;;;;;;;;;1287:16;;1218:92;:::o;1422:161::-;1521:15;1559:9;:17;1569:6;1559:17;;;;;;;;;;;;;;;;1552:24;;1422:161;;;:::o;453:20::-;;;;;;;;;;;;;:::o;1116:96::-;1166:13;1198:7;1191:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1116:96;:::o;1589:482::-;1687:12;1793:6;1768:9;:21;1778:10;1768:21;;;;;;;;;;;;;;;;:31;;1760:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;1892:6;1867:9;:21;1877:10;1867:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;1959:6;1941:9;:14;1951:3;1941:14;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;2031:3;2010:33;;2019:10;2010:33;;;2036:6;2010:33;;;;;;:::i;:::-;;;;;;;;2060:4;2053:11;;1589:482;;;;:::o;3128:192::-;3245:17;3285:10;:18;3296:6;3285:18;;;;;;;;;;;;;;;:28;3304:8;3285:28;;;;;;;;;;;;;;;;3278:35;;3128:192;;;;:::o;7:99:3:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:474::-;5608:6;5616;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5762:117;5918:2;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5889:118;5540:474;;;;;:::o;6020:180::-;6068:77;6065:1;6058:88;6165:4;6162:1;6155:15;6189:4;6186:1;6179:15;6206:320;6250:6;6287:1;6281:4;6277:12;6267:22;;6334:1;6328:4;6324:12;6355:18;6345:81;;6411:4;6403:6;6399:17;6389:27;;6345:81;6473:2;6465:6;6462:14;6442:18;6439:38;6436:84;;6492:18;;:::i;:::-;6436:84;6257:269;6206:320;;;:::o;6532:170::-;6672:22;6668:1;6660:6;6656:14;6649:46;6532:170;:::o;6708:366::-;6850:3;6871:67;6935:2;6930:3;6871:67;:::i;:::-;6864:74;;6947:93;7036:3;6947:93;:::i;:::-;7065:2;7060:3;7056:12;7049:19;;6708:366;;;:::o;7080:419::-;7246:4;7284:2;7273:9;7269:18;7261:26;;7333:9;7327:4;7323:20;7319:1;7308:9;7304:17;7297:47;7361:131;7487:4;7361:131;:::i;:::-;7353:139;;7080:419;;;:::o;7505:172::-;7645:24;7641:1;7633:6;7629:14;7622:48;7505:172;:::o;7683:366::-;7825:3;7846:67;7910:2;7905:3;7846:67;:::i;:::-;7839:74;;7922:93;8011:3;7922:93;:::i;:::-;8040:2;8035:3;8031:12;8024:19;;7683:366;;;:::o;8055:419::-;8221:4;8259:2;8248:9;8244:18;8236:26;;8308:9;8302:4;8298:20;8294:1;8283:9;8279:17;8272:47;8336:131;8462:4;8336:131;:::i;:::-;8328:139;;8055:419;;;:::o;8480:180::-;8528:77;8525:1;8518:88;8625:4;8622:1;8615:15;8649:4;8646:1;8639:15;8666:194;8706:4;8726:20;8744:1;8726:20;:::i;:::-;8721:25;;8760:20;8778:1;8760:20;:::i;:::-;8755:25;;8804:1;8801;8797:9;8789:17;;8828:1;8822:4;8819:11;8816:37;;;8833:18;;:::i;:::-;8816:37;8666:194;;;;:::o;8866:191::-;8906:3;8925:20;8943:1;8925:20;:::i;:::-;8920:25;;8959:20;8977:1;8959:20;:::i;:::-;8954:25;;9002:1;8999;8995:9;8988:16;;9023:3;9020:1;9017:10;9014:36;;;9030:18;;:::i;:::-;9014:36;8866:191;;;;:::o",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20.sol\";\n\ncontract NoahToken is IERC20 {\n    string private _name; // 代币名称\n    string private _symbol; // 代币代号\n    uint8 private _decimals; // 代币精度\n    uint256 private _totalSupply; // 代币发行总量\n    mapping(address => uint256) private _balances; // 账本\n    mapping(address => mapping(address => uint256)) private _allowance; // 授权记录\n    address public owner; // 合约发布者\n\n    constructor(\n        string memory _initName,\n        string memory _initSymbol,\n        uint8 _initDecimals,\n        uint256 _initTotalSupply\n    ) {\n        // 发布合约时设置代币名称、代号、精度和发行总量\n        _name = _initName;\n        _symbol = _initSymbol;\n        _decimals = _initDecimals;\n        _totalSupply = _initTotalSupply;\n        owner = msg.sender;\n        // 在合约部署时把所有的代币发行给合约发布者\n        _balances[owner] = _initTotalSupply;\n    }\n\n    function name() external view override returns (string memory) {\n        return _name;\n    }\n\n    function symbol() external view override returns (string memory) {\n        return _symbol;\n    }\n\n    function decimals() external view override returns (uint8) {\n        return _decimals;\n    }\n\n    function totalSupply() external view override returns (uint256) {\n        return _totalSupply;\n    }\n\n    function balanceOf(address _owner)\n        external\n        view\n        override\n        returns (uint256 balance)\n    {\n        return _balances[_owner];\n    }\n\n    function transfer(address _to, uint256 _value)\n        external\n        override\n        returns (bool success)\n    {\n        // 检查发送者余额是否足够\n        require(_balances[msg.sender] >= _value, \"Insufficient balance\");\n        // 扣除发送者余额\n        _balances[msg.sender] -= _value;\n        // 增加接收者余额\n        _balances[_to] += _value;\n        // 触发转账事件\n        emit Transfer(msg.sender, _to, _value);\n        return true;\n    }\n\n    function transferFrom(\n        address _from,\n        address _to,\n        uint256 _value\n    ) external override returns (bool success) {\n        // 检查发送者余额是否足够\n        require(_balances[_from] >= _value, \"Insufficient balance\");\n        // 检查授权额度是否足够\n        require(\n            _allowance[_from][msg.sender] >= _value,\n            \"Insufficient allowance\"\n        );\n        // 扣除发送者余额\n        _balances[_from] -= _value;\n        // 增加接收者余额\n        _balances[_to] += _value;\n        // 扣除授权额度\n        _allowance[_from][msg.sender] -= _value;\n        // 触发转账事件\n        emit Transfer(_from, _to, _value);\n        return true;\n    }\n\n    function approve(address _spender, uint256 _value)\n        external\n        override\n        returns (bool success)\n    {\n        // 设置授权额度\n        _allowance[msg.sender][_spender] = _value;\n        // 触发授权事件\n        emit Approval(msg.sender, _spender, _value);\n        return true;\n    }\n\n    function allowance(address _owner, address _spender)\n        external\n        view\n        override\n        returns (uint256 remaining)\n    {\n        return _allowance[_owner][_spender];\n    }\n}\n",
  "sourcePath": "/Users/luzhenqian/Work/web3/web3-examples/contract/noah-token/contracts/NoahToken.sol",
  "ast": {
    "absolutePath": "project:/contracts/NoahToken.sol",
    "exportedSymbols": {
      "IERC20": [
        185
      ],
      "NoahToken": [
        451
      ]
    },
    "id": 452,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 187,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:23:2"
      },
      {
        "absolutePath": "project:/contracts/IERC20.sol",
        "file": "./IERC20.sol",
        "id": 188,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 452,
        "sourceUnit": 186,
        "src": "58:22:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 189,
              "name": "IERC20",
              "nameLocations": [
                "104:6:2"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 185,
              "src": "104:6:2"
            },
            "id": 190,
            "nodeType": "InheritanceSpecifier",
            "src": "104:6:2"
          }
        ],
        "canonicalName": "NoahToken",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 451,
        "linearizedBaseContracts": [
          451,
          185
        ],
        "name": "NoahToken",
        "nameLocation": "91:9:2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 192,
            "mutability": "mutable",
            "name": "_name",
            "nameLocation": "132:5:2",
            "nodeType": "VariableDeclaration",
            "scope": 451,
            "src": "117:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 191,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "117:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 194,
            "mutability": "mutable",
            "name": "_symbol",
            "nameLocation": "174:7:2",
            "nodeType": "VariableDeclaration",
            "scope": 451,
            "src": "159:22:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 193,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "159:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 196,
            "mutability": "mutable",
            "name": "_decimals",
            "nameLocation": "217:9:2",
            "nodeType": "VariableDeclaration",
            "scope": 451,
            "src": "203:23:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 195,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "203:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 198,
            "mutability": "mutable",
            "name": "_totalSupply",
            "nameLocation": "264:12:2",
            "nodeType": "VariableDeclaration",
            "scope": 451,
            "src": "248:28:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 197,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "248:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 202,
            "mutability": "mutable",
            "name": "_balances",
            "nameLocation": "340:9:2",
            "nodeType": "VariableDeclaration",
            "scope": 451,
            "src": "304:45:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 201,
              "keyType": {
                "id": 199,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "312:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "304:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 200,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "323:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 208,
            "mutability": "mutable",
            "name": "_allowance",
            "nameLocation": "421:10:2",
            "nodeType": "VariableDeclaration",
            "scope": 451,
            "src": "365:66:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 207,
              "keyType": {
                "id": 203,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "373:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "365:47:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueType": {
                "id": 206,
                "keyType": {
                  "id": 204,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "392:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "384:27:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 205,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "403:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 210,
            "mutability": "mutable",
            "name": "owner",
            "nameLocation": "468:5:2",
            "nodeType": "VariableDeclaration",
            "scope": 451,
            "src": "453:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 209,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "453:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 248,
              "nodeType": "Block",
              "src": "648:364:2",
              "statements": [
                {
                  "expression": {
                    "id": 223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 221,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 192,
                      "src": "736:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 222,
                      "name": "_initName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 212,
                      "src": "744:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "736:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 224,
                  "nodeType": "ExpressionStatement",
                  "src": "736:17:2"
                },
                {
                  "expression": {
                    "id": 227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 225,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 194,
                      "src": "763:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 226,
                      "name": "_initSymbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 214,
                      "src": "773:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "763:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 228,
                  "nodeType": "ExpressionStatement",
                  "src": "763:21:2"
                },
                {
                  "expression": {
                    "id": 231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 229,
                      "name": "_decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 196,
                      "src": "794:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 230,
                      "name": "_initDecimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 216,
                      "src": "806:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "794:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 232,
                  "nodeType": "ExpressionStatement",
                  "src": "794:25:2"
                },
                {
                  "expression": {
                    "id": 235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 233,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 198,
                      "src": "829:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 234,
                      "name": "_initTotalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 218,
                      "src": "844:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "829:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 236,
                  "nodeType": "ExpressionStatement",
                  "src": "829:31:2"
                },
                {
                  "expression": {
                    "id": 240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 237,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 210,
                      "src": "870:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 238,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "878:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "882:6:2",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "878:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "870:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 241,
                  "nodeType": "ExpressionStatement",
                  "src": "870:18:2"
                },
                {
                  "expression": {
                    "id": 246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 242,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 202,
                        "src": "970:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 244,
                      "indexExpression": {
                        "id": 243,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 210,
                        "src": "980:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "970:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 245,
                      "name": "_initTotalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 218,
                      "src": "989:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "970:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 247,
                  "nodeType": "ExpressionStatement",
                  "src": "970:35:2"
                }
              ]
            },
            "id": 249,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 212,
                  "mutability": "mutable",
                  "name": "_initName",
                  "nameLocation": "534:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 249,
                  "src": "520:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 211,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "520:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 214,
                  "mutability": "mutable",
                  "name": "_initSymbol",
                  "nameLocation": "567:11:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 249,
                  "src": "553:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 213,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "553:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 216,
                  "mutability": "mutable",
                  "name": "_initDecimals",
                  "nameLocation": "594:13:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 249,
                  "src": "588:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 215,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "588:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 218,
                  "mutability": "mutable",
                  "name": "_initTotalSupply",
                  "nameLocation": "625:16:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 249,
                  "src": "617:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "617:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "510:137:2"
            },
            "returnParameters": {
              "id": 220,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "648:0:2"
            },
            "scope": 451,
            "src": "499:513:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              108
            ],
            "body": {
              "id": 257,
              "nodeType": "Block",
              "src": "1081:29:2",
              "statements": [
                {
                  "expression": {
                    "id": 255,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 192,
                    "src": "1098:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 254,
                  "id": 256,
                  "nodeType": "Return",
                  "src": "1091:12:2"
                }
              ]
            },
            "functionSelector": "06fdde03",
            "id": 258,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nameLocation": "1027:4:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 251,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1048:8:2"
            },
            "parameters": {
              "id": 250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1031:2:2"
            },
            "returnParameters": {
              "id": 254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 253,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1066:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 252,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1066:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1065:15:2"
            },
            "scope": 451,
            "src": "1018:92:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              113
            ],
            "body": {
              "id": 266,
              "nodeType": "Block",
              "src": "1181:31:2",
              "statements": [
                {
                  "expression": {
                    "id": 264,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 194,
                    "src": "1198:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 263,
                  "id": 265,
                  "nodeType": "Return",
                  "src": "1191:14:2"
                }
              ]
            },
            "functionSelector": "95d89b41",
            "id": 267,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nameLocation": "1125:6:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 260,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1148:8:2"
            },
            "parameters": {
              "id": 259,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1131:2:2"
            },
            "returnParameters": {
              "id": 263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 262,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 267,
                  "src": "1166:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 261,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1166:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1165:15:2"
            },
            "scope": 451,
            "src": "1116:96:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              118
            ],
            "body": {
              "id": 275,
              "nodeType": "Block",
              "src": "1277:33:2",
              "statements": [
                {
                  "expression": {
                    "id": 273,
                    "name": "_decimals",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 196,
                    "src": "1294:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 272,
                  "id": 274,
                  "nodeType": "Return",
                  "src": "1287:16:2"
                }
              ]
            },
            "functionSelector": "313ce567",
            "id": 276,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nameLocation": "1227:8:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 269,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1252:8:2"
            },
            "parameters": {
              "id": 268,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1235:2:2"
            },
            "returnParameters": {
              "id": 272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 271,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 276,
                  "src": "1270:5:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 270,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1270:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1269:7:2"
            },
            "scope": 451,
            "src": "1218:92:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              123
            ],
            "body": {
              "id": 284,
              "nodeType": "Block",
              "src": "1380:36:2",
              "statements": [
                {
                  "expression": {
                    "id": 282,
                    "name": "_totalSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 198,
                    "src": "1397:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 281,
                  "id": 283,
                  "nodeType": "Return",
                  "src": "1390:19:2"
                }
              ]
            },
            "functionSelector": "18160ddd",
            "id": 285,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "1325:11:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 278,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1353:8:2"
            },
            "parameters": {
              "id": 277,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1336:2:2"
            },
            "returnParameters": {
              "id": 281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 280,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 285,
                  "src": "1371:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1371:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1370:9:2"
            },
            "scope": 451,
            "src": "1316:100:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              130
            ],
            "body": {
              "id": 297,
              "nodeType": "Block",
              "src": "1542:41:2",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 293,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 202,
                      "src": "1559:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 295,
                    "indexExpression": {
                      "id": 294,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 287,
                      "src": "1569:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1559:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 292,
                  "id": 296,
                  "nodeType": "Return",
                  "src": "1552:24:2"
                }
              ]
            },
            "functionSelector": "70a08231",
            "id": 298,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "1431:9:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 289,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1495:8:2"
            },
            "parameters": {
              "id": 288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 287,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1449:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 298,
                  "src": "1441:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 286,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1441:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1440:16:2"
            },
            "returnParameters": {
              "id": 292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 291,
                  "mutability": "mutable",
                  "name": "balance",
                  "nameLocation": "1529:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 298,
                  "src": "1521:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1521:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1520:17:2"
            },
            "scope": 451,
            "src": "1422:161:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              139
            ],
            "body": {
              "id": 340,
              "nodeType": "Block",
              "src": "1705:366:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 309,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 202,
                            "src": "1768:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 312,
                          "indexExpression": {
                            "expression": {
                              "id": 310,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1778:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1782:6:2",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1778:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1768:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 313,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 302,
                          "src": "1793:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1768:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e73756666696369656e742062616c616e6365",
                        "id": 315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1801:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5",
                          "typeString": "literal_string \"Insufficient balance\""
                        },
                        "value": "Insufficient balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5",
                          "typeString": "literal_string \"Insufficient balance\""
                        }
                      ],
                      "id": 308,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1760:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1760:64:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 317,
                  "nodeType": "ExpressionStatement",
                  "src": "1760:64:2"
                },
                {
                  "expression": {
                    "id": 323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 318,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 202,
                        "src": "1867:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 321,
                      "indexExpression": {
                        "expression": {
                          "id": 319,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1877:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 320,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1881:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1877:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1867:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 322,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 302,
                      "src": "1892:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1867:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 324,
                  "nodeType": "ExpressionStatement",
                  "src": "1867:31:2"
                },
                {
                  "expression": {
                    "id": 329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 325,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 202,
                        "src": "1941:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 327,
                      "indexExpression": {
                        "id": 326,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 300,
                        "src": "1951:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1941:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 328,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 302,
                      "src": "1959:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1941:24:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 330,
                  "nodeType": "ExpressionStatement",
                  "src": "1941:24:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 332,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "2019:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2023:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2019:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 334,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 300,
                        "src": "2031:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 335,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 302,
                        "src": "2036:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 331,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 176,
                      "src": "2010:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2010:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 337,
                  "nodeType": "EmitStatement",
                  "src": "2005:38:2"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2060:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 307,
                  "id": 339,
                  "nodeType": "Return",
                  "src": "2053:11:2"
                }
              ]
            },
            "functionSelector": "a9059cbb",
            "id": 341,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nameLocation": "1598:8:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 304,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1661:8:2"
            },
            "parameters": {
              "id": 303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 300,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "1615:3:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "1607:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 299,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1607:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 302,
                  "mutability": "mutable",
                  "name": "_value",
                  "nameLocation": "1628:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "1620:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 301,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1620:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1606:29:2"
            },
            "returnParameters": {
              "id": 307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 306,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "1692:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "1687:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 305,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1687:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1686:14:2"
            },
            "scope": 451,
            "src": "1589:482:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              150
            ],
            "body": {
              "id": 403,
              "nodeType": "Block",
              "src": "2214:590:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 354,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 202,
                            "src": "2277:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 356,
                          "indexExpression": {
                            "id": 355,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 343,
                            "src": "2287:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2277:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 357,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 347,
                          "src": "2297:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2277:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e73756666696369656e742062616c616e6365",
                        "id": 359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2305:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5",
                          "typeString": "literal_string \"Insufficient balance\""
                        },
                        "value": "Insufficient balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5",
                          "typeString": "literal_string \"Insufficient balance\""
                        }
                      ],
                      "id": 353,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2269:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2269:59:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 361,
                  "nodeType": "ExpressionStatement",
                  "src": "2269:59:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 363,
                              "name": "_allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 208,
                              "src": "2401:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 365,
                            "indexExpression": {
                              "id": 364,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 343,
                              "src": "2412:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2401:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 368,
                          "indexExpression": {
                            "expression": {
                              "id": 366,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "2419:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 367,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2423:6:2",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "2419:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2401:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 369,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 347,
                          "src": "2434:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2401:39:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e73756666696369656e7420616c6c6f77616e6365",
                        "id": 371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2454:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc",
                          "typeString": "literal_string \"Insufficient allowance\""
                        },
                        "value": "Insufficient allowance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc",
                          "typeString": "literal_string \"Insufficient allowance\""
                        }
                      ],
                      "id": 362,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2380:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2380:108:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 373,
                  "nodeType": "ExpressionStatement",
                  "src": "2380:108:2"
                },
                {
                  "expression": {
                    "id": 378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 374,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 202,
                        "src": "2531:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 376,
                      "indexExpression": {
                        "id": 375,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 343,
                        "src": "2541:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2531:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 377,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 347,
                      "src": "2551:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2531:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 379,
                  "nodeType": "ExpressionStatement",
                  "src": "2531:26:2"
                },
                {
                  "expression": {
                    "id": 384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 380,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 202,
                        "src": "2600:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 382,
                      "indexExpression": {
                        "id": 381,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "2610:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2600:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 383,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 347,
                      "src": "2618:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2600:24:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 385,
                  "nodeType": "ExpressionStatement",
                  "src": "2600:24:2"
                },
                {
                  "expression": {
                    "id": 393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 386,
                          "name": "_allowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 208,
                          "src": "2664:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 390,
                        "indexExpression": {
                          "id": 387,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 343,
                          "src": "2675:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2664:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 391,
                      "indexExpression": {
                        "expression": {
                          "id": 388,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "2682:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2686:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2682:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2664:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 392,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 347,
                      "src": "2697:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2664:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 394,
                  "nodeType": "ExpressionStatement",
                  "src": "2664:39:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 396,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 343,
                        "src": "2757:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 397,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "2764:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 398,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 347,
                        "src": "2769:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 395,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 176,
                      "src": "2748:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2748:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 400,
                  "nodeType": "EmitStatement",
                  "src": "2743:33:2"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2793:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 352,
                  "id": 402,
                  "nodeType": "Return",
                  "src": "2786:11:2"
                }
              ]
            },
            "functionSelector": "23b872dd",
            "id": 404,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nameLocation": "2086:12:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 349,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2182:8:2"
            },
            "parameters": {
              "id": 348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 343,
                  "mutability": "mutable",
                  "name": "_from",
                  "nameLocation": "2116:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 404,
                  "src": "2108:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 342,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2108:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 345,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "2139:3:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 404,
                  "src": "2131:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 344,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2131:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 347,
                  "mutability": "mutable",
                  "name": "_value",
                  "nameLocation": "2160:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 404,
                  "src": "2152:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 346,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2152:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2098:74:2"
            },
            "returnParameters": {
              "id": 352,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 351,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "2205:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 404,
                  "src": "2200:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 350,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2200:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2199:14:2"
            },
            "scope": 451,
            "src": "2077:727:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              159
            ],
            "body": {
              "id": 432,
              "nodeType": "Block",
              "src": "2930:192:2",
              "statements": [
                {
                  "expression": {
                    "id": 421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 414,
                          "name": "_allowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 208,
                          "src": "2970:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 418,
                        "indexExpression": {
                          "expression": {
                            "id": 415,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "2981:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2985:6:2",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2981:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2970:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 419,
                      "indexExpression": {
                        "id": 417,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 406,
                        "src": "2993:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2970:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 420,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 408,
                      "src": "3005:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2970:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 422,
                  "nodeType": "ExpressionStatement",
                  "src": "2970:41:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 424,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "3065:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3069:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3065:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 426,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 406,
                        "src": "3077:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 427,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 408,
                        "src": "3087:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 423,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 184,
                      "src": "3056:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3056:38:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 429,
                  "nodeType": "EmitStatement",
                  "src": "3051:43:2"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3111:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 413,
                  "id": 431,
                  "nodeType": "Return",
                  "src": "3104:11:2"
                }
              ]
            },
            "functionSelector": "095ea7b3",
            "id": 433,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "2819:7:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 410,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2886:8:2"
            },
            "parameters": {
              "id": 409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 406,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nameLocation": "2835:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 433,
                  "src": "2827:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 405,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2827:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 408,
                  "mutability": "mutable",
                  "name": "_value",
                  "nameLocation": "2853:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 433,
                  "src": "2845:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 407,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2845:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2826:34:2"
            },
            "returnParameters": {
              "id": 413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 412,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "2917:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 433,
                  "src": "2912:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 411,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2912:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2911:14:2"
            },
            "scope": 451,
            "src": "2810:312:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              168
            ],
            "body": {
              "id": 449,
              "nodeType": "Block",
              "src": "3268:52:2",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 443,
                        "name": "_allowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 208,
                        "src": "3285:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 445,
                      "indexExpression": {
                        "id": 444,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 435,
                        "src": "3296:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3285:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 447,
                    "indexExpression": {
                      "id": 446,
                      "name": "_spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 437,
                      "src": "3304:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3285:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 442,
                  "id": 448,
                  "nodeType": "Return",
                  "src": "3278:35:2"
                }
              ]
            },
            "functionSelector": "dd62ed3e",
            "id": 450,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nameLocation": "3137:9:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 439,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3219:8:2"
            },
            "parameters": {
              "id": 438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 435,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3155:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "3147:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 434,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3147:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 437,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nameLocation": "3171:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "3163:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 436,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3163:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3146:34:2"
            },
            "returnParameters": {
              "id": 442,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 441,
                  "mutability": "mutable",
                  "name": "remaining",
                  "nameLocation": "3253:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "3245:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3245:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3244:19:2"
            },
            "scope": 451,
            "src": "3128:192:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 452,
        "src": "82:3240:2",
        "usedErrors": []
      }
    ],
    "src": "33:3290:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {
    "5": {
      "events": {},
      "links": {},
      "address": "0x2b7aa0AD9e7C25B46C60A062EebF0964DACd555c",
      "transactionHash": "0xc5a61d8e873ce2a94fe3c4a81e52fe7032f61d4786fe087b8e1de10bd6e40706"
    },
    "5777": {
      "events": {},
      "links": {},
      "address": "0xfBc679a98828812C8608a46816E8B06002453579",
      "transactionHash": "0x1016a5a91670a9f10a726d1a82a7addd86848de184386408115d82dc276fe5e1"
    }
  },
  "schemaVersion": "3.4.11",
  "updatedAt": "2023-01-09T07:29:28.148Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}