{
  "contractName": "UniversalForwarder",
  "sourceName": "solc_0.8/UniversalForwarder.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "internalType": "bool",
          "name": "isEIP1271Signature",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "forward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x60c060405234801561001057600080fd5b50466080818152604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666020808301919091527f3544bd4b4e112388a1c8d25798bd769c09279f7bc5bb598c30d847adf8857f75828401526060820185905230828501528251808303909401845260a0909101909152815191012060a0525060805160a051610df96100b66000396000610465015260006103be0152610df96000f3fe6080604052600436106100345760003560e01c806311e8af3f146100395780633644e5151461004e578063572b6c0514610076575b600080fd5b61004c610047366004610b84565b6100a7565b005b34801561005a57600080fd5b50610063610183565b6040519081526020015b60405180910390f35b34801561008257600080fd5b50610097610091366004610c1f565b50600190565b604051901515815260200161006d565b6000367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c9050610115813389898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250610192915050565b61017983838360405160200161012d93929190610c3a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff86169034610389565b5050505050505050565b600061018d6103b9565b905090565b600061019e858561048b565b905081156102d557805160208201206040517f1626ba7e000000000000000000000000000000000000000000000000000000008082529173ffffffffffffffffffffffffffffffffffffffff881691631626ba7e91610201918890600401610ce1565b602060405180830381865afa15801561021e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190610cfa565b7fffffffff0000000000000000000000000000000000000000000000000000000016146102d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f313635345f494e56414c49440000000000000000000060448201526064015b60405180910390fd5b610382565b805160208201206000906102e99085610558565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f57524f4e475f5349474e45520000000000000000000060448201526064016102c7565b505b5050505050565b60606103af848484604051806060016040528060298152602001610d9b6029913961057c565b90505b9392505050565b6000467f0000000000000000000000000000000000000000000000000000000000000000811461046357604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666020808301919091527f3544bd4b4e112388a1c8d25798bd769c09279f7bc5bb598c30d847adf8857f758284015260608201849052306080808401919091528351808403909101815260a09092019092528051910120610485565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60606104956103b9565b604080517f49f13ed8c8c6689d7bef1da669e1b78f5678fcce44e9c959541cdb20e31a0999602082015273ffffffffffffffffffffffffffffffffffffffff808716928201929092529084166060820152608001604051602081830303815290604052805190602001206040516020016105419291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604051602081830303815290604052905092915050565b60008060006105678585610712565b9150915061057481610757565b509392505050565b60608247101561060e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102c7565b73ffffffffffffffffffffffffffffffffffffffff85163b61068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102c7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516106b59190610d3c565b60006040518083038185875af1925050503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b50915091506107078282866109ae565b979650505050505050565b60008082516041036107485760208301516040840151606085015160001a61073c87828585610a01565b94509450505050610750565b506000905060025b9250929050565b600081600481111561076b5761076b610d58565b036107735750565b600181600481111561078757610787610d58565b036107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016102c7565b600281600481111561080257610802610d58565b03610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016102c7565b600381600481111561087d5761087d610d58565b0361090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016102c7565b600481600481111561091e5761091e610d58565b036109ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016102c7565b50565b606083156109bd5750816103b2565b8251156109cd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c79190610d87565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610a385750600090506003610b10565b8460ff16601b14158015610a5057508460ff16601c14155b15610a615750600090506004610b10565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ab5573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610b0957600060019250925050610b10565b9150600090505b94509492505050565b60008083601f840112610b2b57600080fd5b50813567ffffffffffffffff811115610b4357600080fd5b60208301915083602082850101111561075057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610b7f57600080fd5b919050565b60008060008060008060808789031215610b9d57600080fd5b863567ffffffffffffffff80821115610bb557600080fd5b610bc18a838b01610b19565b9098509650602089013591508115158214610bdb57600080fd5b819550610bea60408a01610b5b565b94506060890135915080821115610c0057600080fd5b50610c0d89828a01610b19565b979a9699509497509295939492505050565b600060208284031215610c3157600080fd5b6103b282610b5b565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b60005b83811015610c8e578181015183820152602001610c76565b50506000910152565b60008151808452610caf816020860160208601610c73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8281526040602082015260006103af6040830184610c97565b600060208284031215610d0c57600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146103b257600080fd5b60008251610d4e818460208701610c73565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020815260006103b26020830184610c9756fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a2646970667358221220d7dfcadd3290b4027f1cd1a4a9f1f1c46ff4127214b18874acba0cb355f812b864736f6c63430008100033",
  "deployedBytecode": "0x6080604052600436106100345760003560e01c806311e8af3f146100395780633644e5151461004e578063572b6c0514610076575b600080fd5b61004c610047366004610b84565b6100a7565b005b34801561005a57600080fd5b50610063610183565b6040519081526020015b60405180910390f35b34801561008257600080fd5b50610097610091366004610c1f565b50600190565b604051901515815260200161006d565b6000367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c9050610115813389898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250610192915050565b61017983838360405160200161012d93929190610c3a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff86169034610389565b5050505050505050565b600061018d6103b9565b905090565b600061019e858561048b565b905081156102d557805160208201206040517f1626ba7e000000000000000000000000000000000000000000000000000000008082529173ffffffffffffffffffffffffffffffffffffffff881691631626ba7e91610201918890600401610ce1565b602060405180830381865afa15801561021e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190610cfa565b7fffffffff0000000000000000000000000000000000000000000000000000000016146102d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f313635345f494e56414c49440000000000000000000060448201526064015b60405180910390fd5b610382565b805160208201206000906102e99085610558565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f57524f4e475f5349474e45520000000000000000000060448201526064016102c7565b505b5050505050565b60606103af848484604051806060016040528060298152602001610d9b6029913961057c565b90505b9392505050565b6000467f0000000000000000000000000000000000000000000000000000000000000000811461046357604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666020808301919091527f3544bd4b4e112388a1c8d25798bd769c09279f7bc5bb598c30d847adf8857f758284015260608201849052306080808401919091528351808403909101815260a09092019092528051910120610485565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60606104956103b9565b604080517f49f13ed8c8c6689d7bef1da669e1b78f5678fcce44e9c959541cdb20e31a0999602082015273ffffffffffffffffffffffffffffffffffffffff808716928201929092529084166060820152608001604051602081830303815290604052805190602001206040516020016105419291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604051602081830303815290604052905092915050565b60008060006105678585610712565b9150915061057481610757565b509392505050565b60608247101561060e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102c7565b73ffffffffffffffffffffffffffffffffffffffff85163b61068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102c7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516106b59190610d3c565b60006040518083038185875af1925050503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b50915091506107078282866109ae565b979650505050505050565b60008082516041036107485760208301516040840151606085015160001a61073c87828585610a01565b94509450505050610750565b506000905060025b9250929050565b600081600481111561076b5761076b610d58565b036107735750565b600181600481111561078757610787610d58565b036107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016102c7565b600281600481111561080257610802610d58565b03610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016102c7565b600381600481111561087d5761087d610d58565b0361090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016102c7565b600481600481111561091e5761091e610d58565b036109ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016102c7565b50565b606083156109bd5750816103b2565b8251156109cd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c79190610d87565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610a385750600090506003610b10565b8460ff16601b14158015610a5057508460ff16601c14155b15610a615750600090506004610b10565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ab5573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610b0957600060019250925050610b10565b9150600090505b94509492505050565b60008083601f840112610b2b57600080fd5b50813567ffffffffffffffff811115610b4357600080fd5b60208301915083602082850101111561075057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610b7f57600080fd5b919050565b60008060008060008060808789031215610b9d57600080fd5b863567ffffffffffffffff80821115610bb557600080fd5b610bc18a838b01610b19565b9098509650602089013591508115158214610bdb57600080fd5b819550610bea60408a01610b5b565b94506060890135915080821115610c0057600080fd5b50610c0d89828a01610b19565b979a9699509497509295939492505050565b600060208284031215610c3157600080fd5b6103b282610b5b565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b60005b83811015610c8e578181015183820152602001610c76565b50506000910152565b60008151808452610caf816020860160208601610c73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8281526040602082015260006103af6040830184610c97565b600060208284031215610d0c57600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146103b257600080fd5b60008251610d4e818460208701610c73565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020815260006103b26020830184610c9756fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a2646970667358221220d7dfcadd3290b4027f1cd1a4a9f1f1c46ff4127214b18874acba0cb355f812b864736f6c63430008100033",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "devdoc": {
    "kind": "dev",
    "methods": {
      "DOMAIN_SEPARATOR()": {
        "details": "Return the DOMAIN_SEPARATOR."
      },
      "forward(bytes,bool,address,bytes)": {
        "params": {
          "data": "the content of the call (the signer address will be appended to it).",
          "isEIP1271Signature": "true if the signer is a contract that require authorization via EIP-1271",
          "signature": "signature by signer for approving forwarder.",
          "target": "destination of the call (that will receive the meta transaction)."
        }
      }
    },
    "version": 1
  },
  "evm": {
    "bytecode": {
      "functionDebugData": {
        "@_1938": {
          "entryPoint": null,
          "id": 1938,
          "parameterSlots": 0,
          "returnSlots": 0
        },
        "@_calculateDomainSeparator_2042": {
          "entryPoint": null,
          "id": 2042,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 5,
          "returnSlots": 1
        }
      },
      "generatedSources": [
        {
          "ast": {
            "nodeType": "YulBlock",
            "src": "0:433:12",
            "statements": [
              {
                "nodeType": "YulBlock",
                "src": "6:3:12",
                "statements": []
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "199:232:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "209:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "221:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "232:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "217:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "217:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "209:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "252:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "263:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "245:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "245:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "245:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "290:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "301:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "286:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "286:18:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "306:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "279:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "279:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "279:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "333:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "344:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "329:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "329:18:12"
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "349:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "322:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "322:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "322:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "376:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "387:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "372:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "372:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value3",
                                "nodeType": "YulIdentifier",
                                "src": "396:6:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "412:3:12",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "417:1:12",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "408:3:12"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "408:11:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "421:1:12",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "404:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "404:19:12"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "392:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "392:32:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "365:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "365:60:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "365:60:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "144:9:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "155:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "163:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "171:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "179:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "190:4:12",
                    "type": ""
                  }
                ],
                "src": "14:417:12"
              }
            ]
          },
          "contents": "{\n    { }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n    }\n}",
          "id": 12,
          "language": "Yul",
          "name": "#utility.yul"
        }
      ],
      "linkReferences": {},
      "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3544BD4B4E112388A1C8D25798BD769C09279F7BC5BB598C30D847ADF8857F75 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP6 SWAP1 MSTORE ADDRESS DUP3 DUP6 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0xDF9 PUSH2 0xB6 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x465 ADD MSTORE PUSH1 0x0 PUSH2 0x3BE ADD MSTORE PUSH2 0xDF9 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x11E8AF3F EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x4E JUMPI DUP1 PUSH4 0x572B6C05 EQ PUSH2 0x76 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C PUSH2 0x47 CALLDATASIZE PUSH1 0x4 PUSH2 0xB84 JUMP JUMPDEST PUSH2 0xA7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x63 PUSH2 0x183 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x97 PUSH2 0x91 CALLDATASIZE PUSH1 0x4 PUSH2 0xC1F JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x6D JUMP JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR SWAP1 POP PUSH2 0x115 DUP2 CALLER DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x192 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x179 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x12D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 CALLVALUE PUSH2 0x389 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18D PUSH2 0x3B9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19E DUP6 DUP6 PUSH2 0x48B JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x2D5 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x1626BA7E SWAP2 PUSH2 0x201 SWAP2 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x242 SWAP2 SWAP1 PUSH2 0xCFA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F313635345F494E56414C494400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x2E9 SWAP1 DUP6 PUSH2 0x558 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x380 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F57524F4E475F5349474E455200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3AF DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9B PUSH1 0x29 SWAP2 CODECOPY PUSH2 0x57C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 CHAINID PUSH32 0x0 DUP2 EQ PUSH2 0x463 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3544BD4B4E112388A1C8D25798BD769C09279F7BC5BB598C30D847ADF8857F75 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH2 0x485 JUMP JUMPDEST PUSH32 0x0 JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x495 PUSH2 0x3B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x49F13ED8C8C6689D7BEF1DA669E1B78F5678FCCE44E9C959541CDB20E31A0999 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP5 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x541 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x567 DUP6 DUP6 PUSH2 0x712 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x574 DUP2 PUSH2 0x757 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE PUSH2 0x68C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x6B5 SWAP2 SWAP1 PUSH2 0xD3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6F2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6F7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x707 DUP3 DUP3 DUP7 PUSH2 0x9AE JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 SUB PUSH2 0x748 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x73C DUP8 DUP3 DUP6 DUP6 PUSH2 0xA01 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x750 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x76B JUMPI PUSH2 0x76B PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x773 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x787 JUMPI PUSH2 0x787 PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x7EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x802 JUMPI PUSH2 0x802 PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x869 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x87D JUMPI PUSH2 0x87D PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x91E JUMPI PUSH2 0x91E PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x9AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x9BD JUMPI POP DUP2 PUSH2 0x3B2 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x9CD JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2C7 SWAP2 SWAP1 PUSH2 0xD87 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xA38 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0xB10 JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xA50 JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xA61 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xB09 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0xB10 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xB2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x750 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xB9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBC1 DUP11 DUP4 DUP12 ADD PUSH2 0xB19 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP2 ISZERO ISZERO DUP3 EQ PUSH2 0xBDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP6 POP PUSH2 0xBEA PUSH1 0x40 DUP11 ADD PUSH2 0xB5B JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xC00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0D DUP10 DUP3 DUP11 ADD PUSH2 0xB19 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B2 DUP3 PUSH2 0xB5B JUMP JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x14 ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC8E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC76 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xCAF DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xC73 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3AF PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xC97 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x3B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xD4E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xC73 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3B2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xC97 JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2063616C6C KECCAK256 PUSH24 0x6974682076616C7565206661696C6564A264697066735822 SLT KECCAK256 0xD7 0xDF 0xCA 0xDD ORIGIN SWAP1 0xB4 MUL PUSH32 0x1CD1A4A9F1F1C46FF4127214B18874ACBA0CB355F812B864736F6C6343000810 STOP CALLER ",
      "sourceMap": "825:3522:11:-:0;;;1312:226;;;;;;;;;-1:-1:-1;1423:9:11;1439:28;;;;3405:162;;;3422:80;3405:162;;;;245:25:12;;;;1053:31:11;286:18:12;;;279:34;329:18;;;322:34;;;3556:4:11;372:18:12;;;365:60;3405:162:11;;;;;;;;;;217:19:12;;;;3405:162:11;;;3390:182;;;;;1471:63;;-1:-1:-1;825:3522:11;;;;;;;;;;;;;;;;;;"
    },
    "deployedBytecode": {
      "functionDebugData": {
        "@DOMAIN_SEPARATOR_1998": {
          "entryPoint": 387,
          "id": 1998,
          "parameterSlots": 0,
          "returnSlots": 1
        },
        "@_DOMAIN_SEPARATOR_2018": {
          "entryPoint": 953,
          "id": 2018,
          "parameterSlots": 0,
          "returnSlots": 1
        },
        "@_calculateDomainSeparator_2042": {
          "entryPoint": null,
          "id": 2042,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "@_encodeMessage_2067": {
          "entryPoint": 1163,
          "id": 2067,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "@_lastAppendedDataAsSender_939": {
          "entryPoint": null,
          "id": 939,
          "parameterSlots": 0,
          "returnSlots": 1
        },
        "@_requireValidSignature_2121": {
          "entryPoint": 402,
          "id": 2121,
          "parameterSlots": 4,
          "returnSlots": 0
        },
        "@_throwError_584": {
          "entryPoint": 1879,
          "id": 584,
          "parameterSlots": 1,
          "returnSlots": 0
        },
        "@forward_1988": {
          "entryPoint": 167,
          "id": 1988,
          "parameterSlots": 6,
          "returnSlots": 0
        },
        "@functionCallWithValue_108": {
          "entryPoint": 905,
          "id": 108,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "@functionCallWithValue_158": {
          "entryPoint": 1404,
          "id": 158,
          "parameterSlots": 4,
          "returnSlots": 1
        },
        "@isContract_17": {
          "entryPoint": null,
          "id": 17,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "@isTrustedForwarder_1950": {
          "entryPoint": null,
          "id": 1950,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "@recover_657": {
          "entryPoint": 1368,
          "id": 657,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "@tryRecover_630": {
          "entryPoint": 1810,
          "id": 630,
          "parameterSlots": 2,
          "returnSlots": 2
        },
        "@tryRecover_815": {
          "entryPoint": 2561,
          "id": 815,
          "parameterSlots": 4,
          "returnSlots": 2
        },
        "@verifyCallResult_293": {
          "entryPoint": 2478,
          "id": 293,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "abi_decode_address": {
          "entryPoint": 2907,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_decode_bytes_calldata": {
          "entryPoint": 2841,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 2
        },
        "abi_decode_tuple_t_address": {
          "entryPoint": 3103,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_decode_tuple_t_bytes4_fromMemory": {
          "entryPoint": 3322,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_decode_tuple_t_bytes_calldata_ptrt_boolt_addresst_bytes_calldata_ptr": {
          "entryPoint": 2948,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 6
        },
        "abi_encode_bytes": {
          "entryPoint": 3223,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed": {
          "entryPoint": 3130,
          "id": null,
          "parameterSlots": 4,
          "returnSlots": 1
        },
        "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
          "entryPoint": 3388,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 4,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 5,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed": {
          "entryPoint": 3297,
          "id": null,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 5,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": 3463,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_681feb691ce827975a0a638b9095f89820bcd28add729bcdba2cdb15449e0483__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_ceb0f7e66e1583ae7b1f9e14ff7cfd8c8c6ca64498a65f429437584b69280113__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "copy_memory_to_memory_with_cleanup": {
          "entryPoint": 3187,
          "id": null,
          "parameterSlots": 3,
          "returnSlots": 0
        },
        "panic_error_0x21": {
          "entryPoint": 3416,
          "id": null,
          "parameterSlots": 0,
          "returnSlots": 0
        }
      },
      "generatedSources": [
        {
          "ast": {
            "nodeType": "YulBlock",
            "src": "0:9101:12",
            "statements": [
              {
                "nodeType": "YulBlock",
                "src": "6:3:12",
                "statements": []
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "86:275:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "135:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "144:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "147:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "137:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "137:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "137:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "114:6:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "122:4:12",
                                    "type": "",
                                    "value": "0x1f"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "110:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "110:17:12"
                              },
                              {
                                "name": "end",
                                "nodeType": "YulIdentifier",
                                "src": "129:3:12"
                              }
                            ],
                            "functionName": {
                              "name": "slt",
                              "nodeType": "YulIdentifier",
                              "src": "106:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "106:27:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "99:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "99:35:12"
                      },
                      "nodeType": "YulIf",
                      "src": "96:55:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "160:30:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "183:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "170:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "170:20:12"
                      },
                      "variableNames": [
                        {
                          "name": "length",
                          "nodeType": "YulIdentifier",
                          "src": "160:6:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "233:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "242:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "245:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "235:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "235:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "235:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "205:6:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "213:18:12",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "202:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "202:30:12"
                      },
                      "nodeType": "YulIf",
                      "src": "199:50:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "258:29:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "274:6:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "282:4:12",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "270:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "270:17:12"
                      },
                      "variableNames": [
                        {
                          "name": "arrayPos",
                          "nodeType": "YulIdentifier",
                          "src": "258:8:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "339:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "348:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "351:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "341:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "341:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "341:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "310:6:12"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "318:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "306:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "306:19:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "327:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "302:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "302:30:12"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "334:3:12"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "299:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "299:39:12"
                      },
                      "nodeType": "YulIf",
                      "src": "296:59:12"
                    }
                  ]
                },
                "name": "abi_decode_bytes_calldata",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "offset",
                    "nodeType": "YulTypedName",
                    "src": "49:6:12",
                    "type": ""
                  },
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "57:3:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "arrayPos",
                    "nodeType": "YulTypedName",
                    "src": "65:8:12",
                    "type": ""
                  },
                  {
                    "name": "length",
                    "nodeType": "YulTypedName",
                    "src": "75:6:12",
                    "type": ""
                  }
                ],
                "src": "14:347:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "415:147:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "425:29:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "447:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "434:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "434:20:12"
                      },
                      "variableNames": [
                        {
                          "name": "value",
                          "nodeType": "YulIdentifier",
                          "src": "425:5:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "540:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "549:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "552:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "542:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "542:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "542:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "476:5:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "487:5:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "494:42:12",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:54:12"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "473:2:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "473:65:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "466:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "466:73:12"
                      },
                      "nodeType": "YulIf",
                      "src": "463:93:12"
                    }
                  ]
                },
                "name": "abi_decode_address",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "offset",
                    "nodeType": "YulTypedName",
                    "src": "394:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value",
                    "nodeType": "YulTypedName",
                    "src": "405:5:12",
                    "type": ""
                  }
                ],
                "src": "366:196:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "723:797:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "770:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "779:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "782:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "772:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "772:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "772:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "744:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "753:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "740:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "740:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "765:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "736:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "736:33:12"
                      },
                      "nodeType": "YulIf",
                      "src": "733:53:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "795:37:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "822:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "809:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "809:23:12"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "799:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "841:28:12",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "851:18:12",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "845:2:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "896:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "905:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "908:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "898:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "898:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "898:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "884:6:12"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "892:2:12"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "881:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "881:14:12"
                      },
                      "nodeType": "YulIf",
                      "src": "878:34:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "921:84:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "977:9:12"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "988:6:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "973:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "973:22:12"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "997:7:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bytes_calldata",
                          "nodeType": "YulIdentifier",
                          "src": "947:25:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "947:58:12"
                      },
                      "variables": [
                        {
                          "name": "value0_1",
                          "nodeType": "YulTypedName",
                          "src": "925:8:12",
                          "type": ""
                        },
                        {
                          "name": "value1_1",
                          "nodeType": "YulTypedName",
                          "src": "935:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1014:18:12",
                      "value": {
                        "name": "value0_1",
                        "nodeType": "YulIdentifier",
                        "src": "1024:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1014:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1041:18:12",
                      "value": {
                        "name": "value1_1",
                        "nodeType": "YulIdentifier",
                        "src": "1051:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "1041:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1068:45:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1098:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1109:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1094:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1094:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "1081:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1081:32:12"
                      },
                      "variables": [
                        {
                          "name": "value",
                          "nodeType": "YulTypedName",
                          "src": "1072:5:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1166:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1175:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1178:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1168:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1168:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1168:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1135:5:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1156:5:12"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "1149:6:12"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1149:13:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:6:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:21:12"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "1132:2:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1132:32:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1125:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1125:40:12"
                      },
                      "nodeType": "YulIf",
                      "src": "1122:60:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1191:15:12",
                      "value": {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1201:5:12"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "1191:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1215:48:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1248:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1259:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1244:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1244:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "1225:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1225:38:12"
                      },
                      "variableNames": [
                        {
                          "name": "value3",
                          "nodeType": "YulIdentifier",
                          "src": "1215:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1272:48:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1305:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1316:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1301:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1301:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "1288:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1288:32:12"
                      },
                      "variables": [
                        {
                          "name": "offset_1",
                          "nodeType": "YulTypedName",
                          "src": "1276:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1349:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1358:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1361:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1351:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1351:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1351:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "1335:8:12"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1345:2:12"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1332:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1332:16:12"
                      },
                      "nodeType": "YulIf",
                      "src": "1329:36:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1374:86:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1430:9:12"
                              },
                              {
                                "name": "offset_1",
                                "nodeType": "YulIdentifier",
                                "src": "1441:8:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1426:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1426:24:12"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1452:7:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bytes_calldata",
                          "nodeType": "YulIdentifier",
                          "src": "1400:25:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1400:60:12"
                      },
                      "variables": [
                        {
                          "name": "value4_1",
                          "nodeType": "YulTypedName",
                          "src": "1378:8:12",
                          "type": ""
                        },
                        {
                          "name": "value5_1",
                          "nodeType": "YulTypedName",
                          "src": "1388:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1469:18:12",
                      "value": {
                        "name": "value4_1",
                        "nodeType": "YulIdentifier",
                        "src": "1479:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value4",
                          "nodeType": "YulIdentifier",
                          "src": "1469:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1496:18:12",
                      "value": {
                        "name": "value5_1",
                        "nodeType": "YulIdentifier",
                        "src": "1506:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value5",
                          "nodeType": "YulIdentifier",
                          "src": "1496:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_bytes_calldata_ptrt_boolt_addresst_bytes_calldata_ptr",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "649:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "660:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "672:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "680:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "688:6:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "696:6:12",
                    "type": ""
                  },
                  {
                    "name": "value4",
                    "nodeType": "YulTypedName",
                    "src": "704:6:12",
                    "type": ""
                  },
                  {
                    "name": "value5",
                    "nodeType": "YulTypedName",
                    "src": "712:6:12",
                    "type": ""
                  }
                ],
                "src": "567:953:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "1626:76:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "1636:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1648:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1659:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1644:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1644:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "1636:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1678:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1689:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "1671:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1671:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "1671:25:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "1595:9:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "1606:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "1617:4:12",
                    "type": ""
                  }
                ],
                "src": "1525:177:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "1777:116:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1823:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1832:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1835:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1825:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1825:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1825:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "1798:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1807:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1794:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1794:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1819:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1790:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1790:32:12"
                      },
                      "nodeType": "YulIf",
                      "src": "1787:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1848:39:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1877:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "1858:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1858:29:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1848:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_address",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "1743:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "1754:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "1766:6:12",
                    "type": ""
                  }
                ],
                "src": "1707:186:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "1993:92:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "2003:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2015:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2026:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2011:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2011:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "2003:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2045:9:12"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2070:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2063:6:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2063:14:12"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2056:6:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2056:22:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2038:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2038:41:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2038:41:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "1962:9:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "1973:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "1984:4:12",
                    "type": ""
                  }
                ],
                "src": "1898:187:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2265:220:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2288:3:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2293:6:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "2301:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldatacopy",
                          "nodeType": "YulIdentifier",
                          "src": "2275:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2275:33:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2275:33:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2317:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2331:3:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "2336:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2327:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2327:16:12"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "2321:2:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "2359:2:12"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2371:2:12",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2375:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2367:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2367:15:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2384:66:12",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "2363:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2363:88:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2352:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2352:100:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2352:100:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2461:18:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "2472:2:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2476:2:12",
                            "type": "",
                            "value": "20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2468:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2468:11:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "2461:3:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "pos",
                    "nodeType": "YulTypedName",
                    "src": "2225:3:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "2230:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "2238:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "2246:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "2257:3:12",
                    "type": ""
                  }
                ],
                "src": "2090:395:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2556:184:12",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2566:10:12",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2575:1:12",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "i",
                          "nodeType": "YulTypedName",
                          "src": "2570:1:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2635:63:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "dst",
                                      "nodeType": "YulIdentifier",
                                      "src": "2660:3:12"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "2665:1:12"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "2656:3:12"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "2656:11:12"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "2679:3:12"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "2684:1:12"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2675:3:12"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2675:11:12"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "2669:5:12"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "2669:18:12"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "2649:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2649:39:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2649:39:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "2596:1:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2599:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "2593:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2593:13:12"
                      },
                      "nodeType": "YulForLoop",
                      "post": {
                        "nodeType": "YulBlock",
                        "src": "2607:19:12",
                        "statements": [
                          {
                            "nodeType": "YulAssignment",
                            "src": "2609:15:12",
                            "value": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "2618:1:12"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2621:2:12",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "2614:3:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2614:10:12"
                            },
                            "variableNames": [
                              {
                                "name": "i",
                                "nodeType": "YulIdentifier",
                                "src": "2609:1:12"
                              }
                            ]
                          }
                        ]
                      },
                      "pre": {
                        "nodeType": "YulBlock",
                        "src": "2589:3:12",
                        "statements": []
                      },
                      "src": "2585:113:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "2718:3:12"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "2723:6:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2714:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2714:16:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2732:1:12",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2707:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2707:27:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2707:27:12"
                    }
                  ]
                },
                "name": "copy_memory_to_memory_with_cleanup",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "src",
                    "nodeType": "YulTypedName",
                    "src": "2534:3:12",
                    "type": ""
                  },
                  {
                    "name": "dst",
                    "nodeType": "YulTypedName",
                    "src": "2539:3:12",
                    "type": ""
                  },
                  {
                    "name": "length",
                    "nodeType": "YulTypedName",
                    "src": "2544:6:12",
                    "type": ""
                  }
                ],
                "src": "2490:250:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2794:280:12",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2804:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2824:5:12"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "2818:5:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2818:12:12"
                      },
                      "variables": [
                        {
                          "name": "length",
                          "nodeType": "YulTypedName",
                          "src": "2808:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2846:3:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2851:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2839:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2839:19:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2839:19:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2906:5:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2913:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2902:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2902:16:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "2924:3:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2929:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2920:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2920:14:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2936:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "copy_memory_to_memory_with_cleanup",
                          "nodeType": "YulIdentifier",
                          "src": "2867:34:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2867:76:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2867:76:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2952:116:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "2967:3:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "2980:6:12"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2988:2:12",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2976:3:12"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2976:15:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2993:66:12",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "2972:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2972:88:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2963:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2963:98:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3063:4:12",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2959:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2959:109:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "2952:3:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_bytes",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "value",
                    "nodeType": "YulTypedName",
                    "src": "2771:5:12",
                    "type": ""
                  },
                  {
                    "name": "pos",
                    "nodeType": "YulTypedName",
                    "src": "2778:3:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "2786:3:12",
                    "type": ""
                  }
                ],
                "src": "2745:329:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "3226:141:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3243:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3254:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "3236:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3236:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3236:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3281:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3292:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3277:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3277:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3297:2:12",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "3270:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3270:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3270:30:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3309:52:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "3334:6:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3346:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3357:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3342:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3342:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_encode_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "3317:16:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3317:44:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "3309:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "3187:9:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "3198:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "3206:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "3217:4:12",
                    "type": ""
                  }
                ],
                "src": "3079:288:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "3452:256:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "3498:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3507:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3510:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "3500:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3500:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3500:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "3473:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3482:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "3469:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3469:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3494:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "3465:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3465:32:12"
                      },
                      "nodeType": "YulIf",
                      "src": "3462:52:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3523:29:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3542:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "3536:5:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3536:16:12"
                      },
                      "variables": [
                        {
                          "name": "value",
                          "nodeType": "YulTypedName",
                          "src": "3527:5:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "3662:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3671:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3674:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "3664:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3664:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3664:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3574:5:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3585:5:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3592:66:12",
                                    "type": "",
                                    "value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "3581:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3581:78:12"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "3571:2:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3571:89:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "3564:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3564:97:12"
                      },
                      "nodeType": "YulIf",
                      "src": "3561:117:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3687:15:12",
                      "value": {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3697:5:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3687:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_bytes4_fromMemory",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "3418:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "3429:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "3441:6:12",
                    "type": ""
                  }
                ],
                "src": "3372:336:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "3887:172:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3904:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3915:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "3897:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3897:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3897:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3938:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3949:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3934:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3934:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3954:2:12",
                            "type": "",
                            "value": "22"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "3927:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3927:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3927:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3977:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3988:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3973:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3973:18:12"
                          },
                          {
                            "hexValue": "5349474e41545552455f313635345f494e56414c4944",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "3993:24:12",
                            "type": "",
                            "value": "SIGNATURE_1654_INVALID"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "3966:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3966:52:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3966:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4027:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4039:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4050:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4035:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4035:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "4027:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_ceb0f7e66e1583ae7b1f9e14ff7cfd8c8c6ca64498a65f429437584b69280113__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "3864:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "3878:4:12",
                    "type": ""
                  }
                ],
                "src": "3713:346:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "4238:172:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4255:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4266:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4248:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4248:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4248:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4289:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4300:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4285:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4285:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4305:2:12",
                            "type": "",
                            "value": "22"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4278:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4278:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4278:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4328:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4339:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4324:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4324:18:12"
                          },
                          {
                            "hexValue": "5349474e41545552455f57524f4e475f5349474e4552",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "4344:24:12",
                            "type": "",
                            "value": "SIGNATURE_WRONG_SIGNER"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4317:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4317:52:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4317:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4378:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4390:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4401:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4386:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4386:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "4378:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_681feb691ce827975a0a638b9095f89820bcd28add729bcdba2cdb15449e0483__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "4215:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "4229:4:12",
                    "type": ""
                  }
                ],
                "src": "4064:346:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "4572:241:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "4582:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4594:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4605:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4590:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4590:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "4582:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4624:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4635:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4617:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4617:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4617:25:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4651:52:12",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4661:42:12",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "4655:2:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4723:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4734:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4719:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4719:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "4743:6:12"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "4751:2:12"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "4739:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4739:15:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4712:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4712:43:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4712:43:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4775:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4786:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4771:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4771:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value2",
                                "nodeType": "YulIdentifier",
                                "src": "4795:6:12"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "4803:2:12"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "4791:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4791:15:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4764:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4764:43:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4764:43:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "4525:9:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "4536:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "4544:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "4552:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "4563:4:12",
                    "type": ""
                  }
                ],
                "src": "4415:398:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "5066:196:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "5083:3:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5088:66:12",
                            "type": "",
                            "value": "0x1901000000000000000000000000000000000000000000000000000000000000"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5076:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5076:79:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5076:79:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "5175:3:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5180:1:12",
                                "type": "",
                                "value": "2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5171:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5171:11:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5184:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5164:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5164:27:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5164:27:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "5211:3:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5216:2:12",
                                "type": "",
                                "value": "34"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5207:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5207:12:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "5221:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5200:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5200:28:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5200:28:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5237:19:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "5248:3:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5253:2:12",
                            "type": "",
                            "value": "66"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5244:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5244:12:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "5237:3:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "pos",
                    "nodeType": "YulTypedName",
                    "src": "5034:3:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "5039:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "5047:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "5058:3:12",
                    "type": ""
                  }
                ],
                "src": "4818:444:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "5441:228:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5458:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5469:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5451:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5451:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5451:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5492:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5503:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5488:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5488:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5508:2:12",
                            "type": "",
                            "value": "38"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5481:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5481:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5481:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5531:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5542:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5527:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5527:18:12"
                          },
                          {
                            "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "5547:34:12",
                            "type": "",
                            "value": "Address: insufficient balance fo"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5520:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5520:62:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5520:62:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5602:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5613:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5598:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5598:18:12"
                          },
                          {
                            "hexValue": "722063616c6c",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "5618:8:12",
                            "type": "",
                            "value": "r call"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5591:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5591:36:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5591:36:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5636:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5648:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5659:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5644:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5644:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "5636:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "5418:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "5432:4:12",
                    "type": ""
                  }
                ],
                "src": "5267:402:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "5848:179:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5865:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5876:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5858:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5858:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5858:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5899:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5910:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5895:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5895:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5915:2:12",
                            "type": "",
                            "value": "29"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5888:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5888:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5888:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5938:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5949:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5934:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5934:18:12"
                          },
                          {
                            "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "5954:31:12",
                            "type": "",
                            "value": "Address: call to non-contract"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5927:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5927:59:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5927:59:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5995:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6007:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6018:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6003:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6003:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "5995:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "5825:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "5839:4:12",
                    "type": ""
                  }
                ],
                "src": "5674:353:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "6169:150:12",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "6179:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "6199:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "6193:5:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6193:13:12"
                      },
                      "variables": [
                        {
                          "name": "length",
                          "nodeType": "YulTypedName",
                          "src": "6183:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "6254:6:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6262:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6250:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6250:17:12"
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "6269:3:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "6274:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "copy_memory_to_memory_with_cleanup",
                          "nodeType": "YulIdentifier",
                          "src": "6215:34:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6215:66:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6215:66:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "6290:23:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "6301:3:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "6306:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6297:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6297:16:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "6290:3:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "pos",
                    "nodeType": "YulTypedName",
                    "src": "6145:3:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "6150:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "6161:3:12",
                    "type": ""
                  }
                ],
                "src": "6032:287:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "6509:255:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "6519:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6531:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6542:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6527:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6527:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "6519:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6562:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "6573:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6555:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6555:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6555:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6600:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6611:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6596:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6596:18:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "6616:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6589:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6589:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6589:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6643:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6654:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6639:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6639:18:12"
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "6659:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6632:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6632:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6632:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6686:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6697:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6682:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6682:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value3",
                                "nodeType": "YulIdentifier",
                                "src": "6706:6:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6714:42:12",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "6702:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6702:55:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6675:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6675:83:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6675:83:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "6454:9:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "6465:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "6473:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "6481:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "6489:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "6500:4:12",
                    "type": ""
                  }
                ],
                "src": "6324:440:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "6801:152:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6818:1:12",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6821:77:12",
                            "type": "",
                            "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6811:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6811:88:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6811:88:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6915:1:12",
                            "type": "",
                            "value": "4"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6918:4:12",
                            "type": "",
                            "value": "0x21"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6908:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6908:15:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6908:15:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6939:1:12",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6942:4:12",
                            "type": "",
                            "value": "0x24"
                          }
                        ],
                        "functionName": {
                          "name": "revert",
                          "nodeType": "YulIdentifier",
                          "src": "6932:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6932:15:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6932:15:12"
                    }
                  ]
                },
                "name": "panic_error_0x21",
                "nodeType": "YulFunctionDefinition",
                "src": "6769:184:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "7132:174:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7149:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7160:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7142:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7142:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7142:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7183:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7194:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7179:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7179:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7199:2:12",
                            "type": "",
                            "value": "24"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7172:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7172:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7172:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7222:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7233:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7218:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7218:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "7238:26:12",
                            "type": "",
                            "value": "ECDSA: invalid signature"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7211:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7211:54:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7211:54:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "7274:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7286:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7297:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7282:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7282:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "7274:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "7109:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "7123:4:12",
                    "type": ""
                  }
                ],
                "src": "6958:348:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "7485:181:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7502:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7513:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7495:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7495:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7495:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7536:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7547:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7532:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7532:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7552:2:12",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7525:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7525:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7525:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7575:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7586:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7571:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7571:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "7591:33:12",
                            "type": "",
                            "value": "ECDSA: invalid signature length"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7564:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7564:61:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7564:61:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "7634:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7646:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7657:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7642:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7642:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "7634:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "7462:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "7476:4:12",
                    "type": ""
                  }
                ],
                "src": "7311:355:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "7845:224:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7862:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7873:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7855:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7855:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7855:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7896:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7907:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7892:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7892:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7912:2:12",
                            "type": "",
                            "value": "34"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7885:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7885:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7885:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7935:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7946:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7931:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7931:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "7951:34:12",
                            "type": "",
                            "value": "ECDSA: invalid signature 's' val"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7924:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7924:62:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7924:62:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8006:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8017:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8002:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8002:18:12"
                          },
                          {
                            "hexValue": "7565",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "8022:4:12",
                            "type": "",
                            "value": "ue"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7995:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7995:32:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7995:32:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8036:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8048:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8059:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8044:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8044:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "8036:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "7822:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "7836:4:12",
                    "type": ""
                  }
                ],
                "src": "7671:398:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "8248:224:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8265:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8276:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8258:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8258:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8258:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8299:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8310:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8295:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8295:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8315:2:12",
                            "type": "",
                            "value": "34"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8288:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8288:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8288:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8338:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8349:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8334:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8334:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "8354:34:12",
                            "type": "",
                            "value": "ECDSA: invalid signature 'v' val"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8327:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8327:62:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8327:62:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8409:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8420:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8405:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8405:18:12"
                          },
                          {
                            "hexValue": "7565",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "8425:4:12",
                            "type": "",
                            "value": "ue"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8398:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8398:32:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8398:32:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8439:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8451:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8462:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8447:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8447:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "8439:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "8225:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "8239:4:12",
                    "type": ""
                  }
                ],
                "src": "8074:398:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "8598:98:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8615:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8626:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8608:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8608:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8608:21:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8638:52:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "8663:6:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8675:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8686:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8671:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8671:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_encode_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "8646:16:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8646:44:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "8638:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "8567:9:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "8578:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "8589:4:12",
                    "type": ""
                  }
                ],
                "src": "8477:219:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "8882:217:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "8892:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8904:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8915:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8900:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8900:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "8892:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8935:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "8946:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8928:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8928:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8928:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8973:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8984:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8969:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8969:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "8993:6:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9001:4:12",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "8989:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8989:17:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8962:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8962:45:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8962:45:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9027:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9038:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9023:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9023:18:12"
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "9043:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9016:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9016:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9016:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9070:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9081:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9066:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9066:18:12"
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulIdentifier",
                            "src": "9086:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9059:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9059:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9059:34:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "8827:9:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "8838:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "8846:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "8854:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "8862:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "8873:4:12",
                    "type": ""
                  }
                ],
                "src": "8701:398:12"
              }
            ]
          },
          "contents": "{\n    { }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes_calldata_ptrt_boolt_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value2 := value\n        value3 := abi_decode_address(add(headStart, 64))\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, and(shl(96, value2), 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000))\n        end := add(_1, 20)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\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    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_ceb0f7e66e1583ae7b1f9e14ff7cfd8c8c6ca64498a65f429437584b69280113__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"SIGNATURE_1654_INVALID\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_681feb691ce827975a0a638b9095f89820bcd28add729bcdba2cdb15449e0483__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"SIGNATURE_WRONG_SIGNER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 'v' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n}",
          "id": 12,
          "language": "Yul",
          "name": "#utility.yul"
        }
      ],
      "immutableReferences": {
        "1918": [
          {
            "length": 32,
            "start": 958
          }
        ],
        "1920": [
          {
            "length": 32,
            "start": 1125
          }
        ]
      },
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x11E8AF3F EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x4E JUMPI DUP1 PUSH4 0x572B6C05 EQ PUSH2 0x76 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C PUSH2 0x47 CALLDATASIZE PUSH1 0x4 PUSH2 0xB84 JUMP JUMPDEST PUSH2 0xA7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x63 PUSH2 0x183 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x97 PUSH2 0x91 CALLDATASIZE PUSH1 0x4 PUSH2 0xC1F JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x6D JUMP JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR SWAP1 POP PUSH2 0x115 DUP2 CALLER DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x192 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x179 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x12D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 CALLVALUE PUSH2 0x389 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18D PUSH2 0x3B9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19E DUP6 DUP6 PUSH2 0x48B JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x2D5 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x1626BA7E SWAP2 PUSH2 0x201 SWAP2 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x242 SWAP2 SWAP1 PUSH2 0xCFA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F313635345F494E56414C494400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x2E9 SWAP1 DUP6 PUSH2 0x558 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x380 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F57524F4E475F5349474E455200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3AF DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9B PUSH1 0x29 SWAP2 CODECOPY PUSH2 0x57C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 CHAINID PUSH32 0x0 DUP2 EQ PUSH2 0x463 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3544BD4B4E112388A1C8D25798BD769C09279F7BC5BB598C30D847ADF8857F75 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH2 0x485 JUMP JUMPDEST PUSH32 0x0 JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x495 PUSH2 0x3B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x49F13ED8C8C6689D7BEF1DA669E1B78F5678FCCE44E9C959541CDB20E31A0999 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP5 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x541 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x567 DUP6 DUP6 PUSH2 0x712 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x574 DUP2 PUSH2 0x757 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE PUSH2 0x68C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x6B5 SWAP2 SWAP1 PUSH2 0xD3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6F2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6F7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x707 DUP3 DUP3 DUP7 PUSH2 0x9AE JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 SUB PUSH2 0x748 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x73C DUP8 DUP3 DUP6 DUP6 PUSH2 0xA01 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x750 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x76B JUMPI PUSH2 0x76B PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x773 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x787 JUMPI PUSH2 0x787 PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x7EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x802 JUMPI PUSH2 0x802 PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x869 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x87D JUMPI PUSH2 0x87D PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x91E JUMPI PUSH2 0x91E PUSH2 0xD58 JUMP JUMPDEST SUB PUSH2 0x9AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x9BD JUMPI POP DUP2 PUSH2 0x3B2 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x9CD JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2C7 SWAP2 SWAP1 PUSH2 0xD87 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xA38 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0xB10 JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xA50 JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xA61 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xB09 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0xB10 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xB2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x750 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xB9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBC1 DUP11 DUP4 DUP12 ADD PUSH2 0xB19 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP2 ISZERO ISZERO DUP3 EQ PUSH2 0xBDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP6 POP PUSH2 0xBEA PUSH1 0x40 DUP11 ADD PUSH2 0xB5B JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xC00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0D DUP10 DUP3 DUP11 ADD PUSH2 0xB19 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B2 DUP3 PUSH2 0xB5B JUMP JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x14 ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC8E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC76 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xCAF DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xC73 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3AF PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xC97 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x3B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xD4E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xC73 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3B2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xC97 JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2063616C6C KECCAK256 PUSH24 0x6974682076616C7565206661696C6564A264697066735822 SLT KECCAK256 0xD7 0xDF 0xCA 0xDD ORIGIN SWAP1 0xB4 MUL PUSH32 0x1CD1A4A9F1F1C46FF4127214B18874ACBA0CB355F812B864736F6C6343000810 STOP CALLER ",
      "sourceMap": "825:3522:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2201:337;;;;;;:::i;:::-;;:::i;:::-;;2580:94;;;;;;;;;;;;;:::i;:::-;;;1671:25:12;;;1659:2;1644:18;2580:94:11;;;;;;;;1622;;;;;;;;;;-1:-1:-1;1622:94:11;;;;;:::i;:::-;-1:-1:-1;1708:4:11;;1622:94;;;;2063:14:12;;2056:22;2038:41;;2026:2;2011:18;1622:94:11;1898:187:12;2201:337:11;2338:14;549::5;545:23;;532:37;528:2;524:46;2338:44:11;;2386:73;2409:6;2417:10;2429:9;;2386:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2440:18:11;;-1:-1:-1;2386:22:11;;-1:-1:-1;;2386:73:11:i;:::-;2463:71;2509:4;;2515:6;2492:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2463:28;;;;2524:9;2463:28;:71::i;:::-;;2334:204;2201:337;;;;;;:::o;2580:94::-;2631:7;2651:19;:17;:19::i;:::-;2644:26;;2580:94;:::o;3823:522::-;3968:23;3994:33;4009:6;4017:9;3994:14;:33::i;:::-;3968:59;;4035:18;4031:311;;;4106:21;;;;;;4073:66;;4143:18;4073:66;;;4143:18;4073:32;;;;992:10;;4073:66;;4129:9;;4073:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:88;;;4060:136;;;;;;;3915:2:12;4060:136:11;;;3897:21:12;3954:2;3934:18;;;3927:30;3993:24;3973:18;;;3966:52;4035:18;;4060:136:11;;;;;;;;;4031:311;;;4235:21;;;;;;4212:20;;4235:40;;4265:9;4235:29;:40::i;:::-;4212:63;;4298:12;4288:22;;:6;:22;;;4280:57;;;;;;;4266:2:12;4280:57:11;;;4248:21:12;4305:2;4285:18;;;4278:30;4344:24;4324:18;;;4317:52;4386:18;;4280:57:11;4064:346:12;4280:57:11;4207:135;4031:311;3964:381;3823:522;;;;:::o;4446:254:0:-;4575:12;4606:87;4628:6;4636:4;4642:5;4606:87;;;;;;;;;;;;;;;;;:21;:87::i;:::-;4599:94;;4446:254;;;;;;:::o;2856:392:11:-;2908:7;3014:9;3160:18;3149:29;;:95;;3405:162;;;3422:80;3405:162;;;;6555:25:12;;;;1053:31:11;6596:18:12;;;6589:34;6639:18;;;6632:34;;;3556:4:11;6682:18:12;;;;6675:83;;;;3405:162:11;;;;;;;;;;6527:19:12;;;;3405:162:11;;;3390:182;;;;;3149:95;;;3181:26;3149:95;3142:102;;;2856:392;:::o;3579:241::-;3661:12;3727:19;:17;:19::i;:::-;3762:48;;;1135:70;3762:48;;;4617:25:12;4661:42;4739:15;;;4719:18;;;4712:43;;;;4791:15;;;4771:18;;;4764:43;4590:18;;3762:48:11;;;;;;;;;;;;3752:59;;;;;;3689:127;;;;;;;;5088:66:12;5076:79;;5180:1;5171:11;;5164:27;;;;5216:2;5207:12;;5200:28;5253:2;5244:12;;4818:444;3689:127:11;;;;;;;;;;;;;3679:137;;3579:241;;;;:::o;3759:227:2:-;3837:7;3857:17;3876:18;3898:27;3909:4;3915:9;3898:10;:27::i;:::-;3856:69;;;;3935:18;3947:5;3935:11;:18::i;:::-;-1:-1:-1;3970:9:2;3759:227;-1:-1:-1;;;3759:227:2:o;4948:499:0:-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;5469:2:12;5137:81:0;;;5451:21:12;5508:2;5488:18;;;5481:30;5547:34;5527:18;;;5520:62;5618:8;5598:18;;;5591:36;5644:19;;5137:81:0;5267:402:12;5137:81:0;1465:19;;;;5228:60;;;;;;;5876:2:12;5228:60:0;;;5858:21:12;5915:2;5895:18;;;5888:30;5954:31;5934:18;;;5927:59;6003:18;;5228:60:0;5674:353:12;5228:60:0;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;4948:499;-1:-1:-1;;;;;;;4948:499:0:o;2243:730:2:-;2324:7;2333:12;2361:9;:16;2381:2;2361:22;2357:610;;2697:4;2682:20;;2676:27;2746:4;2731:20;;2725:27;2803:4;2788:20;;2782:27;2399:9;2774:36;2844:25;2855:4;2774:36;2676:27;2725;2844:10;:25::i;:::-;2837:32;;;;;;;;;2357:610;-1:-1:-1;2916:1:2;;-1:-1:-1;2920:35:2;2357:610;2243:730;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;766:34;;;;;7160:2:12;766:34:2;;;7142:21:12;7199:2;7179:18;;;7172:30;7238:26;7218:18;;;7211:54;7282:18;;766:34:2;6958:348:12;708:465:2;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;881:41;;;;;7513:2:12;881:41:2;;;7495:21:12;7552:2;7532:18;;;7525:30;7591:33;7571:18;;;7564:61;7642:18;;881:41:2;7311:355:12;817:356:2;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;998:44;;;;;7873:2:12;998:44:2;;;7855:21:12;7912:2;7892:18;;;7885:30;7951:34;7931:18;;;7924:62;8022:4;8002:18;;;7995:32;8044:19;;998:44:2;7671:398:12;939:234:2;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;1118:44;;;;;8276:2:12;1118:44:2;;;8258:21:12;8315:2;8295:18;;;8288:30;8354:34;8334:18;;;8327:62;8425:4;8405:18;;;8398:32;8447:19;;1118:44:2;8074:398:12;1059:114:2;548:631;:::o;7561:742:0:-;7707:12;7735:7;7731:566;;;-1:-1:-1;7765:10:0;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;;;;;;;;;;:::i;5167:1603:2:-;5293:7;;6217:66;6204:79;;6200:161;;;-1:-1:-1;6315:1:2;;-1:-1:-1;6319:30:2;6299:51;;6200:161;6374:1;:7;;6379:2;6374:7;;:18;;;;;6385:1;:7;;6390:2;6385:7;;6374:18;6370:100;;;-1:-1:-1;6424:1:2;;-1:-1:-1;6428:30:2;6408:51;;6370:100;6581:24;;;6564:14;6581:24;;;;;;;;;8928:25:12;;;9001:4;8989:17;;8969:18;;;8962:45;;;;9023:18;;;9016:34;;;9066:18;;;9059:34;;;6581:24:2;;8900:19:12;;6581:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6581:24:2;;;;;;-1:-1:-1;;6619:20:2;;;6615:101;;6671:1;6675:29;6655:50;;;;;;;6615:101;6734:6;-1:-1:-1;6742:20:2;;-1:-1:-1;5167:1603:2;;;;;;;;:::o;14:347:12:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:12;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;366:196;434:20;;494:42;483:54;;473:65;;463:93;;552:1;549;542:12;463:93;366:196;;;:::o;567:953::-;672:6;680;688;696;704;712;765:3;753:9;744:7;740:23;736:33;733:53;;;782:1;779;772:12;733:53;822:9;809:23;851:18;892:2;884:6;881:14;878:34;;;908:1;905;898:12;878:34;947:58;997:7;988:6;977:9;973:22;947:58;:::i;:::-;1024:8;;-1:-1:-1;921:84:12;-1:-1:-1;1109:2:12;1094:18;;1081:32;;-1:-1:-1;1149:13:12;;1142:21;1132:32;;1122:60;;1178:1;1175;1168:12;1122:60;1201:5;1191:15;;1225:38;1259:2;1248:9;1244:18;1225:38;:::i;:::-;1215:48;;1316:2;1305:9;1301:18;1288:32;1272:48;;1345:2;1335:8;1332:16;1329:36;;;1361:1;1358;1351:12;1329:36;;1400:60;1452:7;1441:8;1430:9;1426:24;1400:60;:::i;:::-;567:953;;;;-1:-1:-1;567:953:12;;-1:-1:-1;567:953:12;;1479:8;;567:953;-1:-1:-1;;;567:953:12:o;1707:186::-;1766:6;1819:2;1807:9;1798:7;1794:23;1790:32;1787:52;;;1835:1;1832;1825:12;1787:52;1858:29;1877:9;1858:29;:::i;2090:395::-;2301:6;2293;2288:3;2275:33;2371:2;2367:15;;;;2384:66;2363:88;2327:16;;2352:100;;;2476:2;2468:11;;2090:395;-1:-1:-1;2090:395:12:o;2490:250::-;2575:1;2585:113;2599:6;2596:1;2593:13;2585:113;;;2675:11;;;2669:18;2656:11;;;2649:39;2621:2;2614:10;2585:113;;;-1:-1:-1;;2732:1:12;2714:16;;2707:27;2490:250::o;2745:329::-;2786:3;2824:5;2818:12;2851:6;2846:3;2839:19;2867:76;2936:6;2929:4;2924:3;2920:14;2913:4;2906:5;2902:16;2867:76;:::i;:::-;2988:2;2976:15;2993:66;2972:88;2963:98;;;;3063:4;2959:109;;2745:329;-1:-1:-1;;2745:329:12:o;3079:288::-;3254:6;3243:9;3236:25;3297:2;3292;3281:9;3277:18;3270:30;3217:4;3317:44;3357:2;3346:9;3342:18;3334:6;3317:44;:::i;3372:336::-;3441:6;3494:2;3482:9;3473:7;3469:23;3465:32;3462:52;;;3510:1;3507;3500:12;3462:52;3542:9;3536:16;3592:66;3585:5;3581:78;3574:5;3571:89;3561:117;;3674:1;3671;3664:12;6032:287;6161:3;6199:6;6193:13;6215:66;6274:6;6269:3;6262:4;6254:6;6250:17;6215:66;:::i;:::-;6297:16;;;;;6032:287;-1:-1:-1;;6032:287:12:o;6769:184::-;6821:77;6818:1;6811:88;6918:4;6915:1;6908:15;6942:4;6939:1;6932:15;8477:219;8626:2;8615:9;8608:21;8589:4;8646:44;8686:2;8675:9;8671:18;8663:6;8646:44;:::i"
    },
    "gasEstimates": {
      "creation": {
        "codeDepositCost": "715400",
        "executionCost": "infinite",
        "totalCost": "infinite"
      },
      "external": {
        "DOMAIN_SEPARATOR()": "infinite",
        "forward(bytes,bool,address,bytes)": "infinite",
        "isTrustedForwarder(address)": "371"
      },
      "internal": {
        "_DOMAIN_SEPARATOR()": "infinite",
        "_calculateDomainSeparator(uint256)": "infinite",
        "_encodeMessage(address,address)": "infinite",
        "_requireValidSignature(address,address,bytes memory,bool)": "infinite"
      }
    },
    "methodIdentifiers": {
      "DOMAIN_SEPARATOR()": "3644e515",
      "forward(bytes,bool,address,bytes)": "11e8af3f",
      "isTrustedForwarder(address)": "572b6c05"
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isEIP1271Signature\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"forward\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return the DOMAIN_SEPARATOR.\"},\"forward(bytes,bool,address,bytes)\":{\"params\":{\"data\":\"the content of the call (the signer address will be appended to it).\",\"isEIP1271Signature\":\"true if the signer is a contract that require authorization via EIP-1271\",\"signature\":\"signature by signer for approving forwarder.\",\"target\":\"destination of the call (that will receive the meta transaction).\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"forward(bytes,bool,address,bytes)\":{\"notice\":\"Forward the meta transaction by first checking signature if forwarder is approved : no storage involved, approving is forever.\"},\"isTrustedForwarder(address)\":{\"notice\":\"The UniversalForwarder supports every EIP-2771 compliant forwarder.\"}},\"notice\":\"Universal Meta Transaction Forwarder It does not perform any extra logic apart from checking if the caller (metatx forwarder) has been approved via signature. Note that forwarder approval are forever. This is to remove the need to read storage. Signature need to be given each time. The overhead (on top of the specific metatx forwarder) is thus just an extra contract load and call + signature check.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/UniversalForwarder.sol\":\"UniversalForwarder\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"_lib/openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\"},\"_lib/openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _HEX_SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        // Inspired by OraclizeAPI's implementation - MIT licence\\n        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n        if (value == 0) {\\n            return \\\"0\\\";\\n        }\\n        uint256 temp = value;\\n        uint256 digits;\\n        while (temp != 0) {\\n            digits++;\\n            temp /= 10;\\n        }\\n        bytes memory buffer = new bytes(digits);\\n        while (value != 0) {\\n            digits -= 1;\\n            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n            value /= 10;\\n        }\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        if (value == 0) {\\n            return \\\"0x00\\\";\\n        }\\n        uint256 temp = value;\\n        uint256 length = 0;\\n        while (temp != 0) {\\n            length++;\\n            temp >>= 8;\\n        }\\n        return toHexString(value, length);\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _HEX_SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\"},\"_lib/openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.3) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        } else if (error == RecoverError.InvalidSignatureV) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n        if (v != 27 && v != 28) {\\n            return (address(0), RecoverError.InvalidSignatureV);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xdb7f5c28fc61cda0bd8ab60ce288e206b791643bcd3ba464a70cbec18895a2f5\",\"license\":\"MIT\"},\"solc_0.8/ERC2771/IERC2771.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC2771 {\\n\\tfunction isTrustedForwarder(address forwarder) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x86f509ee4e3e3011e51c36c81badde85e2b3c26d0c4f2c2535a1e505d27b6981\",\"license\":\"MIT\"},\"solc_0.8/ERC2771/UsingAppendedCallData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract UsingAppendedCallData {\\n\\tfunction _lastAppendedDataAsSender() internal pure virtual returns (address payable sender) {\\n\\t\\t// Copied from openzeppelin : https://github.com/OpenZeppelin/openzeppelin-contracts/blob/9d5f77db9da0604ce0b25148898a94ae2c20d70f/contracts/metatx/ERC2771Context.sol1\\n\\t\\t// The assembly code is more direct than the Solidity version using `abi.decode`.\\n\\t\\t// solhint-disable-next-line no-inline-assembly\\n\\t\\tassembly {\\n\\t\\t\\tsender := shr(96, calldataload(sub(calldatasize(), 20)))\\n\\t\\t}\\n\\t}\\n\\n\\tfunction _msgDataAssuming20BytesAppendedData() internal pure virtual returns (bytes calldata) {\\n\\t\\treturn msg.data[:msg.data.length - 20];\\n\\t}\\n}\\n\",\"keccak256\":\"0x153a7a9b87d95b7ae6a59de68da6c165bfccb53d99ef184668ecd973cd3c0e49\",\"license\":\"MIT\"},\"solc_0.8/UniversalForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.16;\\n\\nimport \\\"../_lib/openzeppelin/contracts/utils/Address.sol\\\";\\nimport \\\"../_lib/openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"./ERC2771/IERC2771.sol\\\";\\nimport \\\"./ERC2771/UsingAppendedCallData.sol\\\";\\n\\ninterface ERC1271 {\\n\\tfunction isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4 magicValue);\\n}\\n\\n/// @notice Universal Meta Transaction Forwarder\\n/// It does not perform any extra logic apart from checking if the caller (metatx forwarder) has been approved via signature.\\n/// Note that forwarder approval are forever. This is to remove the need to read storage. Signature need to be given each time.\\n/// The overhead (on top of the specific metatx forwarder) is thus just an extra contract load and call + signature check.\\ncontract UniversalForwarder is UsingAppendedCallData, IERC2771 {\\n\\tusing Address for address;\\n\\tusing ECDSA for bytes32;\\n\\n\\tbytes4 internal constant ERC1271_MAGICVALUE = 0x1626ba7e;\\n\\n\\tbytes32 internal constant EIP712_DOMAIN_NAME = keccak256(\\\"UniversalForwarder\\\");\\n\\tbytes32 internal constant APPROVAL_TYPEHASH =\\n\\t\\tkeccak256(\\\"ApproveForwarderForever(address signer,address forwarder)\\\");\\n\\n\\tuint256 private immutable _deploymentChainId;\\n\\tbytes32 private immutable _deploymentDomainSeparator;\\n\\n\\tconstructor() {\\n\\t\\tuint256 chainId;\\n\\t\\t//solhint-disable-next-line no-inline-assembly\\n\\t\\tassembly {\\n\\t\\t\\tchainId := chainid()\\n\\t\\t}\\n\\t\\t_deploymentChainId = chainId;\\n\\t\\t_deploymentDomainSeparator = _calculateDomainSeparator(chainId);\\n\\t}\\n\\n\\t/// @notice The UniversalForwarder supports every EIP-2771 compliant forwarder.\\n\\tfunction isTrustedForwarder(address) external pure override returns (bool) {\\n\\t\\treturn true;\\n\\t}\\n\\n\\t/// @notice Forward the meta transaction by first checking signature if forwarder is approved : no storage involved, approving is forever.\\n\\t/// @param signature signature by signer for approving forwarder.\\n\\t/// @param isEIP1271Signature true if the signer is a contract that require authorization via EIP-1271\\n\\t/// @param target destination of the call (that will receive the meta transaction).\\n\\t/// @param data the content of the call (the signer address will be appended to it).\\n\\tfunction forward(\\n\\t\\tbytes calldata signature,\\n\\t\\tbool isEIP1271Signature,\\n\\t\\taddress target,\\n\\t\\tbytes calldata data\\n\\t) external payable {\\n\\t\\taddress signer = _lastAppendedDataAsSender();\\n\\t\\t_requireValidSignature(signer, msg.sender, signature, isEIP1271Signature);\\n\\t\\ttarget.functionCallWithValue(abi.encodePacked(data, signer), msg.value);\\n\\t}\\n\\n\\t/// @dev Return the DOMAIN_SEPARATOR.\\n\\tfunction DOMAIN_SEPARATOR() external view returns (bytes32) {\\n\\t\\treturn _DOMAIN_SEPARATOR();\\n\\t}\\n\\n\\t// -------------------------------------------------------- INTERNAL --------------------------------------------------------------------\\n\\n\\t/// @dev Return the DOMAIN_SEPARATOR.\\n\\tfunction _DOMAIN_SEPARATOR() internal view returns (bytes32) {\\n\\t\\tuint256 chainId;\\n\\t\\t//solhint-disable-next-line no-inline-assembly\\n\\t\\tassembly {\\n\\t\\t\\tchainId := chainid()\\n\\t\\t}\\n\\n\\t\\t// in case a fork happen, to support the chain that had to change its chainId, we compue the domain operator\\n\\t\\treturn chainId == _deploymentChainId ? _deploymentDomainSeparator : _calculateDomainSeparator(chainId);\\n\\t}\\n\\n\\t/// @dev Calculate the DOMAIN_SEPARATOR.\\n\\tfunction _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {\\n\\t\\treturn\\n\\t\\t\\tkeccak256(\\n\\t\\t\\t\\tabi.encode(\\n\\t\\t\\t\\t\\tkeccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\"),\\n\\t\\t\\t\\t\\tEIP712_DOMAIN_NAME,\\n\\t\\t\\t\\t\\tchainId,\\n\\t\\t\\t\\t\\taddress(this)\\n\\t\\t\\t\\t)\\n\\t\\t\\t);\\n\\t}\\n\\n\\tfunction _encodeMessage(address signer, address forwarder) internal view returns (bytes memory) {\\n\\t\\treturn\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\t\\\"\\\\x19\\\\x01\\\",\\n\\t\\t\\t\\t_DOMAIN_SEPARATOR(),\\n\\t\\t\\t\\tkeccak256(abi.encode(APPROVAL_TYPEHASH, signer, forwarder))\\n\\t\\t\\t);\\n\\t}\\n\\n\\tfunction _requireValidSignature(\\n\\t\\taddress signer,\\n\\t\\taddress forwarder,\\n\\t\\tbytes memory signature,\\n\\t\\tbool isEIP1271Signature\\n\\t) internal view {\\n\\t\\tbytes memory dataToHash = _encodeMessage(signer, forwarder);\\n\\t\\tif (isEIP1271Signature) {\\n\\t\\t\\trequire(\\n\\t\\t\\t\\tERC1271(signer).isValidSignature(keccak256(dataToHash), signature) == ERC1271_MAGICVALUE,\\n\\t\\t\\t\\t\\\"SIGNATURE_1654_INVALID\\\"\\n\\t\\t\\t);\\n\\t\\t} else {\\n\\t\\t\\taddress actualSigner = keccak256(dataToHash).recover(signature);\\n\\t\\t\\trequire(signer == actualSigner, \\\"SIGNATURE_WRONG_SIGNER\\\");\\n\\t\\t}\\n\\t}\\n}\\n\",\"keccak256\":\"0x12dea23b9fe89d81a9c98c6f3d54b938dfd490ec3e80ec249a740e22c0e633fe\",\"license\":\"MIT\"}},\"version\":1}",
  "storageLayout": {
    "storage": [],
    "types": null
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "forward(bytes,bool,address,bytes)": {
        "notice": "Forward the meta transaction by first checking signature if forwarder is approved : no storage involved, approving is forever."
      },
      "isTrustedForwarder(address)": {
        "notice": "The UniversalForwarder supports every EIP-2771 compliant forwarder."
      }
    },
    "notice": "Universal Meta Transaction Forwarder It does not perform any extra logic apart from checking if the caller (metatx forwarder) has been approved via signature. Note that forwarder approval are forever. This is to remove the need to read storage. Signature need to be given each time. The overhead (on top of the specific metatx forwarder) is thus just an extra contract load and call + signature check.",
    "version": 1
  }
}