{
    "contractName": "MinLibBytes",
    "abi": [],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol\":\"MinLibBytes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol\":{\"keccak256\":\"0xa61a3d8fcd89182975d0bd17b86c22b6affd2f7bf26db66b1ddb2ee396f122ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0bc21e2c8c2f483aee9d5bc003fa77dc7afddbaa7cc99560581a416cfdef11\",\"dweb:/ipfs/QmbwLE7AJpoH2LVeeHxewq3tf1vXhLNUdYsubWxzDGKfTr\"]}},\"version\":1}",
    "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205b5781ce17237d6783cc2ec5f372cea5807f4b3faa37f186cdd96111cbbeca7664736f6c63430008070033",
    "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205b5781ce17237d6783cc2ec5f372cea5807f4b3faa37f186cdd96111cbbeca7664736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "182:2874:41:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;182:2874:41;;;;;;;;;;;;;;;;;",
    "deployedSourceMap": "182:2874:41:-:0;;;;;;;;",
    "source": "pragma solidity ^0.8.0;\n\n// SPDX-License-Identifier: MIT\n// minimal bytes manipulation required by GSN\n// a minimal subset from 0x/LibBytes\n/* solhint-disable no-inline-assembly */\n\nlibrary MinLibBytes {\n\n    //truncate the given parameter (in-place) if its length is above the given maximum length\n    // do nothing otherwise.\n    //NOTE: solidity warns unless the method is marked \"pure\", but it DOES modify its parameter.\n    function truncateInPlace(bytes memory data, uint256 maxlen) internal pure {\n        if (data.length > maxlen) {\n            assembly { mstore(data, maxlen) }\n        }\n    }\n\n    /// @dev Reads an address from a position in a byte array.\n    /// @param b Byte array containing an address.\n    /// @param index Index in byte array of address.\n    /// @return result address from byte array.\n    function readAddress(\n        bytes memory b,\n        uint256 index\n    )\n        internal\n        pure\n        returns (address result)\n    {\n        require (b.length >= index + 20, \"readAddress: data too short\");\n\n        // Add offset to index:\n        // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n        // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n        index += 20;\n\n        // Read address from array memory\n        assembly {\n            // 1. Add index to address of bytes array\n            // 2. Load 32-byte word from memory\n            // 3. Apply 20-byte mask to obtain address\n            result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n        }\n        return result;\n    }\n\n    function readBytes32(\n        bytes memory b,\n        uint256 index\n    )\n        internal\n        pure\n        returns (bytes32 result)\n    {\n        require(b.length >= index + 32, \"readBytes32: data too short\" );\n\n        // Read the bytes32 from array memory\n        assembly {\n            result := mload(add(b, add(index,32)))\n        }\n        return result;\n    }\n\n    /// @dev Reads a uint256 value from a position in a byte array.\n    /// @param b Byte array containing a uint256 value.\n    /// @param index Index in byte array of uint256 value.\n    /// @return result uint256 value from byte array.\n    function readUint256(\n        bytes memory b,\n        uint256 index\n    )\n        internal\n        pure\n        returns (uint256 result)\n    {\n        result = uint256(readBytes32(b, index));\n        return result;\n    }\n\n    function readBytes4(\n        bytes memory b,\n        uint256 index\n    )\n        internal\n        pure\n        returns (bytes4 result)\n    {\n        require(b.length >= index + 4, \"readBytes4: data too short\");\n\n        // Read the bytes4 from array memory\n        assembly {\n            result := mload(add(b, add(index,32)))\n            // Solidity does not require us to clean the trailing bytes.\n            // We do it anyway\n            result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n        }\n        return result;\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol",
        "exportedSymbols": {
            "MinLibBytes": [
                8687
            ]
        },
        "id": 8688,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 8574,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:41"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "fullyImplemented": true,
                "id": 8687,
                "linearizedBaseContracts": [
                    8687
                ],
                "name": "MinLibBytes",
                "nameLocation": "190:11:41",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 8588,
                            "nodeType": "Block",
                            "src": "503:99:41",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 8584,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 8581,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8576,
                                                "src": "517:4:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            "id": 8582,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "517:11:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "id": 8583,
                                            "name": "maxlen",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8578,
                                            "src": "531:6:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "517:20:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 8587,
                                    "nodeType": "IfStatement",
                                    "src": "513:83:41",
                                    "trueBody": {
                                        "id": 8586,
                                        "nodeType": "Block",
                                        "src": "539:57:41",
                                        "statements": [
                                            {
                                                "AST": {
                                                    "nodeType": "YulBlock",
                                                    "src": "562:24:41",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "name": "data",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "571:4:41"
                                                                    },
                                                                    {
                                                                        "name": "maxlen",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "577:6:41"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mstore",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "564:6:41"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "564:20:41"
                                                            },
                                                            "nodeType": "YulExpressionStatement",
                                                            "src": "564:20:41"
                                                        }
                                                    ]
                                                },
                                                "evmVersion": "london",
                                                "externalReferences": [
                                                    {
                                                        "declaration": 8576,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "571:4:41",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 8578,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "577:6:41",
                                                        "valueSize": 1
                                                    }
                                                ],
                                                "id": 8585,
                                                "nodeType": "InlineAssembly",
                                                "src": "553:33:41"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 8589,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "truncateInPlace",
                        "nameLocation": "438:15:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8579,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8576,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nameLocation": "467:4:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8589,
                                    "src": "454:17:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8575,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "454:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8578,
                                    "mutability": "mutable",
                                    "name": "maxlen",
                                    "nameLocation": "481:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8589,
                                    "src": "473:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8577,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "473:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "453:35:41"
                        },
                        "returnParameters": {
                            "id": 8580,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "503:0:41"
                        },
                        "scope": 8687,
                        "src": "429:173:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8616,
                            "nodeType": "Block",
                            "src": "964:673:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 8605,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 8600,
                                                        "name": "b",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8592,
                                                        "src": "983:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 8601,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "983:8:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 8604,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 8602,
                                                        "name": "index",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8594,
                                                        "src": "995:5:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "hexValue": "3230",
                                                        "id": 8603,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1003:2:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_20_by_1",
                                                            "typeString": "int_const 20"
                                                        },
                                                        "value": "20"
                                                    },
                                                    "src": "995:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "983:22:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656164416464726573733a206461746120746f6f2073686f7274",
                                                "id": 8606,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1007:29:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0ff21d28ab53e736b05938ba9d5748dcb979d78d4c19815de87213f62c5dfe9a",
                                                    "typeString": "literal_string \"readAddress: data too short\""
                                                },
                                                "value": "readAddress: data too short"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0ff21d28ab53e736b05938ba9d5748dcb979d78d4c19815de87213f62c5dfe9a",
                                                    "typeString": "literal_string \"readAddress: data too short\""
                                                }
                                            ],
                                            "id": 8599,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "974:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8607,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "974:63:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8608,
                                    "nodeType": "ExpressionStatement",
                                    "src": "974:63:41"
                                },
                                {
                                    "expression": {
                                        "id": 8611,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 8609,
                                            "name": "index",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8594,
                                            "src": "1275:5:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "hexValue": "3230",
                                            "id": 8610,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1284:2:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_20_by_1",
                                                "typeString": "int_const 20"
                                            },
                                            "value": "20"
                                        },
                                        "src": "1275:11:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 8612,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1275:11:41"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "1348:260:41",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "1519:79:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "b",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "1543:1:41"
                                                                        },
                                                                        {
                                                                            "name": "index",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "1546:5:41"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "1539:3:41"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "1539:13:41"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "mload",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1533:5:41"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1533:20:41"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1555:42:41",
                                                            "type": "",
                                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1529:3:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1529:69:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1519:6:41"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 8592,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1543:1:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8594,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1546:5:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8597,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1519:6:41",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 8613,
                                    "nodeType": "InlineAssembly",
                                    "src": "1339:269:41"
                                },
                                {
                                    "expression": {
                                        "id": 8614,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8597,
                                        "src": "1624:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 8598,
                                    "id": 8615,
                                    "nodeType": "Return",
                                    "src": "1617:13:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 8590,
                            "nodeType": "StructuredDocumentation",
                            "src": "608:210:41",
                            "text": "@dev Reads an address from a position in a byte array.\n @param b Byte array containing an address.\n @param index Index in byte array of address.\n @return result address from byte array."
                        },
                        "id": 8617,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readAddress",
                        "nameLocation": "832:11:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8595,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8592,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "866:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8617,
                                    "src": "853:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8591,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "853:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8594,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "885:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8617,
                                    "src": "877:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8593,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "877:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "843:53:41"
                        },
                        "returnParameters": {
                            "id": 8598,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8597,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "952:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8617,
                                    "src": "944:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 8596,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "944:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "943:16:41"
                        },
                        "scope": 8687,
                        "src": "823:814:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8639,
                            "nodeType": "Block",
                            "src": "1784:230:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 8632,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 8627,
                                                        "name": "b",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8619,
                                                        "src": "1802:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 8628,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1802:8:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 8631,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 8629,
                                                        "name": "index",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8621,
                                                        "src": "1814:5:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "hexValue": "3332",
                                                        "id": 8630,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1822:2:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                        },
                                                        "value": "32"
                                                    },
                                                    "src": "1814:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "1802:22:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656164427974657333323a206461746120746f6f2073686f7274",
                                                "id": 8633,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1826:29:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_767dc5ed40d0b25ea26edf167fbb901f3024eaabad14c9340870a684e6339d57",
                                                    "typeString": "literal_string \"readBytes32: data too short\""
                                                },
                                                "value": "readBytes32: data too short"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_767dc5ed40d0b25ea26edf167fbb901f3024eaabad14c9340870a684e6339d57",
                                                    "typeString": "literal_string \"readBytes32: data too short\""
                                                }
                                            ],
                                            "id": 8626,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "1794:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8634,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1794:63:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8635,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1794:63:41"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "1923:62:41",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "1937:38:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "b",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "1957:1:41"
                                                                },
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "index",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "1964:5:41"
                                                                        },
                                                                        {
                                                                            "kind": "number",
                                                                            "nodeType": "YulLiteral",
                                                                            "src": "1970:2:41",
                                                                            "type": "",
                                                                            "value": "32"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "1960:3:41"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "1960:13:41"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1953:3:41"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1953:21:41"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1947:5:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1947:28:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1937:6:41"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 8619,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1957:1:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8621,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1964:5:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8624,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1937:6:41",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 8636,
                                    "nodeType": "InlineAssembly",
                                    "src": "1914:71:41"
                                },
                                {
                                    "expression": {
                                        "id": 8637,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8624,
                                        "src": "2001:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 8625,
                                    "id": 8638,
                                    "nodeType": "Return",
                                    "src": "1994:13:41"
                                }
                            ]
                        },
                        "id": 8640,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readBytes32",
                        "nameLocation": "1652:11:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8622,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8619,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "1686:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8640,
                                    "src": "1673:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8618,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1673:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8621,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "1705:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8640,
                                    "src": "1697:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8620,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1697:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1663:53:41"
                        },
                        "returnParameters": {
                            "id": 8625,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8624,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "1772:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8640,
                                    "src": "1764:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 8623,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1764:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1763:16:41"
                        },
                        "scope": 8687,
                        "src": "1643:371:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8662,
                            "nodeType": "Block",
                            "src": "2398:79:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 8658,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 8650,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8648,
                                            "src": "2408:6:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "arguments": [
                                                        {
                                                            "id": 8654,
                                                            "name": "b",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 8643,
                                                            "src": "2437:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "id": 8655,
                                                            "name": "index",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 8645,
                                                            "src": "2440:5:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 8653,
                                                        "name": "readBytes32",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8640,
                                                        "src": "2425:11:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                                            "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                                        }
                                                    },
                                                    "id": 8656,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2425:21:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                ],
                                                "id": 8652,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "2417:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 8651,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2417:7:41",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 8657,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2417:30:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2408:39:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 8659,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2408:39:41"
                                },
                                {
                                    "expression": {
                                        "id": 8660,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8648,
                                        "src": "2464:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 8649,
                                    "id": 8661,
                                    "nodeType": "Return",
                                    "src": "2457:13:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 8641,
                            "nodeType": "StructuredDocumentation",
                            "src": "2020:232:41",
                            "text": "@dev Reads a uint256 value from a position in a byte array.\n @param b Byte array containing a uint256 value.\n @param index Index in byte array of uint256 value.\n @return result uint256 value from byte array."
                        },
                        "id": 8663,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readUint256",
                        "nameLocation": "2266:11:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8646,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8643,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "2300:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8663,
                                    "src": "2287:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8642,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2287:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8645,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "2319:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8663,
                                    "src": "2311:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8644,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2311:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2277:53:41"
                        },
                        "returnParameters": {
                            "id": 8649,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8648,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "2386:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8663,
                                    "src": "2378:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8647,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2378:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2377:16:41"
                        },
                        "scope": 8687,
                        "src": "2257:220:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8685,
                            "nodeType": "Block",
                            "src": "2622:432:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 8678,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 8673,
                                                        "name": "b",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8665,
                                                        "src": "2640:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 8674,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2640:8:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 8677,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 8675,
                                                        "name": "index",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8667,
                                                        "src": "2652:5:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "hexValue": "34",
                                                        "id": 8676,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2660:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_4_by_1",
                                                            "typeString": "int_const 4"
                                                        },
                                                        "value": "4"
                                                    },
                                                    "src": "2652:9:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2640:21:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "726561644279746573343a206461746120746f6f2073686f7274",
                                                "id": 8679,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2663:28:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e3fe8b8d7a4d7297198f00bec48c1f664c9a2ab21f2fa0d4a68337ee48c21898",
                                                    "typeString": "literal_string \"readBytes4: data too short\""
                                                },
                                                "value": "readBytes4: data too short"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e3fe8b8d7a4d7297198f00bec48c1f664c9a2ab21f2fa0d4a68337ee48c21898",
                                                    "typeString": "literal_string \"readBytes4: data too short\""
                                                }
                                            ],
                                            "id": 8672,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2632:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8680,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2632:60:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8681,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2632:60:41"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "2757:268:41",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "2771:38:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "b",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2791:1:41"
                                                                },
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "index",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2798:5:41"
                                                                        },
                                                                        {
                                                                            "kind": "number",
                                                                            "nodeType": "YulLiteral",
                                                                            "src": "2804:2:41",
                                                                            "type": "",
                                                                            "value": "32"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "2794:3:41"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "2794:13:41"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2787:3:41"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2787:21:41"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2781:5:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2781:28:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2771:6:41"
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "2926:89:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "result",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2940:6:41"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2948:66:41",
                                                            "type": "",
                                                            "value": "0xFFFFFFFF00000000000000000000000000000000000000000000000000000000"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2936:3:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2936:79:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2926:6:41"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 8665,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2791:1:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8667,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2798:5:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8670,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2771:6:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8670,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2926:6:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8670,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2940:6:41",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 8682,
                                    "nodeType": "InlineAssembly",
                                    "src": "2748:277:41"
                                },
                                {
                                    "expression": {
                                        "id": 8683,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8670,
                                        "src": "3041:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "functionReturnParameters": 8671,
                                    "id": 8684,
                                    "nodeType": "Return",
                                    "src": "3034:13:41"
                                }
                            ]
                        },
                        "id": 8686,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readBytes4",
                        "nameLocation": "2492:10:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8668,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8665,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "2525:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8686,
                                    "src": "2512:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8664,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2512:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8667,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "2544:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8686,
                                    "src": "2536:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8666,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2536:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2502:53:41"
                        },
                        "returnParameters": {
                            "id": 8671,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8670,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "2610:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8686,
                                    "src": "2603:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 8669,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2603:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2602:15:41"
                        },
                        "scope": 8687,
                        "src": "2483:571:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    }
                ],
                "scope": 8688,
                "src": "182:2874:41",
                "usedErrors": []
            }
        ],
        "src": "0:3056:41"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol",
        "exportedSymbols": {
            "MinLibBytes": [
                8687
            ]
        },
        "id": 8688,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 8574,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:41"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "fullyImplemented": true,
                "id": 8687,
                "linearizedBaseContracts": [
                    8687
                ],
                "name": "MinLibBytes",
                "nameLocation": "190:11:41",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 8588,
                            "nodeType": "Block",
                            "src": "503:99:41",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 8584,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 8581,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8576,
                                                "src": "517:4:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            "id": 8582,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "517:11:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "id": 8583,
                                            "name": "maxlen",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8578,
                                            "src": "531:6:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "517:20:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 8587,
                                    "nodeType": "IfStatement",
                                    "src": "513:83:41",
                                    "trueBody": {
                                        "id": 8586,
                                        "nodeType": "Block",
                                        "src": "539:57:41",
                                        "statements": [
                                            {
                                                "AST": {
                                                    "nodeType": "YulBlock",
                                                    "src": "562:24:41",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "name": "data",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "571:4:41"
                                                                    },
                                                                    {
                                                                        "name": "maxlen",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "577:6:41"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mstore",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "564:6:41"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "564:20:41"
                                                            },
                                                            "nodeType": "YulExpressionStatement",
                                                            "src": "564:20:41"
                                                        }
                                                    ]
                                                },
                                                "evmVersion": "london",
                                                "externalReferences": [
                                                    {
                                                        "declaration": 8576,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "571:4:41",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 8578,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "577:6:41",
                                                        "valueSize": 1
                                                    }
                                                ],
                                                "id": 8585,
                                                "nodeType": "InlineAssembly",
                                                "src": "553:33:41"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 8589,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "truncateInPlace",
                        "nameLocation": "438:15:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8579,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8576,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nameLocation": "467:4:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8589,
                                    "src": "454:17:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8575,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "454:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8578,
                                    "mutability": "mutable",
                                    "name": "maxlen",
                                    "nameLocation": "481:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8589,
                                    "src": "473:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8577,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "473:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "453:35:41"
                        },
                        "returnParameters": {
                            "id": 8580,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "503:0:41"
                        },
                        "scope": 8687,
                        "src": "429:173:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8616,
                            "nodeType": "Block",
                            "src": "964:673:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 8605,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 8600,
                                                        "name": "b",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8592,
                                                        "src": "983:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 8601,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "983:8:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 8604,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 8602,
                                                        "name": "index",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8594,
                                                        "src": "995:5:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "hexValue": "3230",
                                                        "id": 8603,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1003:2:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_20_by_1",
                                                            "typeString": "int_const 20"
                                                        },
                                                        "value": "20"
                                                    },
                                                    "src": "995:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "983:22:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656164416464726573733a206461746120746f6f2073686f7274",
                                                "id": 8606,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1007:29:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0ff21d28ab53e736b05938ba9d5748dcb979d78d4c19815de87213f62c5dfe9a",
                                                    "typeString": "literal_string \"readAddress: data too short\""
                                                },
                                                "value": "readAddress: data too short"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0ff21d28ab53e736b05938ba9d5748dcb979d78d4c19815de87213f62c5dfe9a",
                                                    "typeString": "literal_string \"readAddress: data too short\""
                                                }
                                            ],
                                            "id": 8599,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "974:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8607,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "974:63:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8608,
                                    "nodeType": "ExpressionStatement",
                                    "src": "974:63:41"
                                },
                                {
                                    "expression": {
                                        "id": 8611,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 8609,
                                            "name": "index",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8594,
                                            "src": "1275:5:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "hexValue": "3230",
                                            "id": 8610,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1284:2:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_20_by_1",
                                                "typeString": "int_const 20"
                                            },
                                            "value": "20"
                                        },
                                        "src": "1275:11:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 8612,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1275:11:41"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "1348:260:41",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "1519:79:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "b",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "1543:1:41"
                                                                        },
                                                                        {
                                                                            "name": "index",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "1546:5:41"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "1539:3:41"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "1539:13:41"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "mload",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1533:5:41"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1533:20:41"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1555:42:41",
                                                            "type": "",
                                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1529:3:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1529:69:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1519:6:41"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 8592,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1543:1:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8594,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1546:5:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8597,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1519:6:41",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 8613,
                                    "nodeType": "InlineAssembly",
                                    "src": "1339:269:41"
                                },
                                {
                                    "expression": {
                                        "id": 8614,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8597,
                                        "src": "1624:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 8598,
                                    "id": 8615,
                                    "nodeType": "Return",
                                    "src": "1617:13:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 8590,
                            "nodeType": "StructuredDocumentation",
                            "src": "608:210:41",
                            "text": "@dev Reads an address from a position in a byte array.\n @param b Byte array containing an address.\n @param index Index in byte array of address.\n @return result address from byte array."
                        },
                        "id": 8617,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readAddress",
                        "nameLocation": "832:11:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8595,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8592,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "866:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8617,
                                    "src": "853:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8591,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "853:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8594,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "885:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8617,
                                    "src": "877:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8593,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "877:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "843:53:41"
                        },
                        "returnParameters": {
                            "id": 8598,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8597,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "952:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8617,
                                    "src": "944:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 8596,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "944:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "943:16:41"
                        },
                        "scope": 8687,
                        "src": "823:814:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8639,
                            "nodeType": "Block",
                            "src": "1784:230:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 8632,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 8627,
                                                        "name": "b",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8619,
                                                        "src": "1802:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 8628,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1802:8:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 8631,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 8629,
                                                        "name": "index",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8621,
                                                        "src": "1814:5:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "hexValue": "3332",
                                                        "id": 8630,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1822:2:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                        },
                                                        "value": "32"
                                                    },
                                                    "src": "1814:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "1802:22:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656164427974657333323a206461746120746f6f2073686f7274",
                                                "id": 8633,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1826:29:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_767dc5ed40d0b25ea26edf167fbb901f3024eaabad14c9340870a684e6339d57",
                                                    "typeString": "literal_string \"readBytes32: data too short\""
                                                },
                                                "value": "readBytes32: data too short"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_767dc5ed40d0b25ea26edf167fbb901f3024eaabad14c9340870a684e6339d57",
                                                    "typeString": "literal_string \"readBytes32: data too short\""
                                                }
                                            ],
                                            "id": 8626,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "1794:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8634,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1794:63:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8635,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1794:63:41"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "1923:62:41",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "1937:38:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "b",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "1957:1:41"
                                                                },
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "index",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "1964:5:41"
                                                                        },
                                                                        {
                                                                            "kind": "number",
                                                                            "nodeType": "YulLiteral",
                                                                            "src": "1970:2:41",
                                                                            "type": "",
                                                                            "value": "32"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "1960:3:41"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "1960:13:41"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1953:3:41"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1953:21:41"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1947:5:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1947:28:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1937:6:41"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 8619,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1957:1:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8621,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1964:5:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8624,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1937:6:41",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 8636,
                                    "nodeType": "InlineAssembly",
                                    "src": "1914:71:41"
                                },
                                {
                                    "expression": {
                                        "id": 8637,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8624,
                                        "src": "2001:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 8625,
                                    "id": 8638,
                                    "nodeType": "Return",
                                    "src": "1994:13:41"
                                }
                            ]
                        },
                        "id": 8640,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readBytes32",
                        "nameLocation": "1652:11:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8622,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8619,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "1686:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8640,
                                    "src": "1673:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8618,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1673:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8621,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "1705:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8640,
                                    "src": "1697:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8620,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1697:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1663:53:41"
                        },
                        "returnParameters": {
                            "id": 8625,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8624,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "1772:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8640,
                                    "src": "1764:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 8623,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1764:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1763:16:41"
                        },
                        "scope": 8687,
                        "src": "1643:371:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8662,
                            "nodeType": "Block",
                            "src": "2398:79:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 8658,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 8650,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8648,
                                            "src": "2408:6:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "arguments": [
                                                        {
                                                            "id": 8654,
                                                            "name": "b",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 8643,
                                                            "src": "2437:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "id": 8655,
                                                            "name": "index",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 8645,
                                                            "src": "2440:5:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 8653,
                                                        "name": "readBytes32",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8640,
                                                        "src": "2425:11:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                                            "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                                        }
                                                    },
                                                    "id": 8656,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2425:21:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                ],
                                                "id": 8652,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "2417:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 8651,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2417:7:41",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 8657,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2417:30:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2408:39:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 8659,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2408:39:41"
                                },
                                {
                                    "expression": {
                                        "id": 8660,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8648,
                                        "src": "2464:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 8649,
                                    "id": 8661,
                                    "nodeType": "Return",
                                    "src": "2457:13:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 8641,
                            "nodeType": "StructuredDocumentation",
                            "src": "2020:232:41",
                            "text": "@dev Reads a uint256 value from a position in a byte array.\n @param b Byte array containing a uint256 value.\n @param index Index in byte array of uint256 value.\n @return result uint256 value from byte array."
                        },
                        "id": 8663,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readUint256",
                        "nameLocation": "2266:11:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8646,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8643,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "2300:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8663,
                                    "src": "2287:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8642,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2287:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8645,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "2319:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8663,
                                    "src": "2311:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8644,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2311:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2277:53:41"
                        },
                        "returnParameters": {
                            "id": 8649,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8648,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "2386:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8663,
                                    "src": "2378:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8647,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2378:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2377:16:41"
                        },
                        "scope": 8687,
                        "src": "2257:220:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 8685,
                            "nodeType": "Block",
                            "src": "2622:432:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 8678,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 8673,
                                                        "name": "b",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8665,
                                                        "src": "2640:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 8674,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2640:8:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 8677,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 8675,
                                                        "name": "index",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8667,
                                                        "src": "2652:5:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "hexValue": "34",
                                                        "id": 8676,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2660:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_4_by_1",
                                                            "typeString": "int_const 4"
                                                        },
                                                        "value": "4"
                                                    },
                                                    "src": "2652:9:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2640:21:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "726561644279746573343a206461746120746f6f2073686f7274",
                                                "id": 8679,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2663:28:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e3fe8b8d7a4d7297198f00bec48c1f664c9a2ab21f2fa0d4a68337ee48c21898",
                                                    "typeString": "literal_string \"readBytes4: data too short\""
                                                },
                                                "value": "readBytes4: data too short"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e3fe8b8d7a4d7297198f00bec48c1f664c9a2ab21f2fa0d4a68337ee48c21898",
                                                    "typeString": "literal_string \"readBytes4: data too short\""
                                                }
                                            ],
                                            "id": 8672,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2632:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8680,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2632:60:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8681,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2632:60:41"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "2757:268:41",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "2771:38:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "b",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2791:1:41"
                                                                },
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "index",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2798:5:41"
                                                                        },
                                                                        {
                                                                            "kind": "number",
                                                                            "nodeType": "YulLiteral",
                                                                            "src": "2804:2:41",
                                                                            "type": "",
                                                                            "value": "32"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "2794:3:41"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "2794:13:41"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2787:3:41"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2787:21:41"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2781:5:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2781:28:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2771:6:41"
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "2926:89:41",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "result",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2940:6:41"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2948:66:41",
                                                            "type": "",
                                                            "value": "0xFFFFFFFF00000000000000000000000000000000000000000000000000000000"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2936:3:41"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2936:79:41"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "result",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2926:6:41"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 8665,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2791:1:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8667,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2798:5:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8670,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2771:6:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8670,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2926:6:41",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 8670,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "2940:6:41",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 8682,
                                    "nodeType": "InlineAssembly",
                                    "src": "2748:277:41"
                                },
                                {
                                    "expression": {
                                        "id": 8683,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8670,
                                        "src": "3041:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "functionReturnParameters": 8671,
                                    "id": 8684,
                                    "nodeType": "Return",
                                    "src": "3034:13:41"
                                }
                            ]
                        },
                        "id": 8686,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "readBytes4",
                        "nameLocation": "2492:10:41",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8668,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8665,
                                    "mutability": "mutable",
                                    "name": "b",
                                    "nameLocation": "2525:1:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8686,
                                    "src": "2512:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 8664,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2512:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 8667,
                                    "mutability": "mutable",
                                    "name": "index",
                                    "nameLocation": "2544:5:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8686,
                                    "src": "2536:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8666,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2536:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2502:53:41"
                        },
                        "returnParameters": {
                            "id": 8671,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8670,
                                    "mutability": "mutable",
                                    "name": "result",
                                    "nameLocation": "2610:6:41",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8686,
                                    "src": "2603:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 8669,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2603:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2602:15:41"
                        },
                        "scope": 8687,
                        "src": "2483:571:41",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    }
                ],
                "scope": 8688,
                "src": "182:2874:41",
                "usedErrors": []
            }
        ],
        "src": "0:3056:41"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.249Z",
    "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
    }
}
