{
  "contractName": "ERC721ReceiverMock",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "retval",
          "type": "bytes4"
        },
        {
          "internalType": "enum ERC721ReceiverMock.Error",
          "name": "error",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gas",
          "type": "uint256"
        }
      ],
      "name": "Received",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"retval\",\"type\":\"bytes4\"},{\"internalType\":\"enum ERC721ReceiverMock.Error\",\"name\":\"error\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"}],\"name\":\"Received\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/mocks/token/ERC721ReceiverMock.sol\":\"ERC721ReceiverMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":25},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"project:/contracts/mocks/token/ERC721ReceiverMock.sol\":{\"keccak256\":\"0x619d52ac1fef3b956db112a22f3b91ddd6d68c032c2e303832b154a1a11cddd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4b0c240a3d98bba1020b97bd86a93a1d2f6537fcb497943b2a44d60b1f994db3\",\"dweb:/ipfs/QmZWJ2cXSroJE4cdydwchQ5MwLzu8Deoh4Fjw2MRcBBeRG\"]}},\"version\":1}",
  "bytecode": "0x60c060405234801561001057600080fd5b506040516104ca3803806104ca83398101604081905261002f9161006e565b6001600160e01b0319821660805280600381111561004f5761004f6100b9565b60a0816003811115610063576100636100b9565b8152505050506100cf565b6000806040838503121561008157600080fd5b82516001600160e01b03198116811461009957600080fd5b6020840151909250600481106100ae57600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60805160a0516103ca6101006000396000818160660152818160eb0152610129015260006101af01526103ca6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004361003e366004610208565b610060565b6040516001600160e01b0319909116815260200160405180910390f35b600060017f00000000000000000000000000000000000000000000000000000000000000006003811115610096576100966102e4565b036100e75760405162461bcd60e51b815260206004820152601d60248201527f45524337323152656365697665724d6f636b3a20726576657274696e67000000604482015260640160405180910390fd5b60027f0000000000000000000000000000000000000000000000000000000000000000600381111561011b5761011b6102e4565b0361012557600080fd5b60037f00000000000000000000000000000000000000000000000000000000000000006003811115610159576101596102e4565b0361016d57600061016a81806102fa565b50505b7f28fa6e16458f9c24aa59ddd4085264573006dbe30304837873c7deafc702b038858585855a6040516101a495949392919061031c565b60405180910390a1507f0000000000000000000000000000000000000000000000000000000000000000949350505050565b80356001600160a01b03811681146101ed57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561021e57600080fd5b610227856101d6565b9350610235602086016101d6565b925060408501359150606085013567ffffffffffffffff8082111561025957600080fd5b818701915087601f83011261026d57600080fd5b81358181111561027f5761027f6101f2565b604051601f8201601f19908116603f011681019083821181831017156102a7576102a76101f2565b816040528281528a60208487010111156102c057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b634e487b7160e01b600052602160045260246000fd5b60008261031757634e487b7160e01b600052601260045260246000fd5b500490565b600060018060a01b03808816835260208188168185015286604085015260a06060850152855191508160a085015260005b828110156103695786810182015185820160c00152810161034d565b5050600060c0828501015260c0601f19601f830116840101915050826080830152969550505050505056fea2646970667358221220fad00821c84b5172f9221506e80d8ef23380f127b289ad03df3a4fee244d580d64736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004361003e366004610208565b610060565b6040516001600160e01b0319909116815260200160405180910390f35b600060017f00000000000000000000000000000000000000000000000000000000000000006003811115610096576100966102e4565b036100e75760405162461bcd60e51b815260206004820152601d60248201527f45524337323152656365697665724d6f636b3a20726576657274696e67000000604482015260640160405180910390fd5b60027f0000000000000000000000000000000000000000000000000000000000000000600381111561011b5761011b6102e4565b0361012557600080fd5b60037f00000000000000000000000000000000000000000000000000000000000000006003811115610159576101596102e4565b0361016d57600061016a81806102fa565b50505b7f28fa6e16458f9c24aa59ddd4085264573006dbe30304837873c7deafc702b038858585855a6040516101a495949392919061031c565b60405180910390a1507f0000000000000000000000000000000000000000000000000000000000000000949350505050565b80356001600160a01b03811681146101ed57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561021e57600080fd5b610227856101d6565b9350610235602086016101d6565b925060408501359150606085013567ffffffffffffffff8082111561025957600080fd5b818701915087601f83011261026d57600080fd5b81358181111561027f5761027f6101f2565b604051601f8201601f19908116603f011681019083821181831017156102a7576102a76101f2565b816040528281528a60208487010111156102c057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b634e487b7160e01b600052602160045260246000fd5b60008261031757634e487b7160e01b600052601260045260246000fd5b500490565b600060018060a01b03808816835260208188168185015286604085015260a06060850152855191508160a085015260005b828110156103695786810182015185820160c00152810161034d565b5050600060c0828501015260c0601f19601f830116840101915050826080830152969550505050505056fea2646970667358221220fad00821c84b5172f9221506e80d8ef23380f127b289ad03df3a4fee244d580d64736f6c63430008130033",
  "immutableReferences": {
    "18187": [
      {
        "length": 32,
        "start": 431
      }
    ],
    "18190": [
      {
        "length": 32,
        "start": 102
      },
      {
        "length": 32,
        "start": 235
      },
      {
        "length": 32,
        "start": 297
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:592:81",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:81",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "122:336:81",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "168:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "177:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "180:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "170:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "170:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "170:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "143:7:81"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "152:9:81"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "139:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "139:23:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "164:2:81",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "135:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "135:32:81"
                  },
                  "nodeType": "YulIf",
                  "src": "132:52:81"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "193:29:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "212:9:81"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "206:5:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "206:16:81"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "197:5:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "286:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "295:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "298:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "288:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "288:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "288:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "244:5:81"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "255:5:81"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "266:3:81",
                                    "type": "",
                                    "value": "224"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "271:10:81",
                                    "type": "",
                                    "value": "0xffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "262:3:81"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "262:20:81"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "251:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "251:32:81"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "241:2:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "241:43:81"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "234:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "234:51:81"
                  },
                  "nodeType": "YulIf",
                  "src": "231:71:81"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "311:15:81",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "321:5:81"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "311:6:81"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "335:40:81",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "360:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "371:2:81",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "356:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "356:18:81"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "350:5:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "350:25:81"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "339:7:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "410:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "419:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "422:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "412:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "412:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "412:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value_1",
                            "nodeType": "YulIdentifier",
                            "src": "397:7:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "406:1:81",
                            "type": "",
                            "value": "4"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "394:2:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "394:14:81"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "387:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "387:22:81"
                  },
                  "nodeType": "YulIf",
                  "src": "384:42:81"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "435:17:81",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "445:7:81"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "435:6:81"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes4t_enum$_Error_$18185_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "80:9:81",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "91:7:81",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "103:6:81",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "111:6:81",
                "type": ""
              }
            ],
            "src": "14:444:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "495:95:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "512:1:81",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "519:3:81",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "524:10:81",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "515:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "515:20:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "505:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "505:31:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "505:31:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "552:1:81",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "555:4:81",
                        "type": "",
                        "value": "0x21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "545:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "545:15:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "545:15:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "576:1:81",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "579:4:81",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "569:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "569:15:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "569:15:81"
                }
              ]
            },
            "name": "panic_error_0x21",
            "nodeType": "YulFunctionDefinition",
            "src": "463:127:81"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_bytes4t_enum$_Error_$18185_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(lt(value_1, 4)) { revert(0, 0) }\n        value1 := value_1\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n}",
      "id": 81,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:3280:81",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:81",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "63:124:81",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "73:29:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "95:6:81"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "82:12:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "82:20:81"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "73:5:81"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "165:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "174:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "177:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "167:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "167:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "167:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "124:5:81"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "135:5:81"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "150:3:81",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "155:1:81",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "146:3:81"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "146:11:81"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "159:1:81",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "142:3:81"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "142:19:81"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "131:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "131:31:81"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "121:2:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "121:42:81"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "114:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "114:50:81"
                  },
                  "nodeType": "YulIf",
                  "src": "111:70:81"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "42:6:81",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "53:5:81",
                "type": ""
              }
            ],
            "src": "14:173:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "224:95:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "241:1:81",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "248:3:81",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "253:10:81",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "244:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "244:20:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "234:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "234:31:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "234:31:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "281:1:81",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "284:4:81",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "274:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "274:15:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "274:15:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "305:1:81",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "308:4:81",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "298:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "298:15:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "298:15:81"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "192:127:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "454:1008:81",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "501:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "510:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "513:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "503:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "503:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "503:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "475:7:81"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "484:9:81"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "471:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "471:23:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "496:3:81",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "467:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "467:33:81"
                  },
                  "nodeType": "YulIf",
                  "src": "464:53:81"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "526:39:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "555:9:81"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "536:18:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "536:29:81"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "526:6:81"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "574:48:81",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "607:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "618:2:81",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "603:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "603:18:81"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "584:18:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "584:38:81"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "574:6:81"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "631:42:81",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "658:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "669:2:81",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "654:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "654:18:81"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "641:12:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "641:32:81"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "631:6:81"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "682:46:81",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "713:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "724:2:81",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "709:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "709:18:81"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "696:12:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "696:32:81"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "686:6:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "737:28:81",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "747:18:81",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "741:2:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "792:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "801:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "804:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "794:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "794:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "794:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "780:6:81"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "788:2:81"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "777:2:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "777:14:81"
                  },
                  "nodeType": "YulIf",
                  "src": "774:34:81"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "817:32:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "831:9:81"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "842:6:81"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "827:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "827:22:81"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "821:2:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "897:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "906:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "909:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "899:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "899:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "899:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "876:2:81"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "880:4:81",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "872:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "872:13:81"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "887:7:81"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "868:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "868:27:81"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "861:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "861:35:81"
                  },
                  "nodeType": "YulIf",
                  "src": "858:55:81"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "922:26:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "945:2:81"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "932:12:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "932:16:81"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "926:2:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "971:22:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "973:16:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "973:18:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "973:18:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "963:2:81"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "967:2:81"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "960:2:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "960:10:81"
                  },
                  "nodeType": "YulIf",
                  "src": "957:36:81"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1002:17:81",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1016:2:81",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nodeType": "YulIdentifier",
                      "src": "1012:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1012:7:81"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "1006:2:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1028:23:81",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1048:2:81",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1042:5:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1042:9:81"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulTypedName",
                      "src": "1032:6:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1060:71:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1082:6:81"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "1106:2:81"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1110:4:81",
                                        "type": "",
                                        "value": "0x1f"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1102:3:81"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1102:13:81"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "1117:2:81"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1098:3:81"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1098:22:81"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1122:2:81",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1094:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1094:31:81"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "1127:2:81"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1090:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1090:40:81"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1078:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1078:53:81"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "1064:10:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1190:22:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1192:16:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1192:18:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1192:18:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1149:10:81"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1161:2:81"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1146:2:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1146:18:81"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1169:10:81"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1181:6:81"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "1166:2:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1166:22:81"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "1143:2:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1143:46:81"
                  },
                  "nodeType": "YulIf",
                  "src": "1140:72:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1228:2:81",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "1232:10:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1221:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1221:22:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1221:22:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1259:6:81"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "1267:2:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1252:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1252:18:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1252:18:81"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1316:16:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1325:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1328:1:81",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1318:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1318:12:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1318:12:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "1293:2:81"
                              },
                              {
                                "name": "_3",
                                "nodeType": "YulIdentifier",
                                "src": "1297:2:81"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1289:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1289:11:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1302:2:81",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1285:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1285:20:81"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1307:7:81"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1282:2:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1282:33:81"
                  },
                  "nodeType": "YulIf",
                  "src": "1279:53:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1358:6:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1366:2:81",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1354:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1354:15:81"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "1375:2:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1379:2:81",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1371:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1371:11:81"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "1384:2:81"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "1341:12:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1341:46:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1341:46:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1411:6:81"
                              },
                              {
                                "name": "_3",
                                "nodeType": "YulIdentifier",
                                "src": "1419:2:81"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1407:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1407:15:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1424:2:81",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1403:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1403:24:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1429:1:81",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1396:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1396:35:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1396:35:81"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1440:16:81",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "1450:6:81"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "1440:6:81"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "396:9:81",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "407:7:81",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "419:6:81",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "427:6:81",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "435:6:81",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "443:6:81",
                "type": ""
              }
            ],
            "src": "324:1138:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1566:103:81",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1576:26:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1588:9:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1599:2:81",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1584:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1584:18:81"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1576:4:81"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1618:9:81"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1633:6:81"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1645:3:81",
                                "type": "",
                                "value": "224"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1650:10:81",
                                "type": "",
                                "value": "0xffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "1641:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1641:20:81"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1629:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1629:33:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1611:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1611:52:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1611:52:81"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1535:9:81",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1546:6:81",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1557:4:81",
                "type": ""
              }
            ],
            "src": "1467:202:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1706:95:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1723:1:81",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1730:3:81",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1735:10:81",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "1726:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1726:20:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1716:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1716:31:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1716:31:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1763:1:81",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1766:4:81",
                        "type": "",
                        "value": "0x21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1756:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1756:15:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1756:15:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1787:1:81",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1790:4:81",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "1780:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1780:15:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1780:15:81"
                }
              ]
            },
            "name": "panic_error_0x21",
            "nodeType": "YulFunctionDefinition",
            "src": "1674:127:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1980:179:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1997:9:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2008:2:81",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1990:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1990:21:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1990:21:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2031:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2042:2:81",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2027:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2027:18:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2047:2:81",
                        "type": "",
                        "value": "29"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2020:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2020:30:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2020:30:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2070:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2081:2:81",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2066:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2066:18:81"
                      },
                      {
                        "hexValue": "45524337323152656365697665724d6f636b3a20726576657274696e67",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2086:31:81",
                        "type": "",
                        "value": "ERC721ReceiverMock: reverting"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2059:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2059:59:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2059:59:81"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2127:26:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2139:9:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2150:2:81",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2135:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2135:18:81"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2127:4:81"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0dbe0f4c3249a8de74f224ef53fef2e300747c9f34527e99ce6490bf6e04eb76__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1957:9:81",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1971:4:81",
                "type": ""
              }
            ],
            "src": "1806:353:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2210:171:81",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2241:111:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2262:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2269:3:81",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2274:10:81",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "2265:3:81"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2265:20:81"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2255:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2255:31:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2255:31:81"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2306:1:81",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2309:4:81",
                              "type": "",
                              "value": "0x12"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2299:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2299:15:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2299:15:81"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2334:1:81",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2337:4:81",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2327:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2327:15:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2327:15:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "2230:1:81"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2223:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2223:9:81"
                  },
                  "nodeType": "YulIf",
                  "src": "2220:132:81"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2361:14:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "2370:1:81"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "2373:1:81"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "2366:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2366:9:81"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "2361:1:81"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "2195:1:81",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "2198:1:81",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "2204:1:81",
                "type": ""
              }
            ],
            "src": "2164:217:81"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2617:661:81",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2627:29:81",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2645:3:81",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2650:1:81",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "2641:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2641:11:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2654:1:81",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "2637:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2637:19:81"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "2631:2:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2672:9:81"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2687:6:81"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "2695:2:81"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2683:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2683:15:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2665:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2665:34:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2665:34:81"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2708:12:81",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2718:2:81",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "2712:2:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2740:9:81"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "2751:2:81"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2736:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2736:18:81"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "2760:6:81"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "2768:2:81"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2756:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2756:15:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2729:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2729:43:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2729:43:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2792:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2803:2:81",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2788:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2788:18:81"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "2808:6:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2781:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2781:34:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2781:34:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2835:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2846:2:81",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2831:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2831:18:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2851:3:81",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2824:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2824:31:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2824:31:81"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2864:27:81",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "2884:6:81"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "2878:5:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2878:13:81"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "2868:6:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2911:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2922:3:81",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2907:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2907:19:81"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2928:6:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2900:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2900:35:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2900:35:81"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2944:10:81",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2953:1:81",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "2948:1:81",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3013:91:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "3042:9:81"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "3053:1:81"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3038:3:81"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3038:17:81"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3057:3:81",
                                  "type": "",
                                  "value": "192"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3034:3:81"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3034:27:81"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "3077:6:81"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3085:1:81"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3073:3:81"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3073:14:81"
                                    },
                                    {
                                      "name": "_2",
                                      "nodeType": "YulIdentifier",
                                      "src": "3089:2:81"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3069:3:81"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3069:23:81"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3063:5:81"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3063:30:81"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3027:6:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3027:67:81"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3027:67:81"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "2974:1:81"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2977:6:81"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "2971:2:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2971:13:81"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "2985:19:81",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2987:15:81",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "2996:1:81"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "2999:2:81"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2992:3:81"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2992:10:81"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "2987:1:81"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "2967:3:81",
                    "statements": []
                  },
                  "src": "2963:141:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3128:9:81"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "3139:6:81"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3124:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3124:22:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3148:3:81",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3120:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3120:32:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3154:1:81",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3113:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3113:43:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3113:43:81"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3165:63:81",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3181:9:81"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3200:6:81"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3208:2:81",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3196:3:81"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3196:15:81"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3217:2:81",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "3213:3:81"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3213:7:81"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "3192:3:81"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3192:29:81"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3177:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3177:45:81"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3224:3:81",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3173:3:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3173:55:81"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3165:4:81"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3248:9:81"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3259:3:81",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3244:3:81"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3244:19:81"
                      },
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "3265:6:81"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3237:6:81"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3237:35:81"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3237:35:81"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr_t_uint256__to_t_address_t_address_t_uint256_t_bytes_memory_ptr_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2554:9:81",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "2565:6:81",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2573:6:81",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2581:6:81",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2589:6:81",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2597:6:81",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2608:4:81",
                "type": ""
              }
            ],
            "src": "2386:892:81"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value3 := memPtr\n    }\n    function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, shl(224, 0xffffffff)))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_0dbe0f4c3249a8de74f224ef53fef2e300747c9f34527e99ce6490bf6e04eb76__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), \"ERC721ReceiverMock: reverting\")\n        tail := add(headStart, 96)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr_t_uint256__to_t_address_t_address_t_uint256_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        let _2 := 32\n        mstore(add(headStart, _2), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 160)\n        let length := mload(value3)\n        mstore(add(headStart, 160), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _2) }\n        {\n            mstore(add(add(headStart, i), 192), mload(add(add(value3, i), _2)))\n        }\n        mstore(add(add(headStart, length), 192), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 192)\n        mstore(add(headStart, 128), value4)\n    }\n}",
      "id": 81,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "126:999:69:-:0;;;458:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;508:16:69;;;;543:5;534:14;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;458:97;;126:999;;14:444:81;103:6;111;164:2;152:9;143:7;139:23;135:32;132:52;;;180:1;177;170:12;132:52;206:16;;-1:-1:-1;;;;;;251:32:81;;241:43;;231:71;;298:1;295;288:12;231:71;371:2;356:18;;350:25;321:5;;-1:-1:-1;406:1:81;394:14;;384:42;;422:1;419;412:12;384:42;445:7;435:17;;;14:444;;;;;:::o;463:127::-;524:10;519:3;515:20;512:1;505:31;555:4;552:1;545:15;579:4;576:1;569:15;463:127;126:999:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "126:999:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;561:562;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;1629:33:81;;;1611:52;;1599:2;1584:18;561:562:69;;;;;;;;718:6;750:23;740:6;:33;;;;;;;;:::i;:::-;;736:292;;789:39;;-1:-1:-1;;;789:39:69;;2008:2:81;789:39:69;;;1990:21:81;2047:2;2027:18;;;2020:30;2086:31;2066:18;;;2059:59;2135:18;;789:39:69;;;;;;;736:292;859:26;849:6;:36;;;;;;;;:::i;:::-;;845:183;;901:8;;;845:183;940:11;930:6;:21;;;;;;;;:::i;:::-;;926:102;;967:9;979:23;967:9;;979:23;:::i;:::-;-1:-1:-1;;926:102:69;1042:50;1051:8;1061:4;1067:7;1076:4;1082:9;1042:50;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;1109:7:69;561:562;;;;;;:::o;14:173:81:-;82:20;;-1:-1:-1;;;;;131:31:81;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:127::-;253:10;248:3;244:20;241:1;234:31;284:4;281:1;274:15;308:4;305:1;298:15;324:1138;419:6;427;435;443;496:3;484:9;475:7;471:23;467:33;464:53;;;513:1;510;503:12;464:53;536:29;555:9;536:29;:::i;:::-;526:39;;584:38;618:2;607:9;603:18;584:38;:::i;:::-;574:48;;669:2;658:9;654:18;641:32;631:42;;724:2;713:9;709:18;696:32;747:18;788:2;780:6;777:14;774:34;;;804:1;801;794:12;774:34;842:6;831:9;827:22;817:32;;887:7;880:4;876:2;872:13;868:27;858:55;;909:1;906;899:12;858:55;945:2;932:16;967:2;963;960:10;957:36;;;973:18;;:::i;:::-;1048:2;1042:9;1016:2;1102:13;;-1:-1:-1;;1098:22:81;;;1122:2;1094:31;1090:40;1078:53;;;1146:18;;;1166:22;;;1143:46;1140:72;;;1192:18;;:::i;:::-;1232:10;1228:2;1221:22;1267:2;1259:6;1252:18;1307:7;1302:2;1297;1293;1289:11;1285:20;1282:33;1279:53;;;1328:1;1325;1318:12;1279:53;1384:2;1379;1375;1371:11;1366:2;1358:6;1354:15;1341:46;1429:1;1424:2;1419;1411:6;1407:15;1403:24;1396:35;1450:6;1440:16;;;;;;;324:1138;;;;;;;:::o;1674:127::-;1735:10;1730:3;1726:20;1723:1;1716:31;1766:4;1763:1;1756:15;1790:4;1787:1;1780:15;2164:217;2204:1;2230;2220:132;;2274:10;2269:3;2265:20;2262:1;2255:31;2309:4;2306:1;2299:15;2337:4;2334:1;2327:15;2220:132;-1:-1:-1;2366:9:81;;2164:217::o;2386:892::-;2608:4;2654:1;2650;2645:3;2641:11;2637:19;2695:2;2687:6;2683:15;2672:9;2665:34;2718:2;2768;2760:6;2756:15;2751:2;2740:9;2736:18;2729:43;2808:6;2803:2;2792:9;2788:18;2781:34;2851:3;2846:2;2835:9;2831:18;2824:31;2884:6;2878:13;2864:27;;2928:6;2922:3;2911:9;2907:19;2900:35;2953:1;2963:141;2977:6;2974:1;2971:13;2963:141;;;3073:14;;;3069:23;;3063:30;3038:17;;;3057:3;3034:27;3027:67;2992:10;;2963:141;;;2967:3;;3154:1;3148:3;3139:6;3128:9;3124:22;3120:32;3113:43;3224:3;3217:2;3213:7;3208:2;3200:6;3196:15;3192:29;3181:9;3177:45;3173:55;3165:63;;;3265:6;3259:3;3248:9;3244:19;3237:35;2386:892;;;;;;;;:::o",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\";\n\ncontract ERC721ReceiverMock is IERC721Receiver {\n    enum Error {\n        None,\n        RevertWithMessage,\n        RevertWithoutMessage,\n        Panic\n    }\n\n    bytes4 private immutable _retval;\n    Error private immutable _error;\n\n    event Received(address operator, address from, uint256 tokenId, bytes data, uint256 gas);\n\n    constructor(bytes4 retval, Error error) {\n        _retval = retval;\n        _error = error;\n    }\n\n    function onERC721Received(\n        address operator,\n        address from,\n        uint256 tokenId,\n        bytes memory data\n    ) public override returns (bytes4) {\n        if (_error == Error.RevertWithMessage) {\n            revert(\"ERC721ReceiverMock: reverting\");\n        } else if (_error == Error.RevertWithoutMessage) {\n            revert();\n        } else if (_error == Error.Panic) {\n            uint256 a = uint256(0) / uint256(0);\n            a;\n        }\n        emit Received(operator, from, tokenId, data, gasleft());\n        return _retval;\n    }\n}\n",
  "sourcePath": "/Users/chung/git/manifoldxyz/solidity/creator-core-solidity/contracts/mocks/token/ERC721ReceiverMock.sol",
  "ast": {
    "absolutePath": "project:/contracts/mocks/token/ERC721ReceiverMock.sol",
    "exportedSymbols": {
      "ERC721ReceiverMock": [
        18285
      ],
      "IERC721Receiver": [
        1523
      ]
    },
    "id": 18286,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18177,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:23:69"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
        "file": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
        "id": 18178,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18286,
        "sourceUnit": 1524,
        "src": "58:66:69",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 18179,
              "name": "IERC721Receiver",
              "nameLocations": [
                "157:15:69"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1523,
              "src": "157:15:69"
            },
            "id": 18180,
            "nodeType": "InheritanceSpecifier",
            "src": "157:15:69"
          }
        ],
        "canonicalName": "ERC721ReceiverMock",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 18285,
        "linearizedBaseContracts": [
          18285,
          1523
        ],
        "name": "ERC721ReceiverMock",
        "nameLocation": "135:18:69",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ERC721ReceiverMock.Error",
            "id": 18185,
            "members": [
              {
                "id": 18181,
                "name": "None",
                "nameLocation": "200:4:69",
                "nodeType": "EnumValue",
                "src": "200:4:69"
              },
              {
                "id": 18182,
                "name": "RevertWithMessage",
                "nameLocation": "214:17:69",
                "nodeType": "EnumValue",
                "src": "214:17:69"
              },
              {
                "id": 18183,
                "name": "RevertWithoutMessage",
                "nameLocation": "241:20:69",
                "nodeType": "EnumValue",
                "src": "241:20:69"
              },
              {
                "id": 18184,
                "name": "Panic",
                "nameLocation": "271:5:69",
                "nodeType": "EnumValue",
                "src": "271:5:69"
              }
            ],
            "name": "Error",
            "nameLocation": "184:5:69",
            "nodeType": "EnumDefinition",
            "src": "179:103:69"
          },
          {
            "constant": false,
            "id": 18187,
            "mutability": "immutable",
            "name": "_retval",
            "nameLocation": "313:7:69",
            "nodeType": "VariableDeclaration",
            "scope": 18285,
            "src": "288:32:69",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 18186,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "288:6:69",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 18190,
            "mutability": "immutable",
            "name": "_error",
            "nameLocation": "350:6:69",
            "nodeType": "VariableDeclaration",
            "scope": 18285,
            "src": "326:30:69",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_enum$_Error_$18185",
              "typeString": "enum ERC721ReceiverMock.Error"
            },
            "typeName": {
              "id": 18189,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 18188,
                "name": "Error",
                "nameLocations": [
                  "326:5:69"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 18185,
                "src": "326:5:69"
              },
              "referencedDeclaration": 18185,
              "src": "326:5:69",
              "typeDescriptions": {
                "typeIdentifier": "t_enum$_Error_$18185",
                "typeString": "enum ERC721ReceiverMock.Error"
              }
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "eventSelector": "28fa6e16458f9c24aa59ddd4085264573006dbe30304837873c7deafc702b038",
            "id": 18202,
            "name": "Received",
            "nameLocation": "369:8:69",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18192,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "386:8:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18202,
                  "src": "378:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18191,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "378:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18194,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "404:4:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18202,
                  "src": "396:12:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18193,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "396:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18196,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "418:7:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18202,
                  "src": "410:15:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18195,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "410:7:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18198,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "433:4:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18202,
                  "src": "427:10:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 18197,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "427:5:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18200,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "gas",
                  "nameLocation": "447:3:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18202,
                  "src": "439:11:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "439:7:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "377:74:69"
            },
            "src": "363:89:69"
          },
          {
            "body": {
              "id": 18218,
              "nodeType": "Block",
              "src": "498:57:69",
              "statements": [
                {
                  "expression": {
                    "id": 18212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 18210,
                      "name": "_retval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18187,
                      "src": "508:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18211,
                      "name": "retval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18204,
                      "src": "518:6:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "508:16:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 18213,
                  "nodeType": "ExpressionStatement",
                  "src": "508:16:69"
                },
                {
                  "expression": {
                    "id": 18216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 18214,
                      "name": "_error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18190,
                      "src": "534:6:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$18185",
                        "typeString": "enum ERC721ReceiverMock.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18215,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18207,
                      "src": "543:5:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$18185",
                        "typeString": "enum ERC721ReceiverMock.Error"
                      }
                    },
                    "src": "534:14:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$18185",
                      "typeString": "enum ERC721ReceiverMock.Error"
                    }
                  },
                  "id": 18217,
                  "nodeType": "ExpressionStatement",
                  "src": "534:14:69"
                }
              ]
            },
            "id": 18219,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18204,
                  "mutability": "mutable",
                  "name": "retval",
                  "nameLocation": "477:6:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18219,
                  "src": "470:13:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 18203,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "470:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18207,
                  "mutability": "mutable",
                  "name": "error",
                  "nameLocation": "491:5:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18219,
                  "src": "485:11:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$18185",
                    "typeString": "enum ERC721ReceiverMock.Error"
                  },
                  "typeName": {
                    "id": 18206,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 18205,
                      "name": "Error",
                      "nameLocations": [
                        "485:5:69"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 18185,
                      "src": "485:5:69"
                    },
                    "referencedDeclaration": 18185,
                    "src": "485:5:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$18185",
                      "typeString": "enum ERC721ReceiverMock.Error"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "469:28:69"
            },
            "returnParameters": {
              "id": 18209,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "498:0:69"
            },
            "scope": 18285,
            "src": "458:97:69",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1522
            ],
            "body": {
              "id": 18283,
              "nodeType": "Block",
              "src": "726:397:69",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_Error_$18185",
                      "typeString": "enum ERC721ReceiverMock.Error"
                    },
                    "id": 18236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 18233,
                      "name": "_error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18190,
                      "src": "740:6:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$18185",
                        "typeString": "enum ERC721ReceiverMock.Error"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 18234,
                        "name": "Error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18185,
                        "src": "750:5:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Error_$18185_$",
                          "typeString": "type(enum ERC721ReceiverMock.Error)"
                        }
                      },
                      "id": 18235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "756:17:69",
                      "memberName": "RevertWithMessage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18182,
                      "src": "750:23:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$18185",
                        "typeString": "enum ERC721ReceiverMock.Error"
                      }
                    },
                    "src": "740:33:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_enum$_Error_$18185",
                        "typeString": "enum ERC721ReceiverMock.Error"
                      },
                      "id": 18245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 18242,
                        "name": "_error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18190,
                        "src": "849:6:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$18185",
                          "typeString": "enum ERC721ReceiverMock.Error"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 18243,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18185,
                          "src": "859:5:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$18185_$",
                            "typeString": "type(enum ERC721ReceiverMock.Error)"
                          }
                        },
                        "id": 18244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "865:20:69",
                        "memberName": "RevertWithoutMessage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18183,
                        "src": "859:26:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$18185",
                          "typeString": "enum ERC721ReceiverMock.Error"
                        }
                      },
                      "src": "849:36:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$18185",
                          "typeString": "enum ERC721ReceiverMock.Error"
                        },
                        "id": 18253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 18250,
                          "name": "_error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18190,
                          "src": "930:6:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$18185",
                            "typeString": "enum ERC721ReceiverMock.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 18251,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18185,
                            "src": "940:5:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$18185_$",
                              "typeString": "type(enum ERC721ReceiverMock.Error)"
                            }
                          },
                          "id": 18252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "946:5:69",
                          "memberName": "Panic",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18184,
                          "src": "940:11:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$18185",
                            "typeString": "enum ERC721ReceiverMock.Error"
                          }
                        },
                        "src": "930:21:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 18269,
                      "nodeType": "IfStatement",
                      "src": "926:102:69",
                      "trueBody": {
                        "id": 18268,
                        "nodeType": "Block",
                        "src": "953:75:69",
                        "statements": [
                          {
                            "assignments": [
                              18255
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 18255,
                                "mutability": "mutable",
                                "name": "a",
                                "nameLocation": "975:1:69",
                                "nodeType": "VariableDeclaration",
                                "scope": 18268,
                                "src": "967:9:69",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 18254,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "967:7:69",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 18265,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 18264,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 18258,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "987:1:69",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 18257,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "979:7:69",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 18256,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "979:7:69",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 18259,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "979:10:69",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 18262,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1000:1:69",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 18261,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "992:7:69",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 18260,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "992:7:69",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 18263,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "992:10:69",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "979:23:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "967:35:69"
                          },
                          {
                            "expression": {
                              "id": 18266,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18255,
                              "src": "1016:1:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 18267,
                            "nodeType": "ExpressionStatement",
                            "src": "1016:1:69"
                          }
                        ]
                      }
                    },
                    "id": 18270,
                    "nodeType": "IfStatement",
                    "src": "845:183:69",
                    "trueBody": {
                      "id": 18249,
                      "nodeType": "Block",
                      "src": "887:33:69",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 18246,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4294967277,
                                4294967277
                              ],
                              "referencedDeclaration": 4294967277,
                              "src": "901:6:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 18247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "901:8:69",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 18248,
                          "nodeType": "ExpressionStatement",
                          "src": "901:8:69"
                        }
                      ]
                    }
                  },
                  "id": 18271,
                  "nodeType": "IfStatement",
                  "src": "736:292:69",
                  "trueBody": {
                    "id": 18241,
                    "nodeType": "Block",
                    "src": "775:64:69",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "45524337323152656365697665724d6f636b3a20726576657274696e67",
                              "id": 18238,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "796:31:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0dbe0f4c3249a8de74f224ef53fef2e300747c9f34527e99ce6490bf6e04eb76",
                                "typeString": "literal_string \"ERC721ReceiverMock: reverting\""
                              },
                              "value": "ERC721ReceiverMock: reverting"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_0dbe0f4c3249a8de74f224ef53fef2e300747c9f34527e99ce6490bf6e04eb76",
                                "typeString": "literal_string \"ERC721ReceiverMock: reverting\""
                              }
                            ],
                            "id": 18237,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967277,
                              4294967277
                            ],
                            "referencedDeclaration": 4294967277,
                            "src": "789:6:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 18239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "789:39:69",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 18240,
                        "nodeType": "ExpressionStatement",
                        "src": "789:39:69"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 18273,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18221,
                        "src": "1051:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18274,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18223,
                        "src": "1061:4:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18275,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18225,
                        "src": "1067:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 18276,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18227,
                        "src": "1076:4:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 18277,
                          "name": "gasleft",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967289,
                          "src": "1082:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 18278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1082:9:69",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18272,
                      "name": "Received",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18202,
                      "src": "1042:8:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory,uint256)"
                      }
                    },
                    "id": 18279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1042:50:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18280,
                  "nodeType": "EmitStatement",
                  "src": "1037:55:69"
                },
                {
                  "expression": {
                    "id": 18281,
                    "name": "_retval",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18187,
                    "src": "1109:7:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 18232,
                  "id": 18282,
                  "nodeType": "Return",
                  "src": "1102:14:69"
                }
              ]
            },
            "functionSelector": "150b7a02",
            "id": 18284,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onERC721Received",
            "nameLocation": "570:16:69",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 18229,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "700:8:69"
            },
            "parameters": {
              "id": 18228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18221,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "604:8:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18284,
                  "src": "596:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "596:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18223,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "630:4:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18284,
                  "src": "622:12:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18222,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "622:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18225,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "652:7:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18284,
                  "src": "644:15:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18224,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "644:7:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18227,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "682:4:69",
                  "nodeType": "VariableDeclaration",
                  "scope": 18284,
                  "src": "669:17:69",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 18226,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "669:5:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "586:106:69"
            },
            "returnParameters": {
              "id": 18232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18231,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 18284,
                  "src": "718:6:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 18230,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "718:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "717:8:69"
            },
            "scope": 18285,
            "src": "561:562:69",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18286,
        "src": "126:999:69",
        "usedErrors": []
      }
    ],
    "src": "33:1093:69"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.19+commit.7dd6d404.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.12",
  "updatedAt": "2023-03-22T17:07:39.831Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "onERC721Received(address,address,uint256,bytes)": {
        "details": "Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}