{
  "abi": [],
  "allSourcePaths": {
    "64": "node_modules/@chainlink/contracts/src/v0.8/vendor/BufferChainlink.sol"
  },
  "ast": {
    "absolutePath": "node_modules/@chainlink/contracts/src/v0.8/vendor/BufferChainlink.sol",
    "exportedSymbols": {
      "BufferChainlink": [
        25174
      ]
    },
    "id": 25175,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 24654,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:64"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 24655,
          "nodeType": "StructuredDocumentation",
          "src": "57:376:64",
          "text": " @dev A library for working with mutable byte buffers in Solidity.\n Byte buffers are mutable and expandable, and provide a variety of primitives\n for writing to them. At any time you can fetch a bytes object containing the\n current contents of the buffer. The bytes object should not be stored between\n operations, as it may change due to resizing of the buffer."
        },
        "fullyImplemented": true,
        "id": 25174,
        "linearizedBaseContracts": [
          25174
        ],
        "name": "BufferChainlink",
        "nameLocation": "442:15:64",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "BufferChainlink.buffer",
            "id": 24660,
            "members": [
              {
                "constant": false,
                "id": 24657,
                "mutability": "mutable",
                "name": "buf",
                "nameLocation": "732:3:64",
                "nodeType": "VariableDeclaration",
                "scope": 24660,
                "src": "726:9:64",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 24656,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "726:5:64",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 24659,
                "mutability": "mutable",
                "name": "capacity",
                "nameLocation": "746:8:64",
                "nodeType": "VariableDeclaration",
                "scope": 24660,
                "src": "741:13:64",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 24658,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "741:4:64",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "buffer",
            "nameLocation": "713:6:64",
            "nodeType": "StructDefinition",
            "scope": 25174,
            "src": "706:53:64",
            "visibility": "public"
          },
          {
            "body": {
              "id": 24697,
              "nodeType": "Block",
              "src": "1105:310:64",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 24672,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24666,
                        "src": "1115:8:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "%",
                      "rightExpression": {
                        "hexValue": "3332",
                        "id": 24673,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1126:2:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "1115:13:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 24675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1132:1:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1115:18:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24687,
                  "nodeType": "IfStatement",
                  "src": "1111:71:64",
                  "trueBody": {
                    "id": 24686,
                    "nodeType": "Block",
                    "src": "1135:47:64",
                    "statements": [
                      {
                        "expression": {
                          "id": 24684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 24677,
                            "name": "capacity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24666,
                            "src": "1143:8:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24683,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "3332",
                              "id": 24678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1155:2:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24681,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24679,
                                    "name": "capacity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24666,
                                    "src": "1161:8:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "3332",
                                    "id": 24680,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1172:2:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  "src": "1161:13:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24682,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1160:15:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1155:20:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1143:32:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24685,
                        "nodeType": "ExpressionStatement",
                        "src": "1143:32:64"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 24692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 24688,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24664,
                        "src": "1229:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 24690,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24659,
                      "src": "1229:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 24691,
                      "name": "capacity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24666,
                      "src": "1244:8:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1229:23:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24693,
                  "nodeType": "ExpressionStatement",
                  "src": "1229:23:64"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1267:128:64",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "1275:22:64",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1292:4:64",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "1286:5:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1286:11:64"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "1279:3:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "1311:3:64"
                            },
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "1316:3:64"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1304:6:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1304:16:64"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1304:16:64"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "1334:3:64"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1339:1:64",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1327:6:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1327:14:64"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1327:14:64"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1355:4:64",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1365:2:64",
                                  "type": "",
                                  "value": "32"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "1373:3:64"
                                    },
                                    {
                                      "name": "capacity",
                                      "nodeType": "YulIdentifier",
                                      "src": "1378:8:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1369:3:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1369:18:64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1361:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1361:27:64"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1348:6:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1348:41:64"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1348:41:64"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24664,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1311:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24666,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1378:8:64",
                      "valueSize": 1
                    }
                  ],
                  "id": 24694,
                  "nodeType": "InlineAssembly",
                  "src": "1258:137:64"
                },
                {
                  "expression": {
                    "id": 24695,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24664,
                    "src": "1407:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24671,
                  "id": 24696,
                  "nodeType": "Return",
                  "src": "1400:10:64"
                }
              ]
            },
            "documentation": {
              "id": 24661,
              "nodeType": "StructuredDocumentation",
              "src": "763:216:64",
              "text": " @dev Initializes a buffer with an initial capacity.\n @param buf The buffer to initialize.\n @param capacity The number of bytes of space to allocate the buffer.\n @return The buffer, for chaining."
            },
            "id": 24698,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "init",
            "nameLocation": "991:4:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24664,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "1015:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24698,
                  "src": "1001:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24663,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24662,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "1001:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "1001:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24666,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nameLocation": "1029:8:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24698,
                  "src": "1024:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24665,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1024:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "995:46:64"
            },
            "returnParameters": {
              "id": 24671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24670,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24698,
                  "src": "1083:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24669,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24668,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "1083:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "1083:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1075:27:64"
            },
            "scope": 25174,
            "src": "982:433:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24726,
              "nodeType": "Block",
              "src": "1750:90:64",
              "statements": [
                {
                  "assignments": [
                    24709
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24709,
                      "mutability": "mutable",
                      "name": "buf",
                      "nameLocation": "1770:3:64",
                      "nodeType": "VariableDeclaration",
                      "scope": 24726,
                      "src": "1756:17:64",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                        "typeString": "struct BufferChainlink.buffer"
                      },
                      "typeName": {
                        "id": 24708,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 24707,
                          "name": "buffer",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 24660,
                          "src": "1756:6:64"
                        },
                        "referencedDeclaration": 24660,
                        "src": "1756:6:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                          "typeString": "struct BufferChainlink.buffer"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24710,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1756:17:64"
                },
                {
                  "expression": {
                    "id": 24715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 24711,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24709,
                        "src": "1779:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 24713,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "buf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24657,
                      "src": "1779:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 24714,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24701,
                      "src": "1789:1:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "1779:11:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 24716,
                  "nodeType": "ExpressionStatement",
                  "src": "1779:11:64"
                },
                {
                  "expression": {
                    "id": 24722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 24717,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24709,
                        "src": "1796:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 24719,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24659,
                      "src": "1796:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 24720,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24701,
                        "src": "1811:1:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 24721,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1811:8:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1796:23:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24723,
                  "nodeType": "ExpressionStatement",
                  "src": "1796:23:64"
                },
                {
                  "expression": {
                    "id": 24724,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24709,
                    "src": "1832:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24706,
                  "id": 24725,
                  "nodeType": "Return",
                  "src": "1825:10:64"
                }
              ]
            },
            "documentation": {
              "id": 24699,
              "nodeType": "StructuredDocumentation",
              "src": "1419:222:64",
              "text": " @dev Initializes a new buffer from an existing bytes object.\n      Changes to the buffer may mutate the original value.\n @param b The bytes object to initialize the buffer with.\n @return A new buffer."
            },
            "id": 24727,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fromBytes",
            "nameLocation": "1653:9:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24701,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "1681:1:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24727,
                  "src": "1668:14:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24700,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1668:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1662:24:64"
            },
            "returnParameters": {
              "id": 24706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24705,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24727,
                  "src": "1728:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24704,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24703,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "1728:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "1728:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1720:27:64"
            },
            "scope": 25174,
            "src": "1644:196:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24750,
              "nodeType": "Block",
              "src": "1929:90:64",
              "statements": [
                {
                  "assignments": [
                    24736
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24736,
                      "mutability": "mutable",
                      "name": "oldbuf",
                      "nameLocation": "1948:6:64",
                      "nodeType": "VariableDeclaration",
                      "scope": 24750,
                      "src": "1935:19:64",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 24735,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1935:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24739,
                  "initialValue": {
                    "expression": {
                      "id": 24737,
                      "name": "buf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24730,
                      "src": "1957:3:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                        "typeString": "struct BufferChainlink.buffer memory"
                      }
                    },
                    "id": 24738,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "buf",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 24657,
                    "src": "1957:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1935:29:64"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24741,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24730,
                        "src": "1975:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "id": 24742,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24732,
                        "src": "1980:8:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24740,
                      "name": "init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24698,
                      "src": "1970:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 24743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1970:19:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "id": 24744,
                  "nodeType": "ExpressionStatement",
                  "src": "1970:19:64"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24746,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24730,
                        "src": "2002:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "id": 24747,
                        "name": "oldbuf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24736,
                        "src": "2007:6:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 24745,
                      "name": "append",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24894,
                        24917
                      ],
                      "referencedDeclaration": 24917,
                      "src": "1995:6:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,bytes memory) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 24748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1995:19:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "id": 24749,
                  "nodeType": "ExpressionStatement",
                  "src": "1995:19:64"
                }
              ]
            },
            "id": 24751,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resize",
            "nameLocation": "1853:6:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24733,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24730,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "1879:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24751,
                  "src": "1865:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24729,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24728,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "1865:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "1865:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24732,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nameLocation": "1893:8:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24751,
                  "src": "1888:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24731,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1888:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1859:46:64"
            },
            "returnParameters": {
              "id": 24734,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1929:0:64"
            },
            "scope": 25174,
            "src": "1844:175:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 24769,
              "nodeType": "Block",
              "src": "2117:58:64",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24760,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24753,
                      "src": "2127:1:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 24761,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24755,
                      "src": "2131:1:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2127:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24766,
                  "nodeType": "IfStatement",
                  "src": "2123:34:64",
                  "trueBody": {
                    "id": 24765,
                    "nodeType": "Block",
                    "src": "2134:23:64",
                    "statements": [
                      {
                        "expression": {
                          "id": 24763,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24753,
                          "src": "2149:1:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 24759,
                        "id": 24764,
                        "nodeType": "Return",
                        "src": "2142:8:64"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 24767,
                    "name": "b",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24755,
                    "src": "2169:1:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24759,
                  "id": 24768,
                  "nodeType": "Return",
                  "src": "2162:8:64"
                }
              ]
            },
            "id": 24770,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "max",
            "nameLocation": "2032:3:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24756,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24753,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "2046:1:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24770,
                  "src": "2041:6:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24752,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2041:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24755,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "2058:1:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24770,
                  "src": "2053:6:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24754,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2053:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2035:28:64"
            },
            "returnParameters": {
              "id": 24759,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24758,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24770,
                  "src": "2104:4:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24757,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2104:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2096:18:64"
            },
            "scope": 25174,
            "src": "2023:152:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 24783,
              "nodeType": "Block",
              "src": "2420:97:64",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2435:62:64",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2443:24:64",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "2463:3:64"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "2457:5:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2457:10:64"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "2447:6:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "bufptr",
                              "nodeType": "YulIdentifier",
                              "src": "2481:6:64"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2489:1:64",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2474:6:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2474:17:64"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2474:17:64"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24774,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2463:3:64",
                      "valueSize": 1
                    }
                  ],
                  "id": 24780,
                  "nodeType": "InlineAssembly",
                  "src": "2426:71:64"
                },
                {
                  "expression": {
                    "id": 24781,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24774,
                    "src": "2509:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24779,
                  "id": 24782,
                  "nodeType": "Return",
                  "src": "2502:10:64"
                }
              ]
            },
            "documentation": {
              "id": 24771,
              "nodeType": "StructuredDocumentation",
              "src": "2179:129:64",
              "text": " @dev Sets buffer length to 0.\n @param buf The buffer to truncate.\n @return The original buffer, for chaining.."
            },
            "id": 24784,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "truncate",
            "nameLocation": "2320:8:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24775,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24774,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "2348:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24784,
                  "src": "2334:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24773,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24772,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "2334:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "2334:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2328:27:64"
            },
            "returnParameters": {
              "id": 24779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24778,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24784,
                  "src": "2398:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24777,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24776,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "2398:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "2398:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2390:27:64"
            },
            "scope": 25174,
            "src": "2311:206:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24869,
              "nodeType": "Block",
              "src": "3013:1066:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 24804,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24801,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24794,
                          "src": "3027:3:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 24802,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24792,
                            "src": "3034:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 24803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3034:11:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3027:18:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 24800,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3019:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 24805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3019:27:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24806,
                  "nodeType": "ExpressionStatement",
                  "src": "3019:27:64"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 24807,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24790,
                        "src": "3057:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 24808,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24794,
                        "src": "3063:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3057:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 24810,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24788,
                        "src": "3069:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 24811,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24659,
                      "src": "3069:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3057:24:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24827,
                  "nodeType": "IfStatement",
                  "src": "3053:90:64",
                  "trueBody": {
                    "id": 24826,
                    "nodeType": "Block",
                    "src": "3083:60:64",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 24814,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24788,
                              "src": "3098:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 24816,
                                      "name": "buf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24788,
                                      "src": "3107:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                        "typeString": "struct BufferChainlink.buffer memory"
                                      }
                                    },
                                    "id": 24817,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "capacity",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 24659,
                                    "src": "3107:12:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24820,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 24818,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24794,
                                      "src": "3121:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 24819,
                                      "name": "off",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24790,
                                      "src": "3127:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3121:9:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 24815,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24770,
                                  "src": "3103:3:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 24821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3103:28:64",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 24822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3134:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "3103:32:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24813,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24751,
                            "src": "3091:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 24824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3091:45:64",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 24825,
                        "nodeType": "ExpressionStatement",
                        "src": "3091:45:64"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    24829
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24829,
                      "mutability": "mutable",
                      "name": "dest",
                      "nameLocation": "3154:4:64",
                      "nodeType": "VariableDeclaration",
                      "scope": 24869,
                      "src": "3149:9:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24828,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3149:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24830,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3149:9:64"
                },
                {
                  "assignments": [
                    24832
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24832,
                      "mutability": "mutable",
                      "name": "src",
                      "nameLocation": "3169:3:64",
                      "nodeType": "VariableDeclaration",
                      "scope": 24869,
                      "src": "3164:8:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24831,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3164:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24833,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3164:8:64"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3187:430:64",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3238:24:64",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "3258:3:64"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "3252:5:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3252:10:64"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "3242:6:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3309:27:64",
                        "value": {
                          "arguments": [
                            {
                              "name": "bufptr",
                              "nodeType": "YulIdentifier",
                              "src": "3329:6:64"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "3323:5:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3323:13:64"
                        },
                        "variables": [
                          {
                            "name": "buflen",
                            "nodeType": "YulTypedName",
                            "src": "3313:6:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3416:33:64",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "3432:6:64"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3440:2:64",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3428:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3428:15:64"
                            },
                            {
                              "name": "off",
                              "nodeType": "YulIdentifier",
                              "src": "3445:3:64"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3424:3:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3424:25:64"
                        },
                        "variableNames": [
                          {
                            "name": "dest",
                            "nodeType": "YulIdentifier",
                            "src": "3416:4:64"
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3537:47:64",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "bufptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3554:6:64"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "3566:3:64"
                                      },
                                      {
                                        "name": "off",
                                        "nodeType": "YulIdentifier",
                                        "src": "3571:3:64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3562:3:64"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3562:13:64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3547:6:64"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3547:29:64"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3547:29:64"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "3518:3:64"
                                },
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "3523:3:64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3514:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3514:13:64"
                            },
                            {
                              "name": "buflen",
                              "nodeType": "YulIdentifier",
                              "src": "3529:6:64"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "3511:2:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3511:25:64"
                        },
                        "nodeType": "YulIf",
                        "src": "3508:2:64"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3591:20:64",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "3602:4:64"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3608:2:64",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3598:3:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3598:13:64"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "3591:3:64"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24788,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3258:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24792,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3602:4:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24829,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3416:4:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24794,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3518:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24794,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3566:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24790,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3445:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24790,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3523:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24790,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3571:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24832,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3591:3:64",
                      "valueSize": 1
                    }
                  ],
                  "id": 24834,
                  "nodeType": "InlineAssembly",
                  "src": "3178:439:64"
                },
                {
                  "body": {
                    "id": 24851,
                    "nodeType": "Block",
                    "src": "3698:100:64",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3715:42:64",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dest",
                                    "nodeType": "YulIdentifier",
                                    "src": "3732:4:64"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "3744:3:64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3738:5:64"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3738:10:64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3725:6:64"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3725:24:64"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3725:24:64"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 24829,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3732:4:64",
                            "valueSize": 1
                          },
                          {
                            "declaration": 24832,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3744:3:64",
                            "valueSize": 1
                          }
                        ],
                        "id": 24842,
                        "nodeType": "InlineAssembly",
                        "src": "3706:51:64"
                      },
                      {
                        "expression": {
                          "id": 24845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 24843,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24829,
                            "src": "3764:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 24844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3772:2:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "3764:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24846,
                        "nodeType": "ExpressionStatement",
                        "src": "3764:10:64"
                      },
                      {
                        "expression": {
                          "id": 24849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 24847,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24832,
                            "src": "3782:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 24848,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3789:2:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "3782:9:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24850,
                        "nodeType": "ExpressionStatement",
                        "src": "3782:9:64"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24835,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24794,
                      "src": "3676:3:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 24836,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3683:2:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "3676:9:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24852,
                  "loopExpression": {
                    "expression": {
                      "id": 24840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 24838,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24794,
                        "src": "3687:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 24839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3694:2:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "3687:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24841,
                    "nodeType": "ExpressionStatement",
                    "src": "3687:9:64"
                  },
                  "nodeType": "ForStatement",
                  "src": "3669:129:64"
                },
                {
                  "id": 24866,
                  "nodeType": "UncheckedBlock",
                  "src": "3832:226:64",
                  "statements": [
                    {
                      "assignments": [
                        24854
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 24854,
                          "mutability": "mutable",
                          "name": "mask",
                          "nameLocation": "3855:4:64",
                          "nodeType": "VariableDeclaration",
                          "scope": 24866,
                          "src": "3850:9:64",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 24853,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3850:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 24864,
                      "initialValue": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 24863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24860,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "323536",
                                "id": 24855,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3863:3:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                },
                                "value": "256"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "**",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24858,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "3332",
                                      "id": 24856,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3871:2:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 24857,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24794,
                                      "src": "3876:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3871:8:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 24859,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3870:10:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3863:17:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 24861,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3862:19:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 24862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3884:1:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "3862:23:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3850:35:64"
                    },
                    {
                      "AST": {
                        "nodeType": "YulBlock",
                        "src": "3902:150:64",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "3912:41:64",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "3937:3:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "3931:5:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3931:10:64"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "mask",
                                      "nodeType": "YulIdentifier",
                                      "src": "3947:4:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "3943:3:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3943:9:64"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "3927:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3927:26:64"
                            },
                            "variables": [
                              {
                                "name": "srcpart",
                                "nodeType": "YulTypedName",
                                "src": "3916:7:64",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "3962:38:64",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "dest",
                                      "nodeType": "YulIdentifier",
                                      "src": "3988:4:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "3982:5:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3982:11:64"
                                },
                                {
                                  "name": "mask",
                                  "nodeType": "YulIdentifier",
                                  "src": "3995:4:64"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "3978:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3978:22:64"
                            },
                            "variables": [
                              {
                                "name": "destpart",
                                "nodeType": "YulTypedName",
                                "src": "3966:8:64",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "dest",
                                  "nodeType": "YulIdentifier",
                                  "src": "4016:4:64"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "destpart",
                                      "nodeType": "YulIdentifier",
                                      "src": "4025:8:64"
                                    },
                                    {
                                      "name": "srcpart",
                                      "nodeType": "YulIdentifier",
                                      "src": "4035:7:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "or",
                                    "nodeType": "YulIdentifier",
                                    "src": "4022:2:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "4022:21:64"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "4009:6:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4009:35:64"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "4009:35:64"
                          }
                        ]
                      },
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 24829,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3988:4:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24829,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "4016:4:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24854,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3947:4:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24854,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3995:4:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24832,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3937:3:64",
                          "valueSize": 1
                        }
                      ],
                      "id": 24865,
                      "nodeType": "InlineAssembly",
                      "src": "3893:159:64"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 24867,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24788,
                    "src": "4071:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24799,
                  "id": 24868,
                  "nodeType": "Return",
                  "src": "4064:10:64"
                }
              ]
            },
            "documentation": {
              "id": 24785,
              "nodeType": "StructuredDocumentation",
              "src": "2521:333:64",
              "text": " @dev Writes a byte string to a buffer. Resizes if doing so would exceed\n      the capacity of the buffer.\n @param buf The buffer to append to.\n @param off The start offset to write to.\n @param data The data to append.\n @param len The number of bytes to copy.\n @return The original buffer, for chaining."
            },
            "id": 24870,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "write",
            "nameLocation": "2866:5:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24788,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "2891:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24870,
                  "src": "2877:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24787,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24786,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "2877:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "2877:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24790,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "2905:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24870,
                  "src": "2900:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24789,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2900:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24792,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2927:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24870,
                  "src": "2914:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24791,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2914:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24794,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "2942:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24870,
                  "src": "2937:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24793,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2937:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2871:78:64"
            },
            "returnParameters": {
              "id": 24799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24798,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24870,
                  "src": "2991:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24797,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24796,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "2991:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "2991:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2983:27:64"
            },
            "scope": 25174,
            "src": "2857:1222:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24893,
              "nodeType": "Block",
              "src": "4519:55:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24885,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24874,
                        "src": "4538:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 24886,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24874,
                            "src": "4543:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 24887,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24657,
                          "src": "4543:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 24888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "4543:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24889,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24876,
                        "src": "4559:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 24890,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24878,
                        "src": "4565:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24884,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24870,
                        25030
                      ],
                      "referencedDeclaration": 24870,
                      "src": "4532:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes memory,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 24891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4532:37:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24883,
                  "id": 24892,
                  "nodeType": "Return",
                  "src": "4525:44:64"
                }
              ]
            },
            "documentation": {
              "id": 24871,
              "nodeType": "StructuredDocumentation",
              "src": "4083:289:64",
              "text": " @dev Appends a byte string to a buffer. Resizes if doing so would exceed\n      the capacity of the buffer.\n @param buf The buffer to append to.\n @param data The data to append.\n @param len The number of bytes to copy.\n @return The original buffer, for chaining."
            },
            "id": 24894,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "append",
            "nameLocation": "4384:6:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24879,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24874,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "4410:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24894,
                  "src": "4396:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24873,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24872,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "4396:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "4396:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24876,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4432:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24894,
                  "src": "4419:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24875,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4419:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24878,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "4447:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24894,
                  "src": "4442:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24877,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4442:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4390:64:64"
            },
            "returnParameters": {
              "id": 24883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24882,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24894,
                  "src": "4497:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24881,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24880,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "4497:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "4497:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4489:27:64"
            },
            "scope": 25174,
            "src": "4375:199:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24916,
              "nodeType": "Block",
              "src": "4956:63:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24907,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24898,
                        "src": "4975:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 24908,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24898,
                            "src": "4980:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 24909,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24657,
                          "src": "4980:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 24910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "4980:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24911,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24900,
                        "src": "4996:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 24912,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24900,
                          "src": "5002:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 24913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "5002:11:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24906,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24870,
                        25030
                      ],
                      "referencedDeclaration": 24870,
                      "src": "4969:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes memory,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 24914,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4969:45:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24905,
                  "id": 24915,
                  "nodeType": "Return",
                  "src": "4962:52:64"
                }
              ]
            },
            "documentation": {
              "id": 24895,
              "nodeType": "StructuredDocumentation",
              "src": "4578:245:64",
              "text": " @dev Appends a byte string to a buffer. Resizes if doing so would exceed\n      the capacity of the buffer.\n @param buf The buffer to append to.\n @param data The data to append.\n @return The original buffer, for chaining."
            },
            "id": 24917,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "append",
            "nameLocation": "4835:6:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24901,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24898,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "4861:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24917,
                  "src": "4847:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24897,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24896,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "4847:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "4847:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24900,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4883:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24917,
                  "src": "4870:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24899,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4870:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4841:50:64"
            },
            "returnParameters": {
              "id": 24905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24904,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24917,
                  "src": "4934:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24903,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24902,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "4934:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "4934:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4926:27:64"
            },
            "scope": 25174,
            "src": "4826:193:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24948,
              "nodeType": "Block",
              "src": "5453:521:64",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24931,
                      "name": "off",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24923,
                      "src": "5463:3:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "expression": {
                        "id": 24932,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24921,
                        "src": "5470:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 24933,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24659,
                      "src": "5470:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5463:19:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24944,
                  "nodeType": "IfStatement",
                  "src": "5459:69:64",
                  "trueBody": {
                    "id": 24943,
                    "nodeType": "Block",
                    "src": "5484:44:64",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 24936,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24921,
                              "src": "5499:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24940,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 24937,
                                  "name": "buf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24921,
                                  "src": "5504:3:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                    "typeString": "struct BufferChainlink.buffer memory"
                                  }
                                },
                                "id": 24938,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "capacity",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 24659,
                                "src": "5504:12:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 24939,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5519:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "5504:16:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24935,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24751,
                            "src": "5492:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 24941,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5492:29:64",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 24942,
                        "nodeType": "ExpressionStatement",
                        "src": "5492:29:64"
                      }
                    ]
                  }
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5543:411:64",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5594:24:64",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "5614:3:64"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5608:5:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5608:10:64"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "5598:6:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5665:27:64",
                        "value": {
                          "arguments": [
                            {
                              "name": "bufptr",
                              "nodeType": "YulIdentifier",
                              "src": "5685:6:64"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5679:5:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5679:13:64"
                        },
                        "variables": [
                          {
                            "name": "buflen",
                            "nodeType": "YulTypedName",
                            "src": "5669:6:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5763:37:64",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5783:6:64"
                                },
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "5791:3:64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5779:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5779:16:64"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5797:2:64",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5775:3:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5775:25:64"
                        },
                        "variables": [
                          {
                            "name": "dest",
                            "nodeType": "YulTypedName",
                            "src": "5767:4:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dest",
                              "nodeType": "YulIdentifier",
                              "src": "5815:4:64"
                            },
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "5821:4:64"
                            }
                          ],
                          "functionName": {
                            "name": "mstore8",
                            "nodeType": "YulIdentifier",
                            "src": "5807:7:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5807:19:64"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5807:19:64"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5900:48:64",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "bufptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "5917:6:64"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "buflen",
                                        "nodeType": "YulIdentifier",
                                        "src": "5929:6:64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5937:1:64",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5925:3:64"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5925:14:64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5910:6:64"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5910:30:64"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5910:30:64"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "off",
                              "nodeType": "YulIdentifier",
                              "src": "5887:3:64"
                            },
                            {
                              "name": "buflen",
                              "nodeType": "YulIdentifier",
                              "src": "5892:6:64"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "5884:2:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5884:15:64"
                        },
                        "nodeType": "YulIf",
                        "src": "5881:2:64"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24921,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5614:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24925,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5821:4:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24923,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5791:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24923,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5887:3:64",
                      "valueSize": 1
                    }
                  ],
                  "id": 24945,
                  "nodeType": "InlineAssembly",
                  "src": "5534:420:64"
                },
                {
                  "expression": {
                    "id": 24946,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24921,
                    "src": "5966:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24930,
                  "id": 24947,
                  "nodeType": "Return",
                  "src": "5959:10:64"
                }
              ]
            },
            "documentation": {
              "id": 24918,
              "nodeType": "StructuredDocumentation",
              "src": "5023:287:64",
              "text": " @dev Writes a byte to the buffer. Resizes if doing so would exceed the\n      capacity of the buffer.\n @param buf The buffer to append to.\n @param off The offset to write the byte at.\n @param data The data to append.\n @return The original buffer, for chaining."
            },
            "id": 24949,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "writeUint8",
            "nameLocation": "5322:10:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24921,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "5352:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24949,
                  "src": "5338:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24920,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24919,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "5338:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "5338:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24923,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "5366:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24949,
                  "src": "5361:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24922,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5361:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24925,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "5381:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24949,
                  "src": "5375:10:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 24924,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5375:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5332:57:64"
            },
            "returnParameters": {
              "id": 24930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24929,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24949,
                  "src": "5431:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24928,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24927,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "5431:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "5431:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5423:27:64"
            },
            "scope": 25174,
            "src": "5313:661:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24969,
              "nodeType": "Block",
              "src": "6348:55:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24962,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24953,
                        "src": "6372:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 24963,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24953,
                            "src": "6377:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 24964,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24657,
                          "src": "6377:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 24965,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "6377:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24966,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24955,
                        "src": "6393:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 24961,
                      "name": "writeUint8",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24949,
                      "src": "6361:10:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$_t_uint8_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,uint8) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 24967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6361:37:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24960,
                  "id": 24968,
                  "nodeType": "Return",
                  "src": "6354:44:64"
                }
              ]
            },
            "documentation": {
              "id": 24950,
              "nodeType": "StructuredDocumentation",
              "src": "5978:240:64",
              "text": " @dev Appends a byte to the buffer. Resizes if doing so would exceed the\n      capacity of the buffer.\n @param buf The buffer to append to.\n @param data The data to append.\n @return The original buffer, for chaining."
            },
            "id": 24970,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendUint8",
            "nameLocation": "6230:11:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24953,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "6261:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24970,
                  "src": "6247:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24952,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24951,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "6247:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "6247:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24955,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6276:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 24970,
                  "src": "6270:10:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 24954,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6270:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6241:43:64"
            },
            "returnParameters": {
              "id": 24960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24959,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 24970,
                  "src": "6326:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24958,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24957,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "6326:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "6326:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6318:27:64"
            },
            "scope": 25174,
            "src": "6221:182:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25029,
              "nodeType": "Block",
              "src": "6906:651:64",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 24986,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24980,
                        "src": "6916:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 24987,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24976,
                        "src": "6922:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6916:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 24989,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24974,
                        "src": "6928:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 24990,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24659,
                      "src": "6928:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6916:24:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25003,
                  "nodeType": "IfStatement",
                  "src": "6912:73:64",
                  "trueBody": {
                    "id": 25002,
                    "nodeType": "Block",
                    "src": "6942:43:64",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 24993,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24974,
                              "src": "6957:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24996,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 24994,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24980,
                                      "src": "6963:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 24995,
                                      "name": "off",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24976,
                                      "src": "6969:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "6963:9:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 24997,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6962:11:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 24998,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6976:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "6962:15:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24992,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24751,
                            "src": "6950:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 25000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6950:28:64",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 25001,
                        "nodeType": "ExpressionStatement",
                        "src": "6950:28:64"
                      }
                    ]
                  }
                },
                {
                  "id": 25026,
                  "nodeType": "UncheckedBlock",
                  "src": "6991:546:64",
                  "statements": [
                    {
                      "assignments": [
                        25005
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 25005,
                          "mutability": "mutable",
                          "name": "mask",
                          "nameLocation": "7014:4:64",
                          "nodeType": "VariableDeclaration",
                          "scope": 25026,
                          "src": "7009:9:64",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 25004,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "7009:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 25012,
                      "initialValue": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "323536",
                                "id": 25006,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7022:3:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                },
                                "value": "256"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "**",
                              "rightExpression": {
                                "id": 25007,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24980,
                                "src": "7029:3:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7022:10:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 25009,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7021:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 25010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7036:1:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "7021:16:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "7009:28:64"
                    },
                    {
                      "expression": {
                        "id": 25023,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 25013,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24978,
                          "src": "7071:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 25022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 25014,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24978,
                            "src": "7078:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">>",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 25020,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "38",
                                  "id": 25015,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7087:1:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 25018,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3332",
                                        "id": 25016,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "7092:2:64",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "id": 25017,
                                        "name": "len",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24980,
                                        "src": "7097:3:64",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7092:8:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 25019,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7091:10:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7087:14:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 25021,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7086:16:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7078:24:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "7071:31:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 25024,
                      "nodeType": "ExpressionStatement",
                      "src": "7071:31:64"
                    },
                    {
                      "AST": {
                        "nodeType": "YulBlock",
                        "src": "7119:412:64",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "7174:24:64",
                            "value": {
                              "arguments": [
                                {
                                  "name": "buf",
                                  "nodeType": "YulIdentifier",
                                  "src": "7194:3:64"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "7188:5:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7188:10:64"
                            },
                            "variables": [
                              {
                                "name": "bufptr",
                                "nodeType": "YulTypedName",
                                "src": "7178:6:64",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "7279:38:64",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "bufptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "7299:6:64"
                                    },
                                    {
                                      "name": "off",
                                      "nodeType": "YulIdentifier",
                                      "src": "7307:3:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "7295:3:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7295:16:64"
                                },
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "7313:3:64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "7291:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7291:26:64"
                            },
                            "variables": [
                              {
                                "name": "dest",
                                "nodeType": "YulTypedName",
                                "src": "7283:4:64",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "dest",
                                  "nodeType": "YulIdentifier",
                                  "src": "7333:4:64"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dest",
                                              "nodeType": "YulIdentifier",
                                              "src": "7352:4:64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "7346:5:64"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7346:11:64"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "mask",
                                              "nodeType": "YulIdentifier",
                                              "src": "7363:4:64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "not",
                                            "nodeType": "YulIdentifier",
                                            "src": "7359:3:64"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7359:9:64"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "7342:3:64"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7342:27:64"
                                    },
                                    {
                                      "name": "data",
                                      "nodeType": "YulIdentifier",
                                      "src": "7371:4:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "or",
                                    "nodeType": "YulIdentifier",
                                    "src": "7339:2:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7339:37:64"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "7326:6:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7326:51:64"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "7326:51:64"
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "7472:51:64",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "bufptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "7491:6:64"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "off",
                                            "nodeType": "YulIdentifier",
                                            "src": "7503:3:64"
                                          },
                                          {
                                            "name": "len",
                                            "nodeType": "YulIdentifier",
                                            "src": "7508:3:64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "7499:3:64"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7499:13:64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "7484:6:64"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7484:29:64"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "7484:29:64"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "off",
                                      "nodeType": "YulIdentifier",
                                      "src": "7446:3:64"
                                    },
                                    {
                                      "name": "len",
                                      "nodeType": "YulIdentifier",
                                      "src": "7451:3:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "7442:3:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7442:13:64"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "bufptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "7463:6:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "7457:5:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7457:13:64"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "7439:2:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7439:32:64"
                            },
                            "nodeType": "YulIf",
                            "src": "7436:2:64"
                          }
                        ]
                      },
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 24974,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7194:3:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24978,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7371:4:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24980,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7313:3:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24980,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7451:3:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24980,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7508:3:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 25005,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7363:4:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24976,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7307:3:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24976,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7446:3:64",
                          "valueSize": 1
                        },
                        {
                          "declaration": 24976,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7503:3:64",
                          "valueSize": 1
                        }
                      ],
                      "id": 25025,
                      "nodeType": "InlineAssembly",
                      "src": "7110:421:64"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 25027,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24974,
                    "src": "7549:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 24985,
                  "id": 25028,
                  "nodeType": "Return",
                  "src": "7542:10:64"
                }
              ]
            },
            "documentation": {
              "id": 24971,
              "nodeType": "StructuredDocumentation",
              "src": "6407:346:64",
              "text": " @dev Writes up to 32 bytes to the buffer. Resizes if doing so would\n      exceed the capacity of the buffer.\n @param buf The buffer to append to.\n @param off The offset to write at.\n @param data The data to append.\n @param len The number of bytes to write (left-aligned).\n @return The original buffer, for chaining."
            },
            "id": 25030,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "write",
            "nameLocation": "6765:5:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24981,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24974,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "6790:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25030,
                  "src": "6776:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24973,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24972,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "6776:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "6776:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24976,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "6804:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25030,
                  "src": "6799:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24975,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6799:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24978,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6821:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25030,
                  "src": "6813:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 24977,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6813:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24980,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "6836:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25030,
                  "src": "6831:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24979,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6831:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6770:73:64"
            },
            "returnParameters": {
              "id": 24985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24984,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25030,
                  "src": "6884:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 24983,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 24982,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "6884:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "6884:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6876:27:64"
            },
            "scope": 25174,
            "src": "6756:801:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 25054,
              "nodeType": "Block",
              "src": "7990:52:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25045,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25034,
                        "src": "8009:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "id": 25046,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25036,
                        "src": "8014:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 25049,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25038,
                            "src": "8027:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          ],
                          "id": 25048,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8019:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 25047,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "8019:7:64",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 25050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8019:13:64",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "3230",
                        "id": 25051,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8034:2:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        }
                      ],
                      "id": 25044,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24870,
                        25030
                      ],
                      "referencedDeclaration": 25030,
                      "src": "8003:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes32,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 25052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8003:34:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 25043,
                  "id": 25053,
                  "nodeType": "Return",
                  "src": "7996:41:64"
                }
              ]
            },
            "documentation": {
              "id": 25031,
              "nodeType": "StructuredDocumentation",
              "src": "7561:281:64",
              "text": " @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the\n      capacity of the buffer.\n @param buf The buffer to append to.\n @param off The offset to write at.\n @param data The data to append.\n @return The original buffer, for chaining."
            },
            "id": 25055,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "writeBytes20",
            "nameLocation": "7854:12:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25034,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "7886:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25055,
                  "src": "7872:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25033,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25032,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "7872:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "7872:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25036,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "7900:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25055,
                  "src": "7895:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25035,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7895:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25038,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "7917:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25055,
                  "src": "7909:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 25037,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "7909:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7866:59:64"
            },
            "returnParameters": {
              "id": 25043,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25042,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25055,
                  "src": "7968:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25041,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25040,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "7968:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "7968:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7960:27:64"
            },
            "scope": 25174,
            "src": "7845:197:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25079,
              "nodeType": "Block",
              "src": "8425:63:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25068,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25059,
                        "src": "8444:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 25069,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25059,
                            "src": "8449:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 25070,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24657,
                          "src": "8449:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 25071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "8449:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 25074,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25061,
                            "src": "8473:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          ],
                          "id": 25073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8465:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 25072,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "8465:7:64",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 25075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8465:13:64",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "3230",
                        "id": 25076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8480:2:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        }
                      ],
                      "id": 25067,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24870,
                        25030
                      ],
                      "referencedDeclaration": 25030,
                      "src": "8438:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes32,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 25077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8438:45:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 25066,
                  "id": 25078,
                  "nodeType": "Return",
                  "src": "8431:52:64"
                }
              ]
            },
            "documentation": {
              "id": 25056,
              "nodeType": "StructuredDocumentation",
              "src": "8046:244:64",
              "text": " @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed\n      the capacity of the buffer.\n @param buf The buffer to append to.\n @param data The data to append.\n @return The original buffer, for chhaining."
            },
            "id": 25080,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendBytes20",
            "nameLocation": "8302:13:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25059,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "8335:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25080,
                  "src": "8321:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25058,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25057,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "8321:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "8321:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25061,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "8352:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25080,
                  "src": "8344:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 25060,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "8344:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8315:45:64"
            },
            "returnParameters": {
              "id": 25066,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25065,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25080,
                  "src": "8403:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25064,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25063,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "8403:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "8403:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8395:27:64"
            },
            "scope": 25174,
            "src": "8293:195:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25101,
              "nodeType": "Block",
              "src": "8870:54:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25093,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25084,
                        "src": "8889:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 25094,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25084,
                            "src": "8894:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 25095,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24657,
                          "src": "8894:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 25096,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "8894:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 25097,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25086,
                        "src": "8910:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "3332",
                        "id": 25098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8916:2:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "id": 25092,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24870,
                        25030
                      ],
                      "referencedDeclaration": 25030,
                      "src": "8883:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes32,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 25099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8883:36:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 25091,
                  "id": 25100,
                  "nodeType": "Return",
                  "src": "8876:43:64"
                }
              ]
            },
            "documentation": {
              "id": 25081,
              "nodeType": "StructuredDocumentation",
              "src": "8492:243:64",
              "text": " @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed\n      the capacity of the buffer.\n @param buf The buffer to append to.\n @param data The data to append.\n @return The original buffer, for chaining."
            },
            "id": 25102,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendBytes32",
            "nameLocation": "8747:13:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25087,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25084,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "8780:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25102,
                  "src": "8766:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25083,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25082,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "8766:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "8766:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25086,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "8797:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25102,
                  "src": "8789:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25085,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8789:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8760:45:64"
            },
            "returnParameters": {
              "id": 25091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25090,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25102,
                  "src": "8848:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25089,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25088,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "8848:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "8848:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8840:27:64"
            },
            "scope": 25174,
            "src": "8738:186:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25148,
              "nodeType": "Block",
              "src": "9424:540:64",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25120,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 25118,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25112,
                        "src": "9434:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 25119,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25108,
                        "src": "9440:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9434:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 25121,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25106,
                        "src": "9446:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 25122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24659,
                      "src": "9446:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9434:24:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25135,
                  "nodeType": "IfStatement",
                  "src": "9430:73:64",
                  "trueBody": {
                    "id": 25134,
                    "nodeType": "Block",
                    "src": "9460:43:64",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 25125,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25106,
                              "src": "9475:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 25128,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 25126,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 25112,
                                      "src": "9481:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 25127,
                                      "name": "off",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 25108,
                                      "src": "9487:3:64",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9481:9:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 25129,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9480:11:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 25130,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9494:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "9480:15:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 25124,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24751,
                            "src": "9468:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 25132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9468:28:64",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 25133,
                        "nodeType": "ExpressionStatement",
                        "src": "9468:28:64"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    25137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25137,
                      "mutability": "mutable",
                      "name": "mask",
                      "nameLocation": "9514:4:64",
                      "nodeType": "VariableDeclaration",
                      "scope": 25148,
                      "src": "9509:9:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25136,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9509:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25144,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 25140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "323536",
                            "id": 25138,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9522:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_256_by_1",
                              "typeString": "int_const 256"
                            },
                            "value": "256"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "**",
                          "rightExpression": {
                            "id": 25139,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25112,
                            "src": "9529:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9522:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 25141,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9521:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 25142,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9536:1:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "9521:16:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9509:28:64"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "9552:392:64",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "9603:24:64",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "9623:3:64"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "9617:5:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9617:10:64"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "9607:6:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "9704:38:64",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "9724:6:64"
                                },
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "9732:3:64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "9720:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9720:16:64"
                            },
                            {
                              "name": "len",
                              "nodeType": "YulIdentifier",
                              "src": "9738:3:64"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "9716:3:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9716:26:64"
                        },
                        "variables": [
                          {
                            "name": "dest",
                            "nodeType": "YulTypedName",
                            "src": "9708:4:64",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dest",
                              "nodeType": "YulIdentifier",
                              "src": "9756:4:64"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "dest",
                                          "nodeType": "YulIdentifier",
                                          "src": "9775:4:64"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "9769:5:64"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9769:11:64"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "9786:4:64"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "not",
                                        "nodeType": "YulIdentifier",
                                        "src": "9782:3:64"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9782:9:64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "9765:3:64"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9765:27:64"
                                },
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "9794:4:64"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "9762:2:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9762:37:64"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9749:6:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9749:51:64"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9749:51:64"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9891:47:64",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "bufptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "9908:6:64"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "off",
                                        "nodeType": "YulIdentifier",
                                        "src": "9920:3:64"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "9925:3:64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9916:3:64"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9916:13:64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9901:6:64"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9901:29:64"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9901:29:64"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "9865:3:64"
                                },
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "9870:3:64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "9861:3:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9861:13:64"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "9882:6:64"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "9876:5:64"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9876:13:64"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "9858:2:64"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9858:32:64"
                        },
                        "nodeType": "YulIf",
                        "src": "9855:2:64"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25106,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9623:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25110,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9794:4:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25112,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9738:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25112,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9870:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25112,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9925:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25137,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9786:4:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25108,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9732:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25108,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9865:3:64",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25108,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9920:3:64",
                      "valueSize": 1
                    }
                  ],
                  "id": 25145,
                  "nodeType": "InlineAssembly",
                  "src": "9543:401:64"
                },
                {
                  "expression": {
                    "id": 25146,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 25106,
                    "src": "9956:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 25117,
                  "id": 25147,
                  "nodeType": "Return",
                  "src": "9949:10:64"
                }
              ]
            },
            "documentation": {
              "id": 25103,
              "nodeType": "StructuredDocumentation",
              "src": "8928:343:64",
              "text": " @dev Writes an integer to the buffer. Resizes if doing so would exceed\n      the capacity of the buffer.\n @param buf The buffer to append to.\n @param off The offset to write at.\n @param data The data to append.\n @param len The number of bytes to write (right-aligned).\n @return The original buffer, for chaining."
            },
            "id": 25149,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "writeInt",
            "nameLocation": "9283:8:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25106,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "9311:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25149,
                  "src": "9297:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25105,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25104,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "9297:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "9297:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25108,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "9325:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25149,
                  "src": "9320:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25107,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9320:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25110,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "9339:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25149,
                  "src": "9334:9:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25109,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9334:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25112,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "9354:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25149,
                  "src": "9349:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25111,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9349:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9291:70:64"
            },
            "returnParameters": {
              "id": 25117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25116,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25149,
                  "src": "9402:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25115,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25114,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "9402:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "9402:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9394:27:64"
            },
            "scope": 25174,
            "src": "9274:690:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 25172,
              "nodeType": "Block",
              "src": "10353:58:64",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25164,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25153,
                        "src": "10375:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 25165,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25153,
                            "src": "10380:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 25166,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24657,
                          "src": "10380:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 25167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "10380:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 25168,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25155,
                        "src": "10396:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 25169,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25157,
                        "src": "10402:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25163,
                      "name": "writeInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25149,
                      "src": "10366:8:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$24660_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_struct$_buffer_$24660_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,uint256,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 25170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10366:40:64",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 25162,
                  "id": 25171,
                  "nodeType": "Return",
                  "src": "10359:47:64"
                }
              ]
            },
            "documentation": {
              "id": 25150,
              "nodeType": "StructuredDocumentation",
              "src": "9968:244:64",
              "text": " @dev Appends a byte to the end of the buffer. Resizes if doing so would\n exceed the capacity of the buffer.\n @param buf The buffer to append to.\n @param data The data to append.\n @return The original buffer."
            },
            "id": 25173,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendInt",
            "nameLocation": "10224:9:64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25153,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "10253:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25173,
                  "src": "10239:17:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25152,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25151,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "10239:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "10239:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25155,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "10267:4:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25173,
                  "src": "10262:9:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25154,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10262:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25157,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "10282:3:64",
                  "nodeType": "VariableDeclaration",
                  "scope": 25173,
                  "src": "10277:8:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25156,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10277:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10233:56:64"
            },
            "returnParameters": {
              "id": 25162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25161,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25173,
                  "src": "10331:13:64",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$24660_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 25160,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 25159,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24660,
                      "src": "10331:6:64"
                    },
                    "referencedDeclaration": 24660,
                    "src": "10331:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$24660_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10323:27:64"
            },
            "scope": 25174,
            "src": "10215:196:64",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 25175,
        "src": "434:9979:64",
        "usedErrors": []
      }
    ],
    "src": "32:10382:64"
  },
  "bytecode": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220445a230a3fdc877c31c77955f055290404f4c1cea74e24d92bfcfd6a7433325564736f6c63430008060033",
  "bytecodeSha1": "1ce946f6a4eaa185320328620ccf999b9e86db7c",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "BufferChainlink",
  "coverageMap": {
    "branches": {
      "64": {}
    },
    "statements": {
      "64": {}
    }
  },
  "dependencies": [],
  "deployedBytecode": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220445a230a3fdc877c31c77955f055290404f4c1cea74e24d92bfcfd6a7433325564736f6c63430008060033",
  "deployedSourceMap": "434:9979:64:-:0;;;;;;;;",
  "language": "Solidity",
  "natspec": {
    "details": "A library for working with mutable byte buffers in Solidity. Byte buffers are mutable and expandable, and provide a variety of primitives for writing to them. At any time you can fetch a bytes object containing the current contents of the buffer. The bytes object should not be stored between operations, as it may change due to resizing of the buffer.",
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "offset": [
    434,
    10413
  ],
  "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIFFICULTY GAS 0x23 EXP EXTCODEHASH 0xDC DUP8 PUSH29 0x31C77955F055290404F4C1CEA74E24D92BFCFD6A7433325564736F6C63 NUMBER STOP ADDMOD MOD STOP CALLER ",
  "pcMap": {
    "0": {
      "offset": [
        434,
        10413
      ],
      "op": "PUSH20",
      "path": "64",
      "value": "0x0"
    },
    "21": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "ADDRESS",
      "path": "64"
    },
    "22": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "EQ",
      "path": "64"
    },
    "23": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "PUSH1",
      "path": "64",
      "value": "0x80"
    },
    "25": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "PUSH1",
      "path": "64",
      "value": "0x40"
    },
    "27": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "MSTORE",
      "path": "64"
    },
    "28": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "PUSH1",
      "path": "64",
      "value": "0x0"
    },
    "30": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "DUP1",
      "path": "64"
    },
    "31": {
      "fn": null,
      "offset": [
        434,
        10413
      ],
      "op": "REVERT",
      "path": "64"
    }
  },
  "sha1": "90ef3d8e91e39b1e2f4d35383c292cf08ba8c242",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n* @dev A library for working with mutable byte buffers in Solidity.\n*\n* Byte buffers are mutable and expandable, and provide a variety of primitives\n* for writing to them. At any time you can fetch a bytes object containing the\n* current contents of the buffer. The bytes object should not be stored between\n* operations, as it may change due to resizing of the buffer.\n*/\nlibrary BufferChainlink {\n  /**\n  * @dev Represents a mutable buffer. Buffers have a current value (buf) and\n  *      a capacity. The capacity may be longer than the current value, in\n  *      which case it can be extended without the need to allocate more memory.\n  */\n  struct buffer {\n    bytes buf;\n    uint capacity;\n  }\n\n  /**\n  * @dev Initializes a buffer with an initial capacity.\n  * @param buf The buffer to initialize.\n  * @param capacity The number of bytes of space to allocate the buffer.\n  * @return The buffer, for chaining.\n  */\n  function init(\n    buffer memory buf,\n    uint capacity\n  )\n    internal\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    if (capacity % 32 != 0) {\n      capacity += 32 - (capacity % 32);\n    }\n    // Allocate space for the buffer data\n    buf.capacity = capacity;\n    assembly {\n      let ptr := mload(0x40)\n      mstore(buf, ptr)\n      mstore(ptr, 0)\n      mstore(0x40, add(32, add(ptr, capacity)))\n    }\n    return buf;\n  }\n\n  /**\n  * @dev Initializes a new buffer from an existing bytes object.\n  *      Changes to the buffer may mutate the original value.\n  * @param b The bytes object to initialize the buffer with.\n  * @return A new buffer.\n  */\n  function fromBytes(\n    bytes memory b\n  )\n    internal\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    buffer memory buf;\n    buf.buf = b;\n    buf.capacity = b.length;\n    return buf;\n  }\n\n  function resize(\n    buffer memory buf,\n    uint capacity\n  )\n    private\n    pure\n  {\n    bytes memory oldbuf = buf.buf;\n    init(buf, capacity);\n    append(buf, oldbuf);\n  }\n\n  function max(\n    uint a,\n    uint b\n  )\n    private\n    pure\n    returns(\n      uint\n    )\n  {\n    if (a > b) {\n      return a;\n    }\n    return b;\n  }\n\n  /**\n  * @dev Sets buffer length to 0.\n  * @param buf The buffer to truncate.\n  * @return The original buffer, for chaining..\n  */\n  function truncate(\n    buffer memory buf\n  )\n    internal\n    pure\n    returns (\n      buffer memory\n    )\n  {\n    assembly {\n      let bufptr := mload(buf)\n      mstore(bufptr, 0)\n    }\n    return buf;\n  }\n\n  /**\n  * @dev Writes a byte string to a buffer. Resizes if doing so would exceed\n  *      the capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param off The start offset to write to.\n  * @param data The data to append.\n  * @param len The number of bytes to copy.\n  * @return The original buffer, for chaining.\n  */\n  function write(\n    buffer memory buf,\n    uint off,\n    bytes memory data,\n    uint len\n  )\n    internal\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    require(len <= data.length);\n\n    if (off + len > buf.capacity) {\n      resize(buf, max(buf.capacity, len + off) * 2);\n    }\n\n    uint dest;\n    uint src;\n    assembly {\n      // Memory address of the buffer data\n      let bufptr := mload(buf)\n      // Length of existing buffer data\n      let buflen := mload(bufptr)\n      // Start address = buffer address + offset + sizeof(buffer length)\n      dest := add(add(bufptr, 32), off)\n      // Update buffer length if we're extending it\n      if gt(add(len, off), buflen) {\n        mstore(bufptr, add(len, off))\n      }\n      src := add(data, 32)\n    }\n\n    // Copy word-length chunks while possible\n    for (; len >= 32; len -= 32) {\n      assembly {\n        mstore(dest, mload(src))\n      }\n      dest += 32;\n      src += 32;\n    }\n\n    // Copy remaining bytes\n    unchecked {\n      uint mask = (256 ** (32 - len)) - 1;\n      assembly {\n        let srcpart := and(mload(src), not(mask))\n        let destpart := and(mload(dest), mask)\n        mstore(dest, or(destpart, srcpart))\n      }\n    }\n\n    return buf;\n  }\n\n  /**\n  * @dev Appends a byte string to a buffer. Resizes if doing so would exceed\n  *      the capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param data The data to append.\n  * @param len The number of bytes to copy.\n  * @return The original buffer, for chaining.\n  */\n  function append(\n    buffer memory buf,\n    bytes memory data,\n    uint len\n  )\n    internal\n    pure\n    returns (\n      buffer memory\n    )\n  {\n    return write(buf, buf.buf.length, data, len);\n  }\n\n  /**\n  * @dev Appends a byte string to a buffer. Resizes if doing so would exceed\n  *      the capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param data The data to append.\n  * @return The original buffer, for chaining.\n  */\n  function append(\n    buffer memory buf,\n    bytes memory data\n  )\n    internal\n    pure\n    returns (\n      buffer memory\n    )\n  {\n    return write(buf, buf.buf.length, data, data.length);\n  }\n\n  /**\n  * @dev Writes a byte to the buffer. Resizes if doing so would exceed the\n  *      capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param off The offset to write the byte at.\n  * @param data The data to append.\n  * @return The original buffer, for chaining.\n  */\n  function writeUint8(\n    buffer memory buf,\n    uint off,\n    uint8 data\n  )\n    internal\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    if (off >= buf.capacity) {\n      resize(buf, buf.capacity * 2);\n    }\n\n    assembly {\n      // Memory address of the buffer data\n      let bufptr := mload(buf)\n      // Length of existing buffer data\n      let buflen := mload(bufptr)\n      // Address = buffer address + sizeof(buffer length) + off\n      let dest := add(add(bufptr, off), 32)\n      mstore8(dest, data)\n      // Update buffer length if we extended it\n      if eq(off, buflen) {\n        mstore(bufptr, add(buflen, 1))\n      }\n    }\n    return buf;\n  }\n\n  /**\n  * @dev Appends a byte to the buffer. Resizes if doing so would exceed the\n  *      capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param data The data to append.\n  * @return The original buffer, for chaining.\n  */\n  function appendUint8(\n    buffer memory buf,\n    uint8 data\n  )\n    internal\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    return writeUint8(buf, buf.buf.length, data);\n  }\n\n  /**\n  * @dev Writes up to 32 bytes to the buffer. Resizes if doing so would\n  *      exceed the capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param off The offset to write at.\n  * @param data The data to append.\n  * @param len The number of bytes to write (left-aligned).\n  * @return The original buffer, for chaining.\n  */\n  function write(\n    buffer memory buf,\n    uint off,\n    bytes32 data,\n    uint len\n  )\n    private\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    if (len + off > buf.capacity) {\n      resize(buf, (len + off) * 2);\n    }\n\n    unchecked {\n      uint mask = (256 ** len) - 1;\n      // Right-align data\n      data = data >> (8 * (32 - len));\n      assembly {\n        // Memory address of the buffer data\n        let bufptr := mload(buf)\n        // Address = buffer address + sizeof(buffer length) + off + len\n        let dest := add(add(bufptr, off), len)\n        mstore(dest, or(and(mload(dest), not(mask)), data))\n        // Update buffer length if we extended it\n        if gt(add(off, len), mload(bufptr)) {\n          mstore(bufptr, add(off, len))\n        }\n      }\n    }\n    return buf;\n  }\n\n  /**\n  * @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the\n  *      capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param off The offset to write at.\n  * @param data The data to append.\n  * @return The original buffer, for chaining.\n  */\n  function writeBytes20(\n    buffer memory buf,\n    uint off,\n    bytes20 data\n  )\n    internal\n    pure\n    returns (\n      buffer memory\n    )\n  {\n    return write(buf, off, bytes32(data), 20);\n  }\n\n  /**\n  * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed\n  *      the capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param data The data to append.\n  * @return The original buffer, for chhaining.\n  */\n  function appendBytes20(\n    buffer memory buf,\n    bytes20 data\n  )\n    internal\n    pure\n    returns (\n      buffer memory\n    )\n  {\n    return write(buf, buf.buf.length, bytes32(data), 20);\n  }\n\n  /**\n  * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed\n  *      the capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param data The data to append.\n  * @return The original buffer, for chaining.\n  */\n  function appendBytes32(\n    buffer memory buf,\n    bytes32 data\n  )\n    internal\n    pure\n    returns (\n      buffer memory\n    )\n  {\n    return write(buf, buf.buf.length, data, 32);\n  }\n\n  /**\n  * @dev Writes an integer to the buffer. Resizes if doing so would exceed\n  *      the capacity of the buffer.\n  * @param buf The buffer to append to.\n  * @param off The offset to write at.\n  * @param data The data to append.\n  * @param len The number of bytes to write (right-aligned).\n  * @return The original buffer, for chaining.\n  */\n  function writeInt(\n    buffer memory buf,\n    uint off,\n    uint data,\n    uint len\n  )\n    private\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    if (len + off > buf.capacity) {\n      resize(buf, (len + off) * 2);\n    }\n\n    uint mask = (256 ** len) - 1;\n    assembly {\n      // Memory address of the buffer data\n      let bufptr := mload(buf)\n      // Address = buffer address + off + sizeof(buffer length) + len\n      let dest := add(add(bufptr, off), len)\n      mstore(dest, or(and(mload(dest), not(mask)), data))\n      // Update buffer length if we extended it\n      if gt(add(off, len), mload(bufptr)) {\n        mstore(bufptr, add(off, len))\n      }\n    }\n    return buf;\n  }\n\n  /**\n    * @dev Appends a byte to the end of the buffer. Resizes if doing so would\n    * exceed the capacity of the buffer.\n    * @param buf The buffer to append to.\n    * @param data The data to append.\n    * @return The original buffer.\n    */\n  function appendInt(\n    buffer memory buf,\n    uint data,\n    uint len\n  )\n    internal\n    pure\n    returns(\n      buffer memory\n    )\n  {\n    return writeInt(buf, buf.buf.length, data, len);\n  }\n}\n",
  "sourceMap": "434:9979:64:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;434:9979:64;;;;;;;;;;;;;;;;;",
  "sourcePath": "node_modules/@chainlink/contracts/src/v0.8/vendor/BufferChainlink.sol",
  "type": "library"
}