{
  "abi": [],
  "allSourcePaths": {
    "62": "/home/vscode/.brownie/packages/smartcontractkit/chainlink@1.6.0/contracts/src/v0.8/vendor/BufferChainlink.sol"
  },
  "ast": {
    "absolutePath": "/home/vscode/.brownie/packages/smartcontractkit/chainlink@1.6.0/contracts/src/v0.8/vendor/BufferChainlink.sol",
    "exportedSymbols": {
      "BufferChainlink": [
        28140
      ]
    },
    "id": 28141,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 27620,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:62"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 27621,
          "nodeType": "StructuredDocumentation",
          "src": "57:383:62",
          "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": 28140,
        "linearizedBaseContracts": [
          28140
        ],
        "name": "BufferChainlink",
        "nameLocation": "449:15:62",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "BufferChainlink.buffer",
            "id": 27626,
            "members": [
              {
                "constant": false,
                "id": 27623,
                "mutability": "mutable",
                "name": "buf",
                "nameLocation": "743:3:62",
                "nodeType": "VariableDeclaration",
                "scope": 27626,
                "src": "737:9:62",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 27622,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "737:5:62",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 27625,
                "mutability": "mutable",
                "name": "capacity",
                "nameLocation": "760:8:62",
                "nodeType": "VariableDeclaration",
                "scope": 27626,
                "src": "752:16:62",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 27624,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "752:7:62",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "buffer",
            "nameLocation": "724:6:62",
            "nodeType": "StructDefinition",
            "scope": 28140,
            "src": "717:56:62",
            "visibility": "public"
          },
          {
            "body": {
              "id": 27663,
              "nodeType": "Block",
              "src": "1090:310:62",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 27642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 27640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 27638,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27632,
                        "src": "1100:8:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "%",
                      "rightExpression": {
                        "hexValue": "3332",
                        "id": 27639,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1111:2:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "1100:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 27641,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1117:1:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1100:18:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27653,
                  "nodeType": "IfStatement",
                  "src": "1096:71:62",
                  "trueBody": {
                    "id": 27652,
                    "nodeType": "Block",
                    "src": "1120:47:62",
                    "statements": [
                      {
                        "expression": {
                          "id": 27650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 27643,
                            "name": "capacity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27632,
                            "src": "1128:8:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 27649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "3332",
                              "id": 27644,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1140:2:62",
                              "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": 27647,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 27645,
                                    "name": "capacity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 27632,
                                    "src": "1146:8:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "3332",
                                    "id": 27646,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1157:2:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  "src": "1146:13:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 27648,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1145:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1140:20:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1128:32:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 27651,
                        "nodeType": "ExpressionStatement",
                        "src": "1128:32:62"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 27658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 27654,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27630,
                        "src": "1214:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 27656,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27625,
                      "src": "1214:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27657,
                      "name": "capacity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27632,
                      "src": "1229:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1214:23:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 27659,
                  "nodeType": "ExpressionStatement",
                  "src": "1214:23:62"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1252:128:62",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "1260:22:62",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1277:4:62",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "1271:5:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1271:11:62"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "1264:3:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "1296:3:62"
                            },
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "1301:3:62"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1289:6:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1289:16:62"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1289:16:62"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "1319:3:62"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1324:1:62",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1312:6:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1312:14:62"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1312:14:62"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1340:4:62",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1350:2:62",
                                  "type": "",
                                  "value": "32"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "1358:3:62"
                                    },
                                    {
                                      "name": "capacity",
                                      "nodeType": "YulIdentifier",
                                      "src": "1363:8:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1354:3:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1354:18:62"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1346:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1346:27:62"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1333:6:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1333:41:62"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1333:41:62"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27630,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1296:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27632,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1363:8:62",
                      "valueSize": 1
                    }
                  ],
                  "id": 27660,
                  "nodeType": "InlineAssembly",
                  "src": "1243:137:62"
                },
                {
                  "expression": {
                    "id": 27661,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 27630,
                    "src": "1392:3:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27637,
                  "id": 27662,
                  "nodeType": "Return",
                  "src": "1385:10:62"
                }
              ]
            },
            "documentation": {
              "id": 27627,
              "nodeType": "StructuredDocumentation",
              "src": "777:221:62",
              "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": 27664,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "init",
            "nameLocation": "1010:4:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27630,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "1029:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27664,
                  "src": "1015:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27629,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27628,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "1015:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "1015:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27632,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nameLocation": "1042:8:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27664,
                  "src": "1034:16:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27631,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1034:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1014:37:62"
            },
            "returnParameters": {
              "id": 27637,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27636,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27664,
                  "src": "1075:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27635,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27634,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "1075:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "1075:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1074:15:62"
            },
            "scope": 28140,
            "src": "1001:399:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27692,
              "nodeType": "Block",
              "src": "1707:90:62",
              "statements": [
                {
                  "assignments": [
                    27675
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27675,
                      "mutability": "mutable",
                      "name": "buf",
                      "nameLocation": "1727:3:62",
                      "nodeType": "VariableDeclaration",
                      "scope": 27692,
                      "src": "1713:17:62",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                        "typeString": "struct BufferChainlink.buffer"
                      },
                      "typeName": {
                        "id": 27674,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 27673,
                          "name": "buffer",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 27626,
                          "src": "1713:6:62"
                        },
                        "referencedDeclaration": 27626,
                        "src": "1713:6:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                          "typeString": "struct BufferChainlink.buffer"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27676,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1713:17:62"
                },
                {
                  "expression": {
                    "id": 27681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 27677,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27675,
                        "src": "1736:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 27679,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "buf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27623,
                      "src": "1736:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27680,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27667,
                      "src": "1746:1:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "1736:11:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 27682,
                  "nodeType": "ExpressionStatement",
                  "src": "1736:11:62"
                },
                {
                  "expression": {
                    "id": 27688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 27683,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27675,
                        "src": "1753:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 27685,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27625,
                      "src": "1753:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 27686,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27667,
                        "src": "1768:1:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 27687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1768:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1753:23:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 27689,
                  "nodeType": "ExpressionStatement",
                  "src": "1753:23:62"
                },
                {
                  "expression": {
                    "id": 27690,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 27675,
                    "src": "1789:3:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27672,
                  "id": 27691,
                  "nodeType": "Return",
                  "src": "1782:10:62"
                }
              ]
            },
            "documentation": {
              "id": 27665,
              "nodeType": "StructuredDocumentation",
              "src": "1404:227:62",
              "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": 27693,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fromBytes",
            "nameLocation": "1643:9:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27667,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "1666:1:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27693,
                  "src": "1653:14:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27666,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1653:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1652:16:62"
            },
            "returnParameters": {
              "id": 27672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27671,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27693,
                  "src": "1692:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27670,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27669,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "1692:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "1692:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1691:15:62"
            },
            "scope": 28140,
            "src": "1634:163:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27716,
              "nodeType": "Block",
              "src": "1867:90:62",
              "statements": [
                {
                  "assignments": [
                    27702
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27702,
                      "mutability": "mutable",
                      "name": "oldbuf",
                      "nameLocation": "1886:6:62",
                      "nodeType": "VariableDeclaration",
                      "scope": 27716,
                      "src": "1873:19:62",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 27701,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1873:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27705,
                  "initialValue": {
                    "expression": {
                      "id": 27703,
                      "name": "buf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27696,
                      "src": "1895:3:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                        "typeString": "struct BufferChainlink.buffer memory"
                      }
                    },
                    "id": 27704,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "buf",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27623,
                    "src": "1895:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1873:29:62"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27707,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27696,
                        "src": "1913:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "id": 27708,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27698,
                        "src": "1918:8:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 27706,
                      "name": "init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27664,
                      "src": "1908:4:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 27709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1908:19:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "id": 27710,
                  "nodeType": "ExpressionStatement",
                  "src": "1908:19:62"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27712,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27696,
                        "src": "1940:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "id": 27713,
                        "name": "oldbuf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27702,
                        "src": "1945:6:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 27711,
                      "name": "append",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        27860,
                        27883
                      ],
                      "referencedDeclaration": 27883,
                      "src": "1933:6:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,bytes memory) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 27714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1933:19:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "id": 27715,
                  "nodeType": "ExpressionStatement",
                  "src": "1933:19:62"
                }
              ]
            },
            "id": 27717,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resize",
            "nameLocation": "1810:6:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27699,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27696,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "1831:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27717,
                  "src": "1817:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27695,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27694,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "1817:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "1817:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27698,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nameLocation": "1844:8:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27717,
                  "src": "1836:16:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27697,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1836:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1816:37:62"
            },
            "returnParameters": {
              "id": 27700,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1867:0:62"
            },
            "scope": 28140,
            "src": "1801:156:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 27735,
              "nodeType": "Block",
              "src": "2027:58:62",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 27728,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 27726,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27719,
                      "src": "2037:1:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 27727,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27721,
                      "src": "2041:1:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2037:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27732,
                  "nodeType": "IfStatement",
                  "src": "2033:34:62",
                  "trueBody": {
                    "id": 27731,
                    "nodeType": "Block",
                    "src": "2044:23:62",
                    "statements": [
                      {
                        "expression": {
                          "id": 27729,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27719,
                          "src": "2059:1:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 27725,
                        "id": 27730,
                        "nodeType": "Return",
                        "src": "2052:8:62"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 27733,
                    "name": "b",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 27721,
                    "src": "2079:1:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 27725,
                  "id": 27734,
                  "nodeType": "Return",
                  "src": "2072:8:62"
                }
              ]
            },
            "id": 27736,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "max",
            "nameLocation": "1970:3:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27719,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "1982:1:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27736,
                  "src": "1974:9:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27718,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1974:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27721,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "1993:1:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27736,
                  "src": "1985:9:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27720,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1985:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1973:22:62"
            },
            "returnParameters": {
              "id": 27725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27724,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27736,
                  "src": "2018:7:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27723,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2018:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2017:9:62"
            },
            "scope": 28140,
            "src": "1961:124:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 27749,
              "nodeType": "Block",
              "src": "2300:97:62",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2315:62:62",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2323:24:62",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "2343:3:62"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "2337:5:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2337:10:62"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "2327:6:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "bufptr",
                              "nodeType": "YulIdentifier",
                              "src": "2361:6:62"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2369:1:62",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2354:6:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2354:17:62"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2354:17:62"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27740,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2343:3:62",
                      "valueSize": 1
                    }
                  ],
                  "id": 27746,
                  "nodeType": "InlineAssembly",
                  "src": "2306:71:62"
                },
                {
                  "expression": {
                    "id": 27747,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 27740,
                    "src": "2389:3:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27745,
                  "id": 27748,
                  "nodeType": "Return",
                  "src": "2382:10:62"
                }
              ]
            },
            "documentation": {
              "id": 27737,
              "nodeType": "StructuredDocumentation",
              "src": "2089:133:62",
              "text": " @dev Sets buffer length to 0.\n @param buf The buffer to truncate.\n @return The original buffer, for chaining.."
            },
            "id": 27750,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "truncate",
            "nameLocation": "2234:8:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27740,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "2257:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27750,
                  "src": "2243:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27739,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27738,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "2243:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "2243:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2242:19:62"
            },
            "returnParameters": {
              "id": 27745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27744,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27750,
                  "src": "2285:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27743,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27742,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "2285:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "2285:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2284:15:62"
            },
            "scope": 28140,
            "src": "2225:172:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27835,
              "nodeType": "Block",
              "src": "2882:1073:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 27770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 27767,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27760,
                          "src": "2896:3:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 27768,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27758,
                            "src": "2903:4:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 27769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "2903:11:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2896:18:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 27766,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2888:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 27771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2888:27:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27772,
                  "nodeType": "ExpressionStatement",
                  "src": "2888:27:62"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 27778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 27775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 27773,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27756,
                        "src": "2926:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 27774,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27760,
                        "src": "2932:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2926:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 27776,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27754,
                        "src": "2938:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 27777,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27625,
                      "src": "2938:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2926:24:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27793,
                  "nodeType": "IfStatement",
                  "src": "2922:90:62",
                  "trueBody": {
                    "id": 27792,
                    "nodeType": "Block",
                    "src": "2952:60:62",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 27780,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27754,
                              "src": "2967:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 27789,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 27782,
                                      "name": "buf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27754,
                                      "src": "2976:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                        "typeString": "struct BufferChainlink.buffer memory"
                                      }
                                    },
                                    "id": 27783,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "capacity",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 27625,
                                    "src": "2976:12:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 27786,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 27784,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27760,
                                      "src": "2990:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 27785,
                                      "name": "off",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27756,
                                      "src": "2996:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2990:9:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 27781,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 27736,
                                  "src": "2972:3:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 27787,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2972:28:62",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 27788,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3003:1:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "2972:32:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 27779,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27717,
                            "src": "2960:6:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 27790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2960:45:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27791,
                        "nodeType": "ExpressionStatement",
                        "src": "2960:45:62"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    27795
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27795,
                      "mutability": "mutable",
                      "name": "dest",
                      "nameLocation": "3026:4:62",
                      "nodeType": "VariableDeclaration",
                      "scope": 27835,
                      "src": "3018:12:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 27794,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3018:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27796,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3018:12:62"
                },
                {
                  "assignments": [
                    27798
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27798,
                      "mutability": "mutable",
                      "name": "src",
                      "nameLocation": "3044:3:62",
                      "nodeType": "VariableDeclaration",
                      "scope": 27835,
                      "src": "3036:11:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 27797,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3036:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27799,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3036:11:62"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3062:430:62",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3113:24:62",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "3133:3:62"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "3127:5:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3127:10:62"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "3117:6:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3184:27:62",
                        "value": {
                          "arguments": [
                            {
                              "name": "bufptr",
                              "nodeType": "YulIdentifier",
                              "src": "3204:6:62"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "3198:5:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3198:13:62"
                        },
                        "variables": [
                          {
                            "name": "buflen",
                            "nodeType": "YulTypedName",
                            "src": "3188:6:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3291:33:62",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "3307:6:62"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3315:2:62",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3303:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3303:15:62"
                            },
                            {
                              "name": "off",
                              "nodeType": "YulIdentifier",
                              "src": "3320:3:62"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3299:3:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3299:25:62"
                        },
                        "variableNames": [
                          {
                            "name": "dest",
                            "nodeType": "YulIdentifier",
                            "src": "3291:4:62"
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3412:47:62",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "bufptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3429:6:62"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "3441:3:62"
                                      },
                                      {
                                        "name": "off",
                                        "nodeType": "YulIdentifier",
                                        "src": "3446:3:62"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3437:3:62"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3437:13:62"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3422:6:62"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3422:29:62"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3422:29:62"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "3393:3:62"
                                },
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "3398:3:62"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3389:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3389:13:62"
                            },
                            {
                              "name": "buflen",
                              "nodeType": "YulIdentifier",
                              "src": "3404:6:62"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "3386:2:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3386:25:62"
                        },
                        "nodeType": "YulIf",
                        "src": "3383:2:62"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3466:20:62",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "3477:4:62"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3483:2:62",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3473:3:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3473:13:62"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "3466:3:62"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27754,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3133:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27758,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3477:4:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27795,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3291:4:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27760,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3393:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27760,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3441:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27756,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3320:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27756,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3398:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27756,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3446:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27798,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3466:3:62",
                      "valueSize": 1
                    }
                  ],
                  "id": 27800,
                  "nodeType": "InlineAssembly",
                  "src": "3053:439:62"
                },
                {
                  "body": {
                    "id": 27817,
                    "nodeType": "Block",
                    "src": "3573:100:62",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3590:42:62",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dest",
                                    "nodeType": "YulIdentifier",
                                    "src": "3607:4:62"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "3619:3:62"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3613:5:62"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3613:10:62"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3600:6:62"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3600:24:62"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3600:24:62"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 27795,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3607:4:62",
                            "valueSize": 1
                          },
                          {
                            "declaration": 27798,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3619:3:62",
                            "valueSize": 1
                          }
                        ],
                        "id": 27808,
                        "nodeType": "InlineAssembly",
                        "src": "3581:51:62"
                      },
                      {
                        "expression": {
                          "id": 27811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 27809,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27795,
                            "src": "3639:4:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 27810,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3647:2:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "3639:10:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 27812,
                        "nodeType": "ExpressionStatement",
                        "src": "3639:10:62"
                      },
                      {
                        "expression": {
                          "id": 27815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 27813,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27798,
                            "src": "3657:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 27814,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3664:2:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "3657:9:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 27816,
                        "nodeType": "ExpressionStatement",
                        "src": "3657:9:62"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 27803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 27801,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27760,
                      "src": "3551:3:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 27802,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3558:2:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "3551:9:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27818,
                  "loopExpression": {
                    "expression": {
                      "id": 27806,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 27804,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27760,
                        "src": "3562:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 27805,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3569:2:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "3562:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 27807,
                    "nodeType": "ExpressionStatement",
                    "src": "3562:9:62"
                  },
                  "nodeType": "ForStatement",
                  "src": "3544:129:62"
                },
                {
                  "id": 27832,
                  "nodeType": "UncheckedBlock",
                  "src": "3707:227:62",
                  "statements": [
                    {
                      "assignments": [
                        27820
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 27820,
                          "mutability": "mutable",
                          "name": "mask",
                          "nameLocation": "3733:4:62",
                          "nodeType": "VariableDeclaration",
                          "scope": 27832,
                          "src": "3725:12:62",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 27819,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3725:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 27830,
                      "initialValue": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 27829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 27826,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "323536",
                                "id": 27821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3741:3:62",
                                "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": 27824,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "3332",
                                      "id": 27822,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3747:2:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 27823,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27760,
                                      "src": "3752:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3747:8:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 27825,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3746:10:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3741:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 27827,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3740:17:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 27828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3760:1:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "3740:21:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3725:36:62"
                    },
                    {
                      "AST": {
                        "nodeType": "YulBlock",
                        "src": "3778:150:62",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "3788:41:62",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "3813:3:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "3807:5:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3807:10:62"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "mask",
                                      "nodeType": "YulIdentifier",
                                      "src": "3823:4:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "3819:3:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3819:9:62"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "3803:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3803:26:62"
                            },
                            "variables": [
                              {
                                "name": "srcpart",
                                "nodeType": "YulTypedName",
                                "src": "3792:7:62",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "3838:38:62",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "dest",
                                      "nodeType": "YulIdentifier",
                                      "src": "3864:4:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "3858:5:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3858:11:62"
                                },
                                {
                                  "name": "mask",
                                  "nodeType": "YulIdentifier",
                                  "src": "3871:4:62"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "3854:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3854:22:62"
                            },
                            "variables": [
                              {
                                "name": "destpart",
                                "nodeType": "YulTypedName",
                                "src": "3842:8:62",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "dest",
                                  "nodeType": "YulIdentifier",
                                  "src": "3892:4:62"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "destpart",
                                      "nodeType": "YulIdentifier",
                                      "src": "3901:8:62"
                                    },
                                    {
                                      "name": "srcpart",
                                      "nodeType": "YulIdentifier",
                                      "src": "3911:7:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "or",
                                    "nodeType": "YulIdentifier",
                                    "src": "3898:2:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3898:21:62"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "3885:6:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3885:35:62"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3885:35:62"
                          }
                        ]
                      },
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 27795,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3864:4:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27795,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3892:4:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27820,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3823:4:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27820,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3871:4:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27798,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3813:3:62",
                          "valueSize": 1
                        }
                      ],
                      "id": 27831,
                      "nodeType": "InlineAssembly",
                      "src": "3769:159:62"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 27833,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 27754,
                    "src": "3947:3:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27765,
                  "id": 27834,
                  "nodeType": "Return",
                  "src": "3940:10:62"
                }
              ]
            },
            "documentation": {
              "id": 27751,
              "nodeType": "StructuredDocumentation",
              "src": "2401:341:62",
              "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": 27836,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "write",
            "nameLocation": "2754:5:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27754,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "2779:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27836,
                  "src": "2765:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27753,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27752,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "2765:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "2765:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27756,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "2796:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27836,
                  "src": "2788:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27755,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2788:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27758,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2818:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27836,
                  "src": "2805:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27757,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2805:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27760,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "2836:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27836,
                  "src": "2828:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27759,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2828:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2759:84:62"
            },
            "returnParameters": {
              "id": 27765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27764,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27836,
                  "src": "2867:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27763,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27762,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "2867:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "2867:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2866:15:62"
            },
            "scope": 28140,
            "src": "2745:1210:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27859,
              "nodeType": "Block",
              "src": "4379:55:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27851,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27840,
                        "src": "4398:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 27852,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27840,
                            "src": "4403:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 27853,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27623,
                          "src": "4403:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "4403:14:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 27855,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27842,
                        "src": "4419:4:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 27856,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27844,
                        "src": "4425:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_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": 27850,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        27836,
                        27996
                      ],
                      "referencedDeclaration": 27836,
                      "src": "4392:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes memory,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 27857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4392:37:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27849,
                  "id": 27858,
                  "nodeType": "Return",
                  "src": "4385:44:62"
                }
              ]
            },
            "documentation": {
              "id": 27837,
              "nodeType": "StructuredDocumentation",
              "src": "3959:296:62",
              "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": 27860,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "append",
            "nameLocation": "4267:6:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27845,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27840,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "4293:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27860,
                  "src": "4279:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27839,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27838,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "4279:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "4279:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27842,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4315:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27860,
                  "src": "4302:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27841,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4302:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27844,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "4333:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27860,
                  "src": "4325:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27843,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4325:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4273:67:62"
            },
            "returnParameters": {
              "id": 27849,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27848,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27860,
                  "src": "4364:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27847,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27846,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "4364:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "4364:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4363:15:62"
            },
            "scope": 28140,
            "src": "4258:176:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27882,
              "nodeType": "Block",
              "src": "4784:63:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27873,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27864,
                        "src": "4803:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 27874,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27864,
                            "src": "4808:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 27875,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27623,
                          "src": "4808:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27876,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "4808:14:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 27877,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27866,
                        "src": "4824:4:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 27878,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27866,
                          "src": "4830:4:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "4830:11:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_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": 27872,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        27836,
                        27996
                      ],
                      "referencedDeclaration": 27836,
                      "src": "4797:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes memory,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 27880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4797:45:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27871,
                  "id": 27881,
                  "nodeType": "Return",
                  "src": "4790:52:62"
                }
              ]
            },
            "documentation": {
              "id": 27861,
              "nodeType": "StructuredDocumentation",
              "src": "4438:251:62",
              "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": 27883,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "append",
            "nameLocation": "4701:6:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27864,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "4722:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27883,
                  "src": "4708:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27863,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27862,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "4708:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "4708:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27866,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4740:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27883,
                  "src": "4727:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27865,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4727:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4707:38:62"
            },
            "returnParameters": {
              "id": 27871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27870,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27883,
                  "src": "4769:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27869,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27868,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "4769:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "4769:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4768:15:62"
            },
            "scope": 28140,
            "src": "4692:155:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27914,
              "nodeType": "Block",
              "src": "5266:521:62",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 27900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 27897,
                      "name": "off",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27889,
                      "src": "5276:3:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "expression": {
                        "id": 27898,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27887,
                        "src": "5283:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 27899,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27625,
                      "src": "5283:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5276:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27910,
                  "nodeType": "IfStatement",
                  "src": "5272:69:62",
                  "trueBody": {
                    "id": 27909,
                    "nodeType": "Block",
                    "src": "5297:44:62",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 27902,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27887,
                              "src": "5312:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 27906,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 27903,
                                  "name": "buf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 27887,
                                  "src": "5317:3:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                    "typeString": "struct BufferChainlink.buffer memory"
                                  }
                                },
                                "id": 27904,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "capacity",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 27625,
                                "src": "5317:12:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 27905,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5332:1:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "5317:16:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 27901,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27717,
                            "src": "5305:6:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 27907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5305:29:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27908,
                        "nodeType": "ExpressionStatement",
                        "src": "5305:29:62"
                      }
                    ]
                  }
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5356:411:62",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5407:24:62",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "5427:3:62"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5421:5:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5421:10:62"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "5411:6:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5478:27:62",
                        "value": {
                          "arguments": [
                            {
                              "name": "bufptr",
                              "nodeType": "YulIdentifier",
                              "src": "5498:6:62"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5492:5:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5492:13:62"
                        },
                        "variables": [
                          {
                            "name": "buflen",
                            "nodeType": "YulTypedName",
                            "src": "5482:6:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5576:37:62",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5596:6:62"
                                },
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "5604:3:62"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5592:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5592:16:62"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5610:2:62",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5588:3:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5588:25:62"
                        },
                        "variables": [
                          {
                            "name": "dest",
                            "nodeType": "YulTypedName",
                            "src": "5580:4:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dest",
                              "nodeType": "YulIdentifier",
                              "src": "5628:4:62"
                            },
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "5634:4:62"
                            }
                          ],
                          "functionName": {
                            "name": "mstore8",
                            "nodeType": "YulIdentifier",
                            "src": "5620:7:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5620:19:62"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5620:19:62"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5713:48:62",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "bufptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "5730:6:62"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "buflen",
                                        "nodeType": "YulIdentifier",
                                        "src": "5742:6:62"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5750:1:62",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5738:3:62"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5738:14:62"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5723:6:62"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5723:30:62"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5723:30:62"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "off",
                              "nodeType": "YulIdentifier",
                              "src": "5700:3:62"
                            },
                            {
                              "name": "buflen",
                              "nodeType": "YulIdentifier",
                              "src": "5705:6:62"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "5697:2:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5697:15:62"
                        },
                        "nodeType": "YulIf",
                        "src": "5694:2:62"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27887,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5427:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27891,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5634:4:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27889,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5604:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27889,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5700:3:62",
                      "valueSize": 1
                    }
                  ],
                  "id": 27911,
                  "nodeType": "InlineAssembly",
                  "src": "5347:420:62"
                },
                {
                  "expression": {
                    "id": 27912,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 27887,
                    "src": "5779:3:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27896,
                  "id": 27913,
                  "nodeType": "Return",
                  "src": "5772:10:62"
                }
              ]
            },
            "documentation": {
              "id": 27884,
              "nodeType": "StructuredDocumentation",
              "src": "4851:294:62",
              "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": 27915,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "writeUint8",
            "nameLocation": "5157:10:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27892,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27887,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "5187:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27915,
                  "src": "5173:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27886,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27885,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "5173:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "5173:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27889,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "5204:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27915,
                  "src": "5196:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5196:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27891,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "5219:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27915,
                  "src": "5213:10:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 27890,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5213:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5167:60:62"
            },
            "returnParameters": {
              "id": 27896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27895,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27915,
                  "src": "5251:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27894,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27893,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "5251:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "5251:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5250:15:62"
            },
            "scope": 28140,
            "src": "5148:639:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27935,
              "nodeType": "Block",
              "src": "6130:55:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27928,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27919,
                        "src": "6154:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 27929,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27919,
                            "src": "6159:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 27930,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27623,
                          "src": "6159:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "6159:14:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 27932,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27921,
                        "src": "6175:4:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 27927,
                      "name": "writeUint8",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27915,
                      "src": "6143:10:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$_t_uint8_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,uint8) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 27933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6143:37:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27926,
                  "id": 27934,
                  "nodeType": "Return",
                  "src": "6136:44:62"
                }
              ]
            },
            "documentation": {
              "id": 27916,
              "nodeType": "StructuredDocumentation",
              "src": "5791:246:62",
              "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": 27936,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendUint8",
            "nameLocation": "6049:11:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27919,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "6075:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27936,
                  "src": "6061:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27918,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27917,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "6061:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "6061:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27921,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6086:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27936,
                  "src": "6080:10:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 27920,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6080:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6060:31:62"
            },
            "returnParameters": {
              "id": 27926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27925,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27936,
                  "src": "6115:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27924,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27923,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "6115:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "6115:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6114:15:62"
            },
            "scope": 28140,
            "src": "6040:145:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27995,
              "nodeType": "Block",
              "src": "6677:652:62",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 27957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 27954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 27952,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27946,
                        "src": "6687:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 27953,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27942,
                        "src": "6693:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6687:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 27955,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27940,
                        "src": "6699:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 27956,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27625,
                      "src": "6699:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6687:24:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27969,
                  "nodeType": "IfStatement",
                  "src": "6683:73:62",
                  "trueBody": {
                    "id": 27968,
                    "nodeType": "Block",
                    "src": "6713:43:62",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 27959,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27940,
                              "src": "6728:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 27965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 27962,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 27960,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27946,
                                      "src": "6734:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 27961,
                                      "name": "off",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27942,
                                      "src": "6740:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "6734:9:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 27963,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6733:11:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 27964,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6747:1:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "6733:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 27958,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27717,
                            "src": "6721:6:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 27966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6721:28:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27967,
                        "nodeType": "ExpressionStatement",
                        "src": "6721:28:62"
                      }
                    ]
                  }
                },
                {
                  "id": 27992,
                  "nodeType": "UncheckedBlock",
                  "src": "6762:547:62",
                  "statements": [
                    {
                      "assignments": [
                        27971
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 27971,
                          "mutability": "mutable",
                          "name": "mask",
                          "nameLocation": "6788:4:62",
                          "nodeType": "VariableDeclaration",
                          "scope": 27992,
                          "src": "6780:12:62",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 27970,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "6780:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 27978,
                      "initialValue": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 27977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 27974,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "323536",
                                "id": 27972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6796:3:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                },
                                "value": "256"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "**",
                              "rightExpression": {
                                "id": 27973,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27946,
                                "src": "6801:3:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6796:8:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 27975,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6795:10:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 27976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6808:1:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "6795:14:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "6780:29:62"
                    },
                    {
                      "expression": {
                        "id": 27989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 27979,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27944,
                          "src": "6843:4:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 27988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 27980,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27944,
                            "src": "6850:4:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">>",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 27986,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "38",
                                  "id": 27981,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6859:1:62",
                                  "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": 27984,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3332",
                                        "id": 27982,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6864:2:62",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "id": 27983,
                                        "name": "len",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 27946,
                                        "src": "6869:3:62",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6864:8:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 27985,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "6863:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6859:14:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 27987,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "6858:16:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6850:24:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "6843:31:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 27990,
                      "nodeType": "ExpressionStatement",
                      "src": "6843:31:62"
                    },
                    {
                      "AST": {
                        "nodeType": "YulBlock",
                        "src": "6891:412:62",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "6946:24:62",
                            "value": {
                              "arguments": [
                                {
                                  "name": "buf",
                                  "nodeType": "YulIdentifier",
                                  "src": "6966:3:62"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "6960:5:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6960:10:62"
                            },
                            "variables": [
                              {
                                "name": "bufptr",
                                "nodeType": "YulTypedName",
                                "src": "6950:6:62",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "7051:38:62",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "bufptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "7071:6:62"
                                    },
                                    {
                                      "name": "off",
                                      "nodeType": "YulIdentifier",
                                      "src": "7079:3:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "7067:3:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7067:16:62"
                                },
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "7085:3:62"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "7063:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7063:26:62"
                            },
                            "variables": [
                              {
                                "name": "dest",
                                "nodeType": "YulTypedName",
                                "src": "7055:4:62",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "dest",
                                  "nodeType": "YulIdentifier",
                                  "src": "7105:4:62"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dest",
                                              "nodeType": "YulIdentifier",
                                              "src": "7124:4:62"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "7118:5:62"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7118:11:62"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "mask",
                                              "nodeType": "YulIdentifier",
                                              "src": "7135:4:62"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "not",
                                            "nodeType": "YulIdentifier",
                                            "src": "7131:3:62"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7131:9:62"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "7114:3:62"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7114:27:62"
                                    },
                                    {
                                      "name": "data",
                                      "nodeType": "YulIdentifier",
                                      "src": "7143:4:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "or",
                                    "nodeType": "YulIdentifier",
                                    "src": "7111:2:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7111:37:62"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "7098:6:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7098:51:62"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "7098:51:62"
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "7244:51:62",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "bufptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "7263:6:62"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "off",
                                            "nodeType": "YulIdentifier",
                                            "src": "7275:3:62"
                                          },
                                          {
                                            "name": "len",
                                            "nodeType": "YulIdentifier",
                                            "src": "7280:3:62"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "7271:3:62"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7271:13:62"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "7256:6:62"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7256:29:62"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "7256:29:62"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "off",
                                      "nodeType": "YulIdentifier",
                                      "src": "7218:3:62"
                                    },
                                    {
                                      "name": "len",
                                      "nodeType": "YulIdentifier",
                                      "src": "7223:3:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "7214:3:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7214:13:62"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "bufptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "7235:6:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "7229:5:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7229:13:62"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "7211:2:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7211:32:62"
                            },
                            "nodeType": "YulIf",
                            "src": "7208:2:62"
                          }
                        ]
                      },
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 27940,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "6966:3:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27944,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7143:4:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27946,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7085:3:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27946,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7223:3:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27946,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7280:3:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27971,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7135:4:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27942,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7079:3:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27942,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7218:3:62",
                          "valueSize": 1
                        },
                        {
                          "declaration": 27942,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7275:3:62",
                          "valueSize": 1
                        }
                      ],
                      "id": 27991,
                      "nodeType": "InlineAssembly",
                      "src": "6882:421:62"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 27993,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 27940,
                    "src": "7321:3:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 27951,
                  "id": 27994,
                  "nodeType": "Return",
                  "src": "7314:10:62"
                }
              ]
            },
            "documentation": {
              "id": 27937,
              "nodeType": "StructuredDocumentation",
              "src": "6189:354:62",
              "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": 27996,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "write",
            "nameLocation": "6555:5:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27947,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27940,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "6580:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27996,
                  "src": "6566:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27939,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27938,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "6566:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "6566:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27942,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "6597:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27996,
                  "src": "6589:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27941,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6589:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27944,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6614:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27996,
                  "src": "6606:12:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27943,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6606:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27946,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "6632:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 27996,
                  "src": "6624:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27945,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6624:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6560:79:62"
            },
            "returnParameters": {
              "id": 27951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27950,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27996,
                  "src": "6662:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27949,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27948,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "6662:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "6662:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6661:15:62"
            },
            "scope": 28140,
            "src": "6546:783:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 28020,
              "nodeType": "Block",
              "src": "7746:52:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28011,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28000,
                        "src": "7765:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "id": 28012,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28002,
                        "src": "7770:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 28015,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28004,
                            "src": "7783:4:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          ],
                          "id": 28014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7775:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 28013,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7775:7:62",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 28016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7775:13:62",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "3230",
                        "id": 28017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7790:2:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_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": 28010,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        27836,
                        27996
                      ],
                      "referencedDeclaration": 27996,
                      "src": "7759:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes32,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 28018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7759:34:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 28009,
                  "id": 28019,
                  "nodeType": "Return",
                  "src": "7752:41:62"
                }
              ]
            },
            "documentation": {
              "id": 27997,
              "nodeType": "StructuredDocumentation",
              "src": "7333:288:62",
              "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": 28021,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "writeBytes20",
            "nameLocation": "7633:12:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28000,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "7665:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28021,
                  "src": "7651:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 27999,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27998,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "7651:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "7651:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28002,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "7682:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28021,
                  "src": "7674:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28001,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7674:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28004,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "7699:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28021,
                  "src": "7691:12:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 28003,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "7691:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7645:62:62"
            },
            "returnParameters": {
              "id": 28009,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28008,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 28021,
                  "src": "7731:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28007,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28006,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "7731:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "7731:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7730:15:62"
            },
            "scope": 28140,
            "src": "7624:174:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28045,
              "nodeType": "Block",
              "src": "8149:63:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28034,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28025,
                        "src": "8168:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 28035,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28025,
                            "src": "8173:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 28036,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27623,
                          "src": "8173:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 28037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "8173:14:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 28040,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28027,
                            "src": "8197:4:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          ],
                          "id": 28039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8189:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 28038,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "8189:7:62",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 28041,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8189:13:62",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "3230",
                        "id": 28042,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8204:2:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_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": 28033,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        27836,
                        27996
                      ],
                      "referencedDeclaration": 27996,
                      "src": "8162:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes32,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 28043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8162:45:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 28032,
                  "id": 28044,
                  "nodeType": "Return",
                  "src": "8155:52:62"
                }
              ]
            },
            "documentation": {
              "id": 28022,
              "nodeType": "StructuredDocumentation",
              "src": "7802:250:62",
              "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": 28046,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendBytes20",
            "nameLocation": "8064:13:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28025,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "8092:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28046,
                  "src": "8078:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28024,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28023,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "8078:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "8078:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28027,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "8105:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28046,
                  "src": "8097:12:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 28026,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "8097:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8077:33:62"
            },
            "returnParameters": {
              "id": 28032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28031,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 28046,
                  "src": "8134:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28030,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28029,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "8134:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "8134:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8133:15:62"
            },
            "scope": 28140,
            "src": "8055:157:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28067,
              "nodeType": "Block",
              "src": "8562:54:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28059,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28050,
                        "src": "8581:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 28060,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28050,
                            "src": "8586:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 28061,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27623,
                          "src": "8586:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 28062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "8586:14:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28063,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28052,
                        "src": "8602:4:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "3332",
                        "id": 28064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8608:2:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_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": 28058,
                      "name": "write",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        27836,
                        27996
                      ],
                      "referencedDeclaration": 27996,
                      "src": "8575:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,bytes32,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 28065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8575:36:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 28057,
                  "id": 28066,
                  "nodeType": "Return",
                  "src": "8568:43:62"
                }
              ]
            },
            "documentation": {
              "id": 28047,
              "nodeType": "StructuredDocumentation",
              "src": "8216:249:62",
              "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": 28068,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendBytes32",
            "nameLocation": "8477:13:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28050,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "8505:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28068,
                  "src": "8491:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28049,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28048,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "8491:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "8491:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28052,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "8518:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28068,
                  "src": "8510:12:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28051,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8510:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8490:33:62"
            },
            "returnParameters": {
              "id": 28057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28056,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 28068,
                  "src": "8547:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28055,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28054,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "8547:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "8547:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8546:15:62"
            },
            "scope": 28140,
            "src": "8468:148:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28114,
              "nodeType": "Block",
              "src": "9108:541:62",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 28086,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 28084,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28078,
                        "src": "9118:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 28085,
                        "name": "off",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28074,
                        "src": "9124:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9118:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 28087,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28072,
                        "src": "9130:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      "id": 28088,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "capacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27625,
                      "src": "9130:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9118:24:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28101,
                  "nodeType": "IfStatement",
                  "src": "9114:73:62",
                  "trueBody": {
                    "id": 28100,
                    "nodeType": "Block",
                    "src": "9144:43:62",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 28091,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28072,
                              "src": "9159:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 28097,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 28094,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 28092,
                                      "name": "len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 28078,
                                      "src": "9165:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 28093,
                                      "name": "off",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 28074,
                                      "src": "9171:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9165:9:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 28095,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9164:11:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 28096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9178:1:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "9164:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                                "typeString": "struct BufferChainlink.buffer memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 28090,
                            "name": "resize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27717,
                            "src": "9152:6:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct BufferChainlink.buffer memory,uint256) pure"
                            }
                          },
                          "id": 28098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9152:28:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 28099,
                        "nodeType": "ExpressionStatement",
                        "src": "9152:28:62"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    28103
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28103,
                      "mutability": "mutable",
                      "name": "mask",
                      "nameLocation": "9201:4:62",
                      "nodeType": "VariableDeclaration",
                      "scope": 28114,
                      "src": "9193:12:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28102,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9193:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28110,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 28106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "323536",
                            "id": 28104,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9209:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_256_by_1",
                              "typeString": "int_const 256"
                            },
                            "value": "256"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "**",
                          "rightExpression": {
                            "id": 28105,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28078,
                            "src": "9214:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9209:8:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 28107,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9208:10:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 28108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9221:1:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "9208:14:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9193:29:62"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "9237:392:62",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "9288:24:62",
                        "value": {
                          "arguments": [
                            {
                              "name": "buf",
                              "nodeType": "YulIdentifier",
                              "src": "9308:3:62"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "9302:5:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9302:10:62"
                        },
                        "variables": [
                          {
                            "name": "bufptr",
                            "nodeType": "YulTypedName",
                            "src": "9292:6:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "9389:38:62",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "9409:6:62"
                                },
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "9417:3:62"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "9405:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9405:16:62"
                            },
                            {
                              "name": "len",
                              "nodeType": "YulIdentifier",
                              "src": "9423:3:62"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "9401:3:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9401:26:62"
                        },
                        "variables": [
                          {
                            "name": "dest",
                            "nodeType": "YulTypedName",
                            "src": "9393:4:62",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dest",
                              "nodeType": "YulIdentifier",
                              "src": "9441:4:62"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "dest",
                                          "nodeType": "YulIdentifier",
                                          "src": "9460:4:62"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "9454:5:62"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9454:11:62"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "9471:4:62"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "not",
                                        "nodeType": "YulIdentifier",
                                        "src": "9467:3:62"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9467:9:62"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "9450:3:62"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9450:27:62"
                                },
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "9479:4:62"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "9447:2:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9447:37:62"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9434:6:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9434:51:62"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9434:51:62"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9576:47:62",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "bufptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "9593:6:62"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "off",
                                        "nodeType": "YulIdentifier",
                                        "src": "9605:3:62"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "9610:3:62"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9601:3:62"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9601:13:62"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9586:6:62"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9586:29:62"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9586:29:62"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "off",
                                  "nodeType": "YulIdentifier",
                                  "src": "9550:3:62"
                                },
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "9555:3:62"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "9546:3:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9546:13:62"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "bufptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "9567:6:62"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "9561:5:62"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9561:13:62"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "9543:2:62"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9543:32:62"
                        },
                        "nodeType": "YulIf",
                        "src": "9540:2:62"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28072,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9308:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28076,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9479:4:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28078,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9423:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28078,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9555:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28078,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9610:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28103,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9471:4:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28074,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9417:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28074,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9550:3:62",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28074,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9605:3:62",
                      "valueSize": 1
                    }
                  ],
                  "id": 28111,
                  "nodeType": "InlineAssembly",
                  "src": "9228:401:62"
                },
                {
                  "expression": {
                    "id": 28112,
                    "name": "buf",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28072,
                    "src": "9641:3:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 28083,
                  "id": 28113,
                  "nodeType": "Return",
                  "src": "9634:10:62"
                }
              ]
            },
            "documentation": {
              "id": 28069,
              "nodeType": "StructuredDocumentation",
              "src": "8620:351:62",
              "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": 28115,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "writeInt",
            "nameLocation": "8983:8:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28072,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "9011:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28115,
                  "src": "8997:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28071,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28070,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "8997:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "8997:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28074,
                  "mutability": "mutable",
                  "name": "off",
                  "nameLocation": "9028:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28115,
                  "src": "9020:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9020:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28076,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "9045:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28115,
                  "src": "9037:12:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28075,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9037:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28078,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "9063:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28115,
                  "src": "9055:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28077,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9055:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8991:79:62"
            },
            "returnParameters": {
              "id": 28083,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28082,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 28115,
                  "src": "9093:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28081,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28080,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "9093:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "9093:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9092:15:62"
            },
            "scope": 28140,
            "src": "8974:675:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 28138,
              "nodeType": "Block",
              "src": "10013:58:62",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28130,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28119,
                        "src": "10035:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 28131,
                            "name": "buf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28119,
                            "src": "10040:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                              "typeString": "struct BufferChainlink.buffer memory"
                            }
                          },
                          "id": 28132,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "buf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27623,
                          "src": "10040:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 28133,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "10040:14:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28134,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28121,
                        "src": "10056:4:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28135,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28123,
                        "src": "10062:3:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                          "typeString": "struct BufferChainlink.buffer memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 28129,
                      "name": "writeInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28115,
                      "src": "10026:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$27626_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_struct$_buffer_$27626_memory_ptr_$",
                        "typeString": "function (struct BufferChainlink.buffer memory,uint256,uint256,uint256) pure returns (struct BufferChainlink.buffer memory)"
                      }
                    },
                    "id": 28136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10026:40:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                      "typeString": "struct BufferChainlink.buffer memory"
                    }
                  },
                  "functionReturnParameters": 28128,
                  "id": 28137,
                  "nodeType": "Return",
                  "src": "10019:47:62"
                }
              ]
            },
            "documentation": {
              "id": 28116,
              "nodeType": "StructuredDocumentation",
              "src": "9653:238:62",
              "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": 28139,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "appendInt",
            "nameLocation": "9903:9:62",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28119,
                  "mutability": "mutable",
                  "name": "buf",
                  "nameLocation": "9932:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28139,
                  "src": "9918:17:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28118,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28117,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "9918:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "9918:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28121,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "9949:4:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28139,
                  "src": "9941:12:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28120,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9941:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28123,
                  "mutability": "mutable",
                  "name": "len",
                  "nameLocation": "9967:3:62",
                  "nodeType": "VariableDeclaration",
                  "scope": 28139,
                  "src": "9959:11:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28122,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9959:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9912:62:62"
            },
            "returnParameters": {
              "id": 28128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28127,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 28139,
                  "src": "9998:13:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_buffer_$27626_memory_ptr",
                    "typeString": "struct BufferChainlink.buffer"
                  },
                  "typeName": {
                    "id": 28126,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28125,
                      "name": "buffer",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27626,
                      "src": "9998:6:62"
                    },
                    "referencedDeclaration": 27626,
                    "src": "9998:6:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$27626_storage_ptr",
                      "typeString": "struct BufferChainlink.buffer"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9997:15:62"
            },
            "scope": 28140,
            "src": "9894:177:62",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 28141,
        "src": "441:9632:62"
      }
    ],
    "src": "32:10042:62"
  },
  "bytecode": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220826fa48dcfb60128a05eabfcca3261a68f942b95466e9cf0e29a1865b07844db64736f6c63430008020033",
  "bytecodeSha1": "1ce946f6a4eaa185320328620ccf999b9e86db7c",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "BufferChainlink",
  "coverageMap": {
    "branches": {
      "62": {}
    },
    "statements": {
      "62": {}
    }
  },
  "dependencies": [],
  "deployedBytecode": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220826fa48dcfb60128a05eabfcca3261a68f942b95466e9cf0e29a1865b07844db64736f6c63430008020033",
  "deployedSourceMap": "441:9632:62:-: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": [
    441,
    10073
  ],
  "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 PUSH16 0xA48DCFB60128A05EABFCCA3261A68F94 0x2B SWAP6 CHAINID PUSH15 0x9CF0E29A1865B07844DB64736F6C63 NUMBER STOP ADDMOD MUL STOP CALLER ",
  "pcMap": {
    "0": {
      "offset": [
        441,
        10073
      ],
      "op": "PUSH20",
      "path": "62",
      "value": "0x0"
    },
    "21": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "ADDRESS",
      "path": "62"
    },
    "22": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "EQ",
      "path": "62"
    },
    "23": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "PUSH1",
      "path": "62",
      "value": "0x80"
    },
    "25": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "PUSH1",
      "path": "62",
      "value": "0x40"
    },
    "27": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "MSTORE",
      "path": "62"
    },
    "28": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "PUSH1",
      "path": "62",
      "value": "0x0"
    },
    "30": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "DUP1",
      "path": "62"
    },
    "31": {
      "fn": null,
      "offset": [
        441,
        10073
      ],
      "op": "REVERT",
      "path": "62"
    }
  },
  "sha1": "0baf7de9daa3c13a5b4d758de54440741e9ab8e5",
  "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    uint256 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(buffer memory buf, uint256 capacity) internal pure returns (buffer memory) {\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(bytes memory b) internal pure returns (buffer memory) {\n    buffer memory buf;\n    buf.buf = b;\n    buf.capacity = b.length;\n    return buf;\n  }\n\n  function resize(buffer memory buf, uint256 capacity) private pure {\n    bytes memory oldbuf = buf.buf;\n    init(buf, capacity);\n    append(buf, oldbuf);\n  }\n\n  function max(uint256 a, uint256 b) private pure returns (uint256) {\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(buffer memory buf) internal pure returns (buffer memory) {\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    uint256 off,\n    bytes memory data,\n    uint256 len\n  ) internal pure returns (buffer memory) {\n    require(len <= data.length);\n\n    if (off + len > buf.capacity) {\n      resize(buf, max(buf.capacity, len + off) * 2);\n    }\n\n    uint256 dest;\n    uint256 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      uint256 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    uint256 len\n  ) internal pure returns (buffer memory) {\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(buffer memory buf, bytes memory data) internal pure returns (buffer memory) {\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    uint256 off,\n    uint8 data\n  ) internal pure returns (buffer memory) {\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(buffer memory buf, uint8 data) internal pure returns (buffer memory) {\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    uint256 off,\n    bytes32 data,\n    uint256 len\n  ) private pure returns (buffer memory) {\n    if (len + off > buf.capacity) {\n      resize(buf, (len + off) * 2);\n    }\n\n    unchecked {\n      uint256 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    uint256 off,\n    bytes20 data\n  ) internal pure returns (buffer memory) {\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(buffer memory buf, bytes20 data) internal pure returns (buffer memory) {\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(buffer memory buf, bytes32 data) internal pure returns (buffer memory) {\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    uint256 off,\n    uint256 data,\n    uint256 len\n  ) private pure returns (buffer memory) {\n    if (len + off > buf.capacity) {\n      resize(buf, (len + off) * 2);\n    }\n\n    uint256 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    uint256 data,\n    uint256 len\n  ) internal pure returns (buffer memory) {\n    return writeInt(buf, buf.buf.length, data, len);\n  }\n}\n",
  "sourceMap": "441:9632:62:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;441:9632:62;;;;;;;;;;;;;;;;;",
  "sourcePath": "/home/vscode/.brownie/packages/smartcontractkit/chainlink@1.6.0/contracts/src/v0.8/vendor/BufferChainlink.sol",
  "type": "library"
}