{
  "abi": [
    {
      "inputs": [],
      "name": "NULL",
      "outputs": [
        {
          "internalType": "bytes29",
          "name": "",
          "type": "bytes29"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a4610025600b82828239805160001a60731461001857fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063f26be3fc146038575b600080fd5b603e6073565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092168252519081900360200190f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008156fea164736f6c6343000706000a",
    "sourceMap": "122:31415:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063f26be3fc146038575b600080fd5b603e6073565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092168252519081900360200190f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008156fea164736f6c6343000706000a",
    "sourceMap": "122:31415:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;2669:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "NULL()": "f26be3fc"
  },
  "ast": {
    "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
    "id": 29603,
    "exportedSymbols": {
      "SafeMath": [
        28151
      ],
      "TypedMemView": [
        29602
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:31492:32",
    "nodes": [
      {
        "id": 28153,
        "nodeType": "PragmaDirective",
        "src": "46:32:32",
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.8",
          ".0"
        ]
      },
      {
        "id": 28155,
        "nodeType": "ImportDirective",
        "src": "80:40:32",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/SafeMath.sol",
        "file": "./SafeMath.sol",
        "scope": 29603,
        "sourceUnit": 28152,
        "symbolAliases": [
          {
            "foreign": {
              "id": 28154,
              "name": "SafeMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "88:8:32",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 29602,
        "nodeType": "ContractDefinition",
        "src": "122:31415:32",
        "nodes": [
          {
            "id": 28158,
            "nodeType": "UsingForDirective",
            "src": "149:27:32",
            "libraryName": {
              "id": 28156,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28151,
              "src": "155:8:32",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$28151",
                "typeString": "library SafeMath"
              }
            },
            "typeName": {
              "id": 28157,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "168:7:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 28161,
            "nodeType": "VariableDeclaration",
            "src": "2669:94:32",
            "constant": true,
            "functionSelector": "f26be3fc",
            "mutability": "constant",
            "name": "NULL",
            "scope": 29602,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes29",
              "typeString": "bytes29"
            },
            "typeName": {
              "id": 28159,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "2669:7:32",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            },
            "value": {
              "hexValue": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
              "id": 28160,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "hexString",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2700:63:32",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7894ac7152936831bdd146bb58cc79cdde7fa746d05d79c2b1dea4074b875c40",
                "typeString": "literal_string hex\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\""
              }
            },
            "visibility": "public"
          },
          {
            "id": 28164,
            "nodeType": "VariableDeclaration",
            "src": "2769:57:32",
            "constant": true,
            "mutability": "constant",
            "name": "LOW_12_MASK",
            "scope": 29602,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 28162,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2769:7:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3078666666666666666666666666666666666666666666666666",
              "id": 28163,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2800:26:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_79228162514264337593543950335_by_1",
                "typeString": "int_const 79228162514264337593543950335"
              },
              "value": "0xffffffffffffffffffffffff"
            },
            "visibility": "internal"
          },
          {
            "id": 28167,
            "nodeType": "VariableDeclaration",
            "src": "2832:32:32",
            "constant": true,
            "mutability": "constant",
            "name": "TWELVE_BYTES",
            "scope": 29602,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 28165,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "2832:5:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "3936",
              "id": 28166,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2862:2:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_96_by_1",
                "typeString": "int_const 96"
              },
              "value": "96"
            },
            "visibility": "internal"
          },
          {
            "id": 28294,
            "nodeType": "FunctionDefinition",
            "src": "3073:1041:32",
            "body": {
              "id": 28293,
              "nodeType": "Block",
              "src": "3137:977:32",
              "statements": [
                {
                  "assignments": [
                    28176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28176,
                      "mutability": "mutable",
                      "name": "_nibble",
                      "nodeType": "VariableDeclaration",
                      "scope": 28293,
                      "src": "3270:13:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 28175,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "3270:5:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28180,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28177,
                      "name": "_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28170,
                      "src": "3286:2:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "hexValue": "30786630",
                      "id": 28178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3291:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_240_by_1",
                        "typeString": "int_const 240"
                      },
                      "value": "0xf0"
                    },
                    "src": "3286:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3270:25:32"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28181,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3337:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786630",
                      "id": 28182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3348:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_240_by_1",
                        "typeString": "int_const 240"
                      },
                      "value": "0xf0"
                    },
                    "src": "3337:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28187,
                  "nodeType": "IfStatement",
                  "src": "3333:35:32",
                  "trueBody": {
                    "id": 28186,
                    "nodeType": "Block",
                    "src": "3354:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783330",
                          "id": 28184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3362:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_48_by_1",
                            "typeString": "int_const 48"
                          },
                          "value": "0x30"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28185,
                        "nodeType": "Return",
                        "src": "3355:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28188,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3386:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786631",
                      "id": 28189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3397:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_241_by_1",
                        "typeString": "int_const 241"
                      },
                      "value": "0xf1"
                    },
                    "src": "3386:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28194,
                  "nodeType": "IfStatement",
                  "src": "3382:35:32",
                  "trueBody": {
                    "id": 28193,
                    "nodeType": "Block",
                    "src": "3403:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783331",
                          "id": 28191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3411:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_49_by_1",
                            "typeString": "int_const 49"
                          },
                          "value": "0x31"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28192,
                        "nodeType": "Return",
                        "src": "3404:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28195,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3435:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786632",
                      "id": 28196,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3446:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_242_by_1",
                        "typeString": "int_const 242"
                      },
                      "value": "0xf2"
                    },
                    "src": "3435:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28201,
                  "nodeType": "IfStatement",
                  "src": "3431:35:32",
                  "trueBody": {
                    "id": 28200,
                    "nodeType": "Block",
                    "src": "3452:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783332",
                          "id": 28198,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3460:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_50_by_1",
                            "typeString": "int_const 50"
                          },
                          "value": "0x32"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28199,
                        "nodeType": "Return",
                        "src": "3453:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28202,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3484:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786633",
                      "id": 28203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3495:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_243_by_1",
                        "typeString": "int_const 243"
                      },
                      "value": "0xf3"
                    },
                    "src": "3484:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28208,
                  "nodeType": "IfStatement",
                  "src": "3480:35:32",
                  "trueBody": {
                    "id": 28207,
                    "nodeType": "Block",
                    "src": "3501:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783333",
                          "id": 28205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3509:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_51_by_1",
                            "typeString": "int_const 51"
                          },
                          "value": "0x33"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28206,
                        "nodeType": "Return",
                        "src": "3502:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28209,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3533:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786634",
                      "id": 28210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3544:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_244_by_1",
                        "typeString": "int_const 244"
                      },
                      "value": "0xf4"
                    },
                    "src": "3533:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28215,
                  "nodeType": "IfStatement",
                  "src": "3529:35:32",
                  "trueBody": {
                    "id": 28214,
                    "nodeType": "Block",
                    "src": "3550:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783334",
                          "id": 28212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3558:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_52_by_1",
                            "typeString": "int_const 52"
                          },
                          "value": "0x34"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28213,
                        "nodeType": "Return",
                        "src": "3551:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28216,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3582:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786635",
                      "id": 28217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3593:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_245_by_1",
                        "typeString": "int_const 245"
                      },
                      "value": "0xf5"
                    },
                    "src": "3582:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28222,
                  "nodeType": "IfStatement",
                  "src": "3578:35:32",
                  "trueBody": {
                    "id": 28221,
                    "nodeType": "Block",
                    "src": "3599:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783335",
                          "id": 28219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3607:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_53_by_1",
                            "typeString": "int_const 53"
                          },
                          "value": "0x35"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28220,
                        "nodeType": "Return",
                        "src": "3600:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28223,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3631:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786636",
                      "id": 28224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3642:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_246_by_1",
                        "typeString": "int_const 246"
                      },
                      "value": "0xf6"
                    },
                    "src": "3631:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28229,
                  "nodeType": "IfStatement",
                  "src": "3627:35:32",
                  "trueBody": {
                    "id": 28228,
                    "nodeType": "Block",
                    "src": "3648:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783336",
                          "id": 28226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3656:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_54_by_1",
                            "typeString": "int_const 54"
                          },
                          "value": "0x36"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28227,
                        "nodeType": "Return",
                        "src": "3649:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28230,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3680:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786637",
                      "id": 28231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3691:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_247_by_1",
                        "typeString": "int_const 247"
                      },
                      "value": "0xf7"
                    },
                    "src": "3680:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28236,
                  "nodeType": "IfStatement",
                  "src": "3676:35:32",
                  "trueBody": {
                    "id": 28235,
                    "nodeType": "Block",
                    "src": "3697:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783337",
                          "id": 28233,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3705:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_55_by_1",
                            "typeString": "int_const 55"
                          },
                          "value": "0x37"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28234,
                        "nodeType": "Return",
                        "src": "3698:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28237,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3729:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786638",
                      "id": 28238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3740:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "0xf8"
                    },
                    "src": "3729:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28243,
                  "nodeType": "IfStatement",
                  "src": "3725:35:32",
                  "trueBody": {
                    "id": 28242,
                    "nodeType": "Block",
                    "src": "3746:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783338",
                          "id": 28240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3754:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_56_by_1",
                            "typeString": "int_const 56"
                          },
                          "value": "0x38"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28241,
                        "nodeType": "Return",
                        "src": "3747:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28244,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3778:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786639",
                      "id": 28245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3789:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_249_by_1",
                        "typeString": "int_const 249"
                      },
                      "value": "0xf9"
                    },
                    "src": "3778:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28250,
                  "nodeType": "IfStatement",
                  "src": "3774:35:32",
                  "trueBody": {
                    "id": 28249,
                    "nodeType": "Block",
                    "src": "3795:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783339",
                          "id": 28247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3803:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_57_by_1",
                            "typeString": "int_const 57"
                          },
                          "value": "0x39"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28248,
                        "nodeType": "Return",
                        "src": "3796:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28251,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3827:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786661",
                      "id": 28252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3838:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_250_by_1",
                        "typeString": "int_const 250"
                      },
                      "value": "0xfa"
                    },
                    "src": "3827:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28257,
                  "nodeType": "IfStatement",
                  "src": "3823:35:32",
                  "trueBody": {
                    "id": 28256,
                    "nodeType": "Block",
                    "src": "3844:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783631",
                          "id": 28254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3852:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_97_by_1",
                            "typeString": "int_const 97"
                          },
                          "value": "0x61"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28255,
                        "nodeType": "Return",
                        "src": "3845:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28258,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3876:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786662",
                      "id": 28259,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3887:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_251_by_1",
                        "typeString": "int_const 251"
                      },
                      "value": "0xfb"
                    },
                    "src": "3876:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28264,
                  "nodeType": "IfStatement",
                  "src": "3872:35:32",
                  "trueBody": {
                    "id": 28263,
                    "nodeType": "Block",
                    "src": "3893:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783632",
                          "id": 28261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3901:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_98_by_1",
                            "typeString": "int_const 98"
                          },
                          "value": "0x62"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28262,
                        "nodeType": "Return",
                        "src": "3894:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28265,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3925:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786663",
                      "id": 28266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3936:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_252_by_1",
                        "typeString": "int_const 252"
                      },
                      "value": "0xfc"
                    },
                    "src": "3925:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28271,
                  "nodeType": "IfStatement",
                  "src": "3921:35:32",
                  "trueBody": {
                    "id": 28270,
                    "nodeType": "Block",
                    "src": "3942:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783633",
                          "id": 28268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3950:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_99_by_1",
                            "typeString": "int_const 99"
                          },
                          "value": "0x63"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28269,
                        "nodeType": "Return",
                        "src": "3943:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28272,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "3974:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786664",
                      "id": 28273,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3985:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_253_by_1",
                        "typeString": "int_const 253"
                      },
                      "value": "0xfd"
                    },
                    "src": "3974:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28278,
                  "nodeType": "IfStatement",
                  "src": "3970:35:32",
                  "trueBody": {
                    "id": 28277,
                    "nodeType": "Block",
                    "src": "3991:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783634",
                          "id": 28275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3999:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_100_by_1",
                            "typeString": "int_const 100"
                          },
                          "value": "0x64"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28276,
                        "nodeType": "Return",
                        "src": "3992:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28279,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "4023:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786665",
                      "id": 28280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4034:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_254_by_1",
                        "typeString": "int_const 254"
                      },
                      "value": "0xfe"
                    },
                    "src": "4023:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28285,
                  "nodeType": "IfStatement",
                  "src": "4019:35:32",
                  "trueBody": {
                    "id": 28284,
                    "nodeType": "Block",
                    "src": "4040:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783635",
                          "id": 28282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4048:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_101_by_1",
                            "typeString": "int_const 101"
                          },
                          "value": "0x65"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28283,
                        "nodeType": "Return",
                        "src": "4041:11:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28286,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28176,
                      "src": "4072:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786666",
                      "id": 28287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4083:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "0xff"
                    },
                    "src": "4072:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28292,
                  "nodeType": "IfStatement",
                  "src": "4068:35:32",
                  "trueBody": {
                    "id": 28291,
                    "nodeType": "Block",
                    "src": "4089:14:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783636",
                          "id": 28289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4097:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_102_by_1",
                            "typeString": "int_const 102"
                          },
                          "value": "0x66"
                        },
                        "functionReturnParameters": 28174,
                        "id": 28290,
                        "nodeType": "Return",
                        "src": "4090:11:32"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 28168,
              "nodeType": "StructuredDocumentation",
              "src": "2871:197:32",
              "text": " @notice      Returns the encoded hex character that represents the lower 4 bits of the argument.\n @param _b    The byte\n @return      char - The encoded hex character"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nibbleHex",
            "parameters": {
              "id": 28171,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28170,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 28294,
                  "src": "3092:8:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 28169,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3092:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3091:10:32"
            },
            "returnParameters": {
              "id": 28174,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28173,
                  "mutability": "mutable",
                  "name": "char",
                  "nodeType": "VariableDeclaration",
                  "scope": 28294,
                  "src": "3125:10:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 28172,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3125:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3124:12:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28321,
            "nodeType": "FunctionDefinition",
            "src": "4286:199:32",
            "body": {
              "id": 28320,
              "nodeType": "Block",
              "src": "4352:133:32",
              "statements": [
                {
                  "expression": {
                    "id": 28308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28302,
                      "name": "encoded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28300,
                      "src": "4362:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "|=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 28306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 28304,
                            "name": "_b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28297,
                            "src": "4383:2:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">>",
                          "rightExpression": {
                            "hexValue": "34",
                            "id": 28305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4389:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "4383:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 28303,
                        "name": "nibbleHex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28294,
                        "src": "4373:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8) pure returns (uint8)"
                        }
                      },
                      "id": 28307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4373:18:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "4362:29:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 28309,
                  "nodeType": "ExpressionStatement",
                  "src": "4362:29:32"
                },
                {
                  "expression": {
                    "id": 28312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28310,
                      "name": "encoded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28300,
                      "src": "4415:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "<<=",
                    "rightHandSide": {
                      "hexValue": "38",
                      "id": 28311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4427:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_8_by_1",
                        "typeString": "int_const 8"
                      },
                      "value": "8"
                    },
                    "src": "4415:13:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 28313,
                  "nodeType": "ExpressionStatement",
                  "src": "4415:13:32"
                },
                {
                  "expression": {
                    "id": 28318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28314,
                      "name": "encoded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28300,
                      "src": "4438:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "|=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 28316,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28297,
                          "src": "4459:2:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 28315,
                        "name": "nibbleHex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28294,
                        "src": "4449:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8) pure returns (uint8)"
                        }
                      },
                      "id": 28317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4449:13:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "4438:24:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 28319,
                  "nodeType": "ExpressionStatement",
                  "src": "4438:24:32"
                }
              ]
            },
            "documentation": {
              "id": 28295,
              "nodeType": "StructuredDocumentation",
              "src": "4120:161:32",
              "text": " @notice      Returns a uint16 containing the hex-encoded byte.\n @param _b    The byte\n @return      encoded - The hex-encoded byte"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "byteHex",
            "parameters": {
              "id": 28298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28297,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 28321,
                  "src": "4303:8:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 28296,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4303:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4302:10:32"
            },
            "returnParameters": {
              "id": 28301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28300,
                  "mutability": "mutable",
                  "name": "encoded",
                  "nodeType": "VariableDeclaration",
                  "scope": 28321,
                  "src": "4336:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 28299,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4336:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4335:16:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28412,
            "nodeType": "FunctionDefinition",
            "src": "4809:556:32",
            "body": {
              "id": 28411,
              "nodeType": "Block",
              "src": "4894:471:32",
              "statements": [
                {
                  "body": {
                    "id": 28369,
                    "nodeType": "Block",
                    "src": "4939:167:32",
                    "statements": [
                      {
                        "assignments": [
                          28343
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 28343,
                            "mutability": "mutable",
                            "name": "_byte",
                            "nodeType": "VariableDeclaration",
                            "scope": 28369,
                            "src": "4953:11:32",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 28342,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "4953:5:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 28353,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 28351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 28346,
                                "name": "_b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28324,
                                "src": "4973:2:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 28349,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 28347,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 28332,
                                      "src": "4980:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "38",
                                      "id": 28348,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4984:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "4980:5:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 28350,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4979:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "4973:13:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 28345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4967:5:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 28344,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "4967:5:32",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 28352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4967:20:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4953:34:32"
                      },
                      {
                        "expression": {
                          "id": 28358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 28354,
                            "name": "first",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28327,
                            "src": "5001:5:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 28356,
                                "name": "_byte",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28343,
                                "src": "5018:5:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 28355,
                              "name": "byteHex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28321,
                              "src": "5010:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint16_$",
                                "typeString": "function (uint8) pure returns (uint16)"
                              }
                            },
                            "id": 28357,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5010:14:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "5001:23:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 28359,
                        "nodeType": "ExpressionStatement",
                        "src": "5001:23:32"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 28362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 28360,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28332,
                            "src": "5042:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "3136",
                            "id": 28361,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5047:2:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "5042:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 28368,
                        "nodeType": "IfStatement",
                        "src": "5038:58:32",
                        "trueBody": {
                          "id": 28367,
                          "nodeType": "Block",
                          "src": "5051:45:32",
                          "statements": [
                            {
                              "expression": {
                                "id": 28365,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 28363,
                                  "name": "first",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28327,
                                  "src": "5069:5:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "<<=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 28364,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5079:2:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "5069:12:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 28366,
                              "nodeType": "ExpressionStatement",
                              "src": "5069:12:32"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28335,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28332,
                      "src": "4923:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "3135",
                      "id": 28336,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4927:2:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_15_by_1",
                        "typeString": "int_const 15"
                      },
                      "value": "15"
                    },
                    "src": "4923:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28370,
                  "initializationExpression": {
                    "assignments": [
                      28332
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 28332,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 28370,
                        "src": "4909:7:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 28331,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "4909:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 28334,
                    "initialValue": {
                      "hexValue": "3331",
                      "id": 28333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4919:2:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4909:12:32"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 28340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 28338,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28332,
                        "src": "4931:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "31",
                        "id": 28339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4936:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "4931:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 28341,
                    "nodeType": "ExpressionStatement",
                    "src": "4931:6:32"
                  },
                  "nodeType": "ForStatement",
                  "src": "4904:202:32"
                },
                {
                  "body": {
                    "id": 28409,
                    "nodeType": "Block",
                    "src": "5191:168:32",
                    "statements": [
                      {
                        "assignments": [
                          28383
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 28383,
                            "mutability": "mutable",
                            "name": "_byte",
                            "nodeType": "VariableDeclaration",
                            "scope": 28409,
                            "src": "5205:11:32",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 28382,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "5205:5:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 28393,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 28391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 28386,
                                "name": "_b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28324,
                                "src": "5225:2:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 28389,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 28387,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 28372,
                                      "src": "5232:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "38",
                                      "id": 28388,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5236:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "5232:5:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 28390,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5231:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "5225:13:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 28385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5219:5:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 28384,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "5219:5:32",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 28392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5219:20:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5205:34:32"
                      },
                      {
                        "expression": {
                          "id": 28398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 28394,
                            "name": "second",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28329,
                            "src": "5253:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 28396,
                                "name": "_byte",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28383,
                                "src": "5271:5:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 28395,
                              "name": "byteHex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28321,
                              "src": "5263:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint16_$",
                                "typeString": "function (uint8) pure returns (uint16)"
                              }
                            },
                            "id": 28397,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5263:14:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "5253:24:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 28399,
                        "nodeType": "ExpressionStatement",
                        "src": "5253:24:32"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 28402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 28400,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28372,
                            "src": "5295:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 28401,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5300:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5295:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 28408,
                        "nodeType": "IfStatement",
                        "src": "5291:58:32",
                        "trueBody": {
                          "id": 28407,
                          "nodeType": "Block",
                          "src": "5303:46:32",
                          "statements": [
                            {
                              "expression": {
                                "id": 28405,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 28403,
                                  "name": "second",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28329,
                                  "src": "5321:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "<<=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 28404,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5332:2:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "5321:13:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 28406,
                              "nodeType": "ExpressionStatement",
                              "src": "5321:13:32"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 28377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28375,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28372,
                      "src": "5173:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "323535",
                      "id": 28376,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5177:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "5173:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28410,
                  "initializationExpression": {
                    "assignments": [
                      28372
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 28372,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 28410,
                        "src": "5159:7:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 28371,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5159:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 28374,
                    "initialValue": {
                      "hexValue": "3135",
                      "id": 28373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5169:2:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_15_by_1",
                        "typeString": "int_const 15"
                      },
                      "value": "15"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5159:12:32"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 28380,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 28378,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28372,
                        "src": "5183:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "31",
                        "id": 28379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5188:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "5183:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 28381,
                    "nodeType": "ExpressionStatement",
                    "src": "5183:6:32"
                  },
                  "nodeType": "ForStatement",
                  "src": "5154:205:32"
                }
              ]
            },
            "documentation": {
              "id": 28322,
              "nodeType": "StructuredDocumentation",
              "src": "4491:313:32",
              "text": " @notice      Encodes the uint256 to hex. `first` contains the encoded top 16 bytes.\n              `second` contains the encoded lower 16 bytes.\n @param _b    The 32 bytes as uint256\n @return      first - The top 16 bytes\n @return      second - The bottom 16 bytes"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encodeHex",
            "parameters": {
              "id": 28325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28324,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 28412,
                  "src": "4828:10:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28323,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4828:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4827:12:32"
            },
            "returnParameters": {
              "id": 28330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28327,
                  "mutability": "mutable",
                  "name": "first",
                  "nodeType": "VariableDeclaration",
                  "scope": 28412,
                  "src": "4863:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4863:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28329,
                  "mutability": "mutable",
                  "name": "second",
                  "nodeType": "VariableDeclaration",
                  "scope": 28412,
                  "src": "4878:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4878:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4862:31:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28509,
            "nodeType": "FunctionDefinition",
            "src": "5644:1044:32",
            "body": {
              "id": 28508,
              "nodeType": "Block",
              "src": "5714:974:32",
              "statements": [
                {
                  "expression": {
                    "id": 28422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28420,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28418,
                      "src": "5724:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 28421,
                      "name": "_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28415,
                      "src": "5728:2:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5724:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28423,
                  "nodeType": "ExpressionStatement",
                  "src": "5724:6:32"
                },
                {
                  "expression": {
                    "id": 28440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28424,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28418,
                      "src": "5763:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 28439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28427,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28425,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "5769:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "38",
                                    "id": 28426,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5774:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  "src": "5769:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28428,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5768:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646",
                              "id": 28429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5779:66:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1",
                                "typeString": "int_const 4505...(67 digits omitted)...9455"
                              },
                              "value": "0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"
                            },
                            "src": "5768:77:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28431,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5767:79:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28434,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28432,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "5863:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646",
                                    "id": 28433,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5867:66:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1",
                                      "typeString": "int_const 4505...(67 digits omitted)...9455"
                                    },
                                    "value": "0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"
                                  },
                                  "src": "5863:70:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28435,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5862:72:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "38",
                              "id": 28436,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5938:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "8"
                            },
                            "src": "5862:77:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28438,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5861:79:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5767:173:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5763:177:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28441,
                  "nodeType": "ExpressionStatement",
                  "src": "5763:177:32"
                },
                {
                  "expression": {
                    "id": 28458,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28442,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28418,
                      "src": "5984:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 28457,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28448,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28445,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28443,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "5990:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "3136",
                                    "id": 28444,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5995:2:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "value": "16"
                                  },
                                  "src": "5990:7:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28446,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5989:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646",
                              "id": 28447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6001:66:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1",
                                "typeString": "int_const 1766...(65 digits omitted)...4255"
                              },
                              "value": "0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"
                            },
                            "src": "5989:78:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28449,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5988:80:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28455,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28452,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28450,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "6085:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646",
                                    "id": 28451,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6089:66:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1",
                                      "typeString": "int_const 1766...(65 digits omitted)...4255"
                                    },
                                    "value": "0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"
                                  },
                                  "src": "6085:70:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28453,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6084:72:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "3136",
                              "id": 28454,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6160:2:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "16"
                            },
                            "src": "6084:78:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28456,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6083:80:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5988:175:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5984:179:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28459,
                  "nodeType": "ExpressionStatement",
                  "src": "5984:179:32"
                },
                {
                  "expression": {
                    "id": 28476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28460,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28418,
                      "src": "6207:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 28475,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28466,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28463,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28461,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "6213:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "3332",
                                    "id": 28462,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6218:2:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  "src": "6213:7:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28464,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6212:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646",
                              "id": 28465,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6224:66:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1",
                                "typeString": "int_const 2695...(60 digits omitted)...3855"
                              },
                              "value": "0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"
                            },
                            "src": "6212:78:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28467,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6211:80:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28470,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28468,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "6308:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646",
                                    "id": 28469,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6312:66:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1",
                                      "typeString": "int_const 2695...(60 digits omitted)...3855"
                                    },
                                    "value": "0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"
                                  },
                                  "src": "6308:70:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28471,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6307:72:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "3332",
                              "id": 28472,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6383:2:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "src": "6307:78:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28474,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6306:80:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6211:175:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6207:179:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28477,
                  "nodeType": "ExpressionStatement",
                  "src": "6207:179:32"
                },
                {
                  "expression": {
                    "id": 28494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28478,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28418,
                      "src": "6430:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 28493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28484,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28481,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28479,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "6436:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "3634",
                                    "id": 28480,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6441:2:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "6436:7:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28482,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6435:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646",
                              "id": 28483,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6447:66:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6277101735386680763495507056286727952657427581105975853055_by_1",
                                "typeString": "int_const 6277...(50 digits omitted)...3055"
                              },
                              "value": "0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"
                            },
                            "src": "6435:78:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28485,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6434:80:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 28488,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 28486,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28418,
                                    "src": "6531:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646",
                                    "id": 28487,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6535:66:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_6277101735386680763495507056286727952657427581105975853055_by_1",
                                      "typeString": "int_const 6277...(50 digits omitted)...3055"
                                    },
                                    "value": "0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"
                                  },
                                  "src": "6531:70:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 28489,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6530:72:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "3634",
                              "id": 28490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6606:2:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_64_by_1",
                                "typeString": "int_const 64"
                              },
                              "value": "64"
                            },
                            "src": "6530:78:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28492,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6529:80:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6434:175:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6430:179:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28495,
                  "nodeType": "ExpressionStatement",
                  "src": "6430:179:32"
                },
                {
                  "expression": {
                    "id": 28506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28496,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28418,
                      "src": "6654:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 28505,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28499,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 28497,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28418,
                              "src": "6659:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">>",
                            "rightExpression": {
                              "hexValue": "313238",
                              "id": 28498,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6664:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "128"
                            },
                            "src": "6659:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28500,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6658:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 28503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 28501,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28418,
                              "src": "6672:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "313238",
                              "id": 28502,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6677:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "128"
                            },
                            "src": "6672:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 28504,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6671:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6658:23:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6654:27:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28507,
                  "nodeType": "ExpressionStatement",
                  "src": "6654:27:32"
                }
              ]
            },
            "documentation": {
              "id": 28413,
              "nodeType": "StructuredDocumentation",
              "src": "5371:268:32",
              "text": " @notice          Changes the endianness of a uint256.\n @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\n @param _b        The unsigned integer to reverse\n @return          v - The reversed value"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reverseUint256",
            "parameters": {
              "id": 28416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28415,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 28509,
                  "src": "5668:10:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5668:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5667:12:32"
            },
            "returnParameters": {
              "id": 28419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28418,
                  "mutability": "mutable",
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "scope": 28509,
                  "src": "5703:9:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28417,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5703:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5702:11:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28519,
            "nodeType": "FunctionDefinition",
            "src": "6845:366:32",
            "body": {
              "id": 28518,
              "nodeType": "Block",
              "src": "6911:300:32",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "6970:235:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "7056:139:32",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "7089:4:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7095:1:32",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "sub",
                                "nodeType": "YulIdentifier",
                                "src": "7085:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7085:12:32"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7115:66:32",
                              "type": "",
                              "value": "0x8000000000000000000000000000000000000000000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "sar",
                            "nodeType": "YulIdentifier",
                            "src": "7064:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7064:131:32"
                        },
                        "variableNames": [
                          {
                            "name": "mask",
                            "nodeType": "YulIdentifier",
                            "src": "7056:4:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28512,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7089:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28515,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7056:4:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28517,
                  "nodeType": "InlineAssembly",
                  "src": "6961:244:32"
                }
              ]
            },
            "documentation": {
              "id": 28510,
              "nodeType": "StructuredDocumentation",
              "src": "6694:146:32",
              "text": " @notice      Create a mask with the highest `_len` bits set.\n @param _len  The length\n @return      mask - The mask"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "leftMask",
            "parameters": {
              "id": 28513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28512,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 28519,
                  "src": "6863:10:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 28511,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6863:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6862:12:32"
            },
            "returnParameters": {
              "id": 28516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28515,
                  "mutability": "mutable",
                  "name": "mask",
                  "nodeType": "VariableDeclaration",
                  "scope": 28519,
                  "src": "6897:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6897:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6896:14:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 28528,
            "nodeType": "FunctionDefinition",
            "src": "7319:80:32",
            "body": {
              "id": 28527,
              "nodeType": "Block",
              "src": "7371:28:32",
              "statements": [
                {
                  "expression": {
                    "id": 28525,
                    "name": "NULL",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28161,
                    "src": "7388:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 28524,
                  "id": 28526,
                  "nodeType": "Return",
                  "src": "7381:11:32"
                }
              ]
            },
            "documentation": {
              "id": 28520,
              "nodeType": "StructuredDocumentation",
              "src": "7217:97:32",
              "text": " @notice      Return the null view.\n @return      bytes29 - The null view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nullView",
            "parameters": {
              "id": 28521,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7336:2:32"
            },
            "returnParameters": {
              "id": 28524,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28523,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28528,
                  "src": "7362:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28522,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "7362:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7361:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28541,
            "nodeType": "FunctionDefinition",
            "src": "7520:101:32",
            "body": {
              "id": 28540,
              "nodeType": "Block",
              "src": "7582:39:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    },
                    "id": 28538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28536,
                      "name": "memView",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28531,
                      "src": "7599:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 28537,
                      "name": "NULL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28161,
                      "src": "7610:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "7599:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 28535,
                  "id": 28539,
                  "nodeType": "Return",
                  "src": "7592:22:32"
                }
              ]
            },
            "documentation": {
              "id": 28529,
              "nodeType": "StructuredDocumentation",
              "src": "7405:110:32",
              "text": " @notice      Check if the view is null.\n @return      bool - True if the view is null"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isNull",
            "parameters": {
              "id": 28532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28531,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28541,
                  "src": "7536:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28530,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "7536:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7535:17:32"
            },
            "returnParameters": {
              "id": 28535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28534,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28541,
                  "src": "7576:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28533,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7576:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7575:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28555,
            "nodeType": "FunctionDefinition",
            "src": "7750:103:32",
            "body": {
              "id": 28554,
              "nodeType": "Block",
              "src": "7813:40:32",
              "statements": [
                {
                  "expression": {
                    "id": 28552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7830:16:32",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 28550,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7838:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 28549,
                        "name": "isNull",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28541,
                        "src": "7831:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29) pure returns (bool)"
                        }
                      },
                      "id": 28551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7831:15:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 28548,
                  "id": 28553,
                  "nodeType": "Return",
                  "src": "7823:23:32"
                }
              ]
            },
            "documentation": {
              "id": 28542,
              "nodeType": "StructuredDocumentation",
              "src": "7627:118:32",
              "text": " @notice      Check if the view is not null.\n @return      bool - True if the view is not null"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notNull",
            "parameters": {
              "id": 28545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28544,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28555,
                  "src": "7767:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28543,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "7767:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7766:17:32"
            },
            "returnParameters": {
              "id": 28548,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28547,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28555,
                  "src": "7807:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28546,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7807:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7806:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28580,
            "nodeType": "FunctionDefinition",
            "src": "8272:319:32",
            "body": {
              "id": 28579,
              "nodeType": "Block",
              "src": "8339:252:32",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 28567,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 28564,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28558,
                          "src": "8360:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 28563,
                        "name": "typeOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28776,
                        "src": "8353:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                          "typeString": "function (bytes29) pure returns (uint40)"
                        }
                      },
                      "id": 28565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8353:15:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "307866666666666666666666",
                      "id": 28566,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8372:12:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1099511627775_by_1",
                        "typeString": "int_const 1099511627775"
                      },
                      "value": "0xffffffffff"
                    },
                    "src": "8353:31:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28571,
                  "nodeType": "IfStatement",
                  "src": "8349:52:32",
                  "trueBody": {
                    "id": 28570,
                    "nodeType": "Block",
                    "src": "8386:15:32",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 28568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8394:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 28562,
                        "id": 28569,
                        "nodeType": "Return",
                        "src": "8387:12:32"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    28573
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28573,
                      "mutability": "mutable",
                      "name": "_end",
                      "nodeType": "VariableDeclaration",
                      "scope": 28579,
                      "src": "8410:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28572,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8410:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28577,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 28575,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28558,
                        "src": "8429:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 28574,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28880,
                      "src": "8425:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                        "typeString": "function (bytes29) pure returns (uint256)"
                      }
                    },
                    "id": 28576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8425:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8410:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "8456:129:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8542:33:32",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_end",
                                  "nodeType": "YulIdentifier",
                                  "src": "8556:4:32"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8568:4:32",
                                      "type": "",
                                      "value": "0x40"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "8562:5:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8562:11:32"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "8553:2:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8553:21:32"
                            }
                          ],
                          "functionName": {
                            "name": "not",
                            "nodeType": "YulIdentifier",
                            "src": "8549:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8549:26:32"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "8542:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28573,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8556:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28561,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8542:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28578,
                  "nodeType": "InlineAssembly",
                  "src": "8447:138:32"
                }
              ]
            },
            "documentation": {
              "id": 28556,
              "nodeType": "StructuredDocumentation",
              "src": "7859:408:32",
              "text": " @notice          Check if the view is of a valid type and points to a valid location\n                  in memory.\n @dev             We perform this check by examining solidity's unallocated memory\n                  pointer and ensuring that the view's upper bound is less than that.\n @param memView   The view\n @return          ret - True if the view is valid"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isValid",
            "parameters": {
              "id": 28559,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28558,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28580,
                  "src": "8289:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28557,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8289:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8288:17:32"
            },
            "returnParameters": {
              "id": 28562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28561,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 28580,
                  "src": "8329:8:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28560,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8329:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8328:10:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28598,
            "nodeType": "FunctionDefinition",
            "src": "8826:165:32",
            "body": {
              "id": 28597,
              "nodeType": "Block",
              "src": "8896:95:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 28590,
                            "name": "memView",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28583,
                            "src": "8922:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 28589,
                          "name": "isValid",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28580,
                          "src": "8914:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                            "typeString": "function (bytes29) pure returns (bool)"
                          }
                        },
                        "id": 28591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8914:16:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c696469747920617373657274696f6e206661696c6564",
                        "id": 28592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8932:27:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3b8ee0f3dda60458ebd28fab07294d43d44795f5dd2ba5ae15b160377e860128",
                          "typeString": "literal_string \"Validity assertion failed\""
                        },
                        "value": "Validity assertion failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3b8ee0f3dda60458ebd28fab07294d43d44795f5dd2ba5ae15b160377e860128",
                          "typeString": "literal_string \"Validity assertion failed\""
                        }
                      ],
                      "id": 28588,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8906:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 28593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8906:54:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 28594,
                  "nodeType": "ExpressionStatement",
                  "src": "8906:54:32"
                },
                {
                  "expression": {
                    "id": 28595,
                    "name": "memView",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28583,
                    "src": "8977:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 28587,
                  "id": 28596,
                  "nodeType": "Return",
                  "src": "8970:14:32"
                }
              ]
            },
            "documentation": {
              "id": 28581,
              "nodeType": "StructuredDocumentation",
              "src": "8597:224:32",
              "text": " @notice          Require that a typed memory view be valid.\n @dev             Returns the view for easy chaining.\n @param memView   The view\n @return          bytes29 - The validated view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "assertValid",
            "parameters": {
              "id": 28584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28583,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28598,
                  "src": "8847:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28582,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8847:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8846:17:32"
            },
            "returnParameters": {
              "id": 28587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28586,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28598,
                  "src": "8887:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28585,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8887:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8886:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28615,
            "nodeType": "FunctionDefinition",
            "src": "9256:132:32",
            "body": {
              "id": 28614,
              "nodeType": "Block",
              "src": "9336:52:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 28612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 28609,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28601,
                          "src": "9360:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 28608,
                        "name": "typeOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28776,
                        "src": "9353:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                          "typeString": "function (bytes29) pure returns (uint40)"
                        }
                      },
                      "id": 28610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9353:15:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 28611,
                      "name": "_expected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28603,
                      "src": "9372:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "9353:28:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 28607,
                  "id": 28613,
                  "nodeType": "Return",
                  "src": "9346:35:32"
                }
              ]
            },
            "documentation": {
              "id": 28599,
              "nodeType": "StructuredDocumentation",
              "src": "8997:254:32",
              "text": " @notice          Return true if the memview is of the expected type. Otherwise false.\n @param memView   The view\n @param _expected The expected type\n @return          bool - True if the memview is of the expected type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isType",
            "parameters": {
              "id": 28604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28601,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28615,
                  "src": "9272:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28600,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9272:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28603,
                  "mutability": "mutable",
                  "name": "_expected",
                  "nodeType": "VariableDeclaration",
                  "scope": 28615,
                  "src": "9289:16:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28602,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "9289:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9271:35:32"
            },
            "returnParameters": {
              "id": 28607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28606,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28615,
                  "src": "9330:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28605,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9330:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9329:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28678,
            "nodeType": "FunctionDefinition",
            "src": "9686:578:32",
            "body": {
              "id": 28677,
              "nodeType": "Block",
              "src": "9773:491:32",
              "statements": [
                {
                  "condition": {
                    "id": 28629,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "9787:27:32",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 28626,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28618,
                          "src": "9795:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        {
                          "id": 28627,
                          "name": "_expected",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28620,
                          "src": "9804:9:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          },
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        ],
                        "id": 28625,
                        "name": "isType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28615,
                        "src": "9788:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint40_$returns$_t_bool_$",
                          "typeString": "function (bytes29,uint40) pure returns (bool)"
                        }
                      },
                      "id": 28628,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9788:26:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28674,
                  "nodeType": "IfStatement",
                  "src": "9783:451:32",
                  "trueBody": {
                    "id": 28673,
                    "nodeType": "Block",
                    "src": "9816:418:32",
                    "statements": [
                      {
                        "assignments": [
                          null,
                          28631
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 28631,
                            "mutability": "mutable",
                            "name": "g",
                            "nodeType": "VariableDeclaration",
                            "scope": 28673,
                            "src": "9833:9:32",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 28630,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9833:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 28640,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 28636,
                                      "name": "memView",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 28618,
                                      "src": "9871:7:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    ],
                                    "id": 28635,
                                    "name": "typeOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28776,
                                    "src": "9864:6:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                                      "typeString": "function (bytes29) pure returns (uint40)"
                                    }
                                  },
                                  "id": 28637,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9864:15:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                ],
                                "id": 28634,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9856:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 28633,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9856:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 28638,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9856:24:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 28632,
                            "name": "encodeHex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28412,
                            "src": "9846:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256,uint256)"
                            }
                          },
                          "id": 28639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9846:35:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9830:51:32"
                      },
                      {
                        "assignments": [
                          null,
                          28642
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 28642,
                            "mutability": "mutable",
                            "name": "e",
                            "nodeType": "VariableDeclaration",
                            "scope": 28673,
                            "src": "9898:9:32",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 28641,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9898:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 28649,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 28646,
                                  "name": "_expected",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28620,
                                  "src": "9929:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                ],
                                "id": 28645,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9921:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 28644,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9921:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 28647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9921:18:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 28643,
                            "name": "encodeHex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28412,
                            "src": "9911:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256,uint256)"
                            }
                          },
                          "id": 28648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9911:29:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9895:45:32"
                      },
                      {
                        "assignments": [
                          28651
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 28651,
                            "mutability": "mutable",
                            "name": "err",
                            "nodeType": "VariableDeclaration",
                            "scope": 28673,
                            "src": "9954:17:32",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 28650,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "9954:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 28668,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "5479706520617373657274696f6e206661696c65642e20476f74203078",
                                  "id": 28656,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10036:31:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_2f02b416aa4f77f4220c3b6bf415b34f2494631d10ac20cd509c0fe0e4f80593",
                                    "typeString": "literal_string \"Type assertion failed. Got 0x\""
                                  },
                                  "value": "Type assertion failed. Got 0x"
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 28659,
                                      "name": "g",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 28631,
                                      "src": "10096:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 28658,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "10089:6:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint80_$",
                                      "typeString": "type(uint80)"
                                    },
                                    "typeName": {
                                      "id": 28657,
                                      "name": "uint80",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "10089:6:32",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 28660,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10089:9:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  }
                                },
                                {
                                  "hexValue": "2e204578706563746564203078",
                                  "id": 28661,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10120:15:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_c0efbfebb65cadd8bb13aebc0ea085f1329fae1d7376b5e0aa452fe70b6d6b80",
                                    "typeString": "literal_string \". Expected 0x\""
                                  },
                                  "value": ". Expected 0x"
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 28664,
                                      "name": "e",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 28642,
                                      "src": "10164:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 28663,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "10157:6:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint80_$",
                                      "typeString": "type(uint80)"
                                    },
                                    "typeName": {
                                      "id": 28662,
                                      "name": "uint80",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "10157:6:32",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 28665,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10157:9:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_2f02b416aa4f77f4220c3b6bf415b34f2494631d10ac20cd509c0fe0e4f80593",
                                    "typeString": "literal_string \"Type assertion failed. Got 0x\""
                                  },
                                  {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_c0efbfebb65cadd8bb13aebc0ea085f1329fae1d7376b5e0aa452fe70b6d6b80",
                                    "typeString": "literal_string \". Expected 0x\""
                                  },
                                  {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  }
                                ],
                                "expression": {
                                  "id": 28654,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "9998:3:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 28655,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "9998:16:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 28666,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9998:186:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 28653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9974:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 28652,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "9974:6:32",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 28667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9974:224:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9954:244:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 28670,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28651,
                              "src": "10219:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 28669,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "10212:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 28671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10212:11:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 28672,
                        "nodeType": "ExpressionStatement",
                        "src": "10212:11:32"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 28675,
                    "name": "memView",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28618,
                    "src": "10250:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 28624,
                  "id": 28676,
                  "nodeType": "Return",
                  "src": "10243:14:32"
                }
              ]
            },
            "documentation": {
              "id": 28616,
              "nodeType": "StructuredDocumentation",
              "src": "9394:287:32",
              "text": " @notice          Require that a typed memory view has a specific type.\n @dev             Returns the view for easy chaining.\n @param memView   The view\n @param _expected The expected type\n @return          bytes29 - The view with validated type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "assertType",
            "parameters": {
              "id": 28621,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28618,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28678,
                  "src": "9706:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28617,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9706:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28620,
                  "mutability": "mutable",
                  "name": "_expected",
                  "nodeType": "VariableDeclaration",
                  "scope": 28678,
                  "src": "9723:16:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28619,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "9723:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9705:35:32"
            },
            "returnParameters": {
              "id": 28624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28623,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28678,
                  "src": "9764:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28622,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9764:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9763:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28690,
            "nodeType": "FunctionDefinition",
            "src": "10499:390:32",
            "body": {
              "id": 28689,
              "nodeType": "Block",
              "src": "10589:300:32",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "10642:241:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "10769:49:32",
                        "value": {
                          "arguments": [
                            {
                              "name": "newView",
                              "nodeType": "YulIdentifier",
                              "src": "10783:7:32"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "10796:2:32",
                                  "type": "",
                                  "value": "40"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "10804:2:32",
                                      "type": "",
                                      "value": "40"
                                    },
                                    {
                                      "name": "memView",
                                      "nodeType": "YulIdentifier",
                                      "src": "10808:7:32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "shl",
                                    "nodeType": "YulIdentifier",
                                    "src": "10800:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "10800:16:32"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "10792:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10792:25:32"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "10780:2:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10780:38:32"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "10769:7:32"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "10831:42:32",
                        "value": {
                          "arguments": [
                            {
                              "name": "newView",
                              "nodeType": "YulIdentifier",
                              "src": "10845:7:32"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "10858:3:32",
                                  "type": "",
                                  "value": "216"
                                },
                                {
                                  "name": "_newType",
                                  "nodeType": "YulIdentifier",
                                  "src": "10863:8:32"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "10854:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10854:18:32"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "10842:2:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10842:31:32"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "10831:7:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28683,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10863:8:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28681,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10808:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28686,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10769:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28686,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10783:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28686,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10831:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28686,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10845:7:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28688,
                  "nodeType": "InlineAssembly",
                  "src": "10633:250:32"
                }
              ]
            },
            "documentation": {
              "id": 28679,
              "nodeType": "StructuredDocumentation",
              "src": "10270:224:32",
              "text": " @notice          Return an identical view with a different type.\n @param memView   The view\n @param _newType  The new type\n @return          newView - The new view with the specified type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "castTo",
            "parameters": {
              "id": 28684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28681,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28690,
                  "src": "10515:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28680,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "10515:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28683,
                  "mutability": "mutable",
                  "name": "_newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 28690,
                  "src": "10532:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28682,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "10532:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10514:34:32"
            },
            "returnParameters": {
              "id": 28687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28686,
                  "mutability": "mutable",
                  "name": "newView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28690,
                  "src": "10572:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28685,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "10572:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10571:17:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28704,
            "nodeType": "FunctionDefinition",
            "src": "11432:426:32",
            "body": {
              "id": 28703,
              "nodeType": "Block",
              "src": "11544:314:32",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "11563:289:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11649:38:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11664:2:32",
                              "type": "",
                              "value": "96"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "newView",
                                  "nodeType": "YulIdentifier",
                                  "src": "11671:7:32"
                                },
                                {
                                  "name": "_type",
                                  "nodeType": "YulIdentifier",
                                  "src": "11680:5:32"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "11668:2:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11668:18:32"
                            }
                          ],
                          "functionName": {
                            "name": "shl",
                            "nodeType": "YulIdentifier",
                            "src": "11660:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11660:27:32"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "11649:7:32"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "11715:37:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11730:2:32",
                              "type": "",
                              "value": "96"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "newView",
                                  "nodeType": "YulIdentifier",
                                  "src": "11737:7:32"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "11746:4:32"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "11734:2:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11734:17:32"
                            }
                          ],
                          "functionName": {
                            "name": "shl",
                            "nodeType": "YulIdentifier",
                            "src": "11726:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11726:26:32"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "11715:7:32"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "11780:37:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11795:2:32",
                              "type": "",
                              "value": "24"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "newView",
                                  "nodeType": "YulIdentifier",
                                  "src": "11802:7:32"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "11811:4:32"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "11799:2:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11799:17:32"
                            }
                          ],
                          "functionName": {
                            "name": "shl",
                            "nodeType": "YulIdentifier",
                            "src": "11791:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11791:26:32"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "11780:7:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28697,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11811:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28695,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11746:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28693,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11680:5:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28700,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11649:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28700,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11671:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28700,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11715:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28700,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11737:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28700,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11780:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28700,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11802:7:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28702,
                  "nodeType": "InlineAssembly",
                  "src": "11554:298:32"
                }
              ]
            },
            "documentation": {
              "id": 28691,
              "nodeType": "StructuredDocumentation",
              "src": "10895:532:32",
              "text": " @notice          Unsafe raw pointer construction. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @dev             Unsafe raw pointer construction. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @param _type     The type\n @param _loc      The memory address\n @param _len      The length\n @return          newView - The new view with the specified type, location and length"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unsafeBuildUnchecked",
            "parameters": {
              "id": 28698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28693,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 28704,
                  "src": "11462:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28692,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11462:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28695,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 28704,
                  "src": "11477:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28694,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11477:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28697,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 28704,
                  "src": "11491:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28696,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11491:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11461:43:32"
            },
            "returnParameters": {
              "id": 28701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28700,
                  "mutability": "mutable",
                  "name": "newView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28704,
                  "src": "11527:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28699,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "11527:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11526:17:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 28740,
            "nodeType": "FunctionDefinition",
            "src": "12397:443:32",
            "body": {
              "id": 28739,
              "nodeType": "Block",
              "src": "12495:345:32",
              "statements": [
                {
                  "assignments": [
                    28717
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28717,
                      "mutability": "mutable",
                      "name": "_end",
                      "nodeType": "VariableDeclaration",
                      "scope": 28739,
                      "src": "12505:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28716,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12505:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28722,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 28720,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28711,
                        "src": "12529:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 28718,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28709,
                        "src": "12520:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 28719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28150,
                      "src": "12520:8:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 28721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12520:14:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12505:29:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "12553:162:32",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12664:41:32",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12682:9:32",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "12690:1:32",
                                "type": "",
                                "value": "0"
                              },
                              "variableNames": [
                                {
                                  "name": "_end",
                                  "nodeType": "YulIdentifier",
                                  "src": "12682:4:32"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "_end",
                              "nodeType": "YulIdentifier",
                              "src": "12645:4:32"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "12657:4:32",
                                  "type": "",
                                  "value": "0x40"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "12651:5:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12651:11:32"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "12642:2:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12642:21:32"
                        },
                        "nodeType": "YulIf",
                        "src": "12639:2:32"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28717,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12645:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28717,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12682:4:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28723,
                  "nodeType": "InlineAssembly",
                  "src": "12544:171:32"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 28724,
                      "name": "_end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28717,
                      "src": "12728:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 28725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12736:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12728:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28730,
                  "nodeType": "IfStatement",
                  "src": "12724:51:32",
                  "trueBody": {
                    "id": 28729,
                    "nodeType": "Block",
                    "src": "12739:36:32",
                    "statements": [
                      {
                        "expression": {
                          "id": 28727,
                          "name": "NULL",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28161,
                          "src": "12760:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "functionReturnParameters": 28715,
                        "id": 28728,
                        "nodeType": "Return",
                        "src": "12753:11:32"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 28737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28731,
                      "name": "newView",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28714,
                      "src": "12784:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 28733,
                          "name": "_type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28707,
                          "src": "12815:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 28734,
                          "name": "_loc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28709,
                          "src": "12822:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 28735,
                          "name": "_len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28711,
                          "src": "12828:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 28732,
                        "name": "unsafeBuildUnchecked",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28704,
                        "src": "12794:20:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                        }
                      },
                      "id": 28736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12794:39:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "12784:49:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 28738,
                  "nodeType": "ExpressionStatement",
                  "src": "12784:49:32"
                }
              ]
            },
            "documentation": {
              "id": 28705,
              "nodeType": "StructuredDocumentation",
              "src": "11864:528:32",
              "text": " @notice          Instantiate a new memory view. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @dev             Instantiate a new memory view. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @param _type     The type\n @param _loc      The memory address\n @param _len      The length\n @return          newView - The new view with the specified type, location and length"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "build",
            "parameters": {
              "id": 28712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28707,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 28740,
                  "src": "12412:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28706,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12412:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28709,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 28740,
                  "src": "12427:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12427:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28711,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 28740,
                  "src": "12441:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28710,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12441:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12411:43:32"
            },
            "returnParameters": {
              "id": 28715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28714,
                  "mutability": "mutable",
                  "name": "newView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28740,
                  "src": "12478:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28713,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "12478:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12477:17:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28766,
            "nodeType": "FunctionDefinition",
            "src": "13237:368:32",
            "body": {
              "id": 28765,
              "nodeType": "Block",
              "src": "13316:289:32",
              "statements": [
                {
                  "assignments": [
                    28751
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28751,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 28765,
                      "src": "13326:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28750,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13326:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28754,
                  "initialValue": {
                    "expression": {
                      "id": 28752,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28743,
                      "src": "13341:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 28753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "13341:10:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13326:25:32"
                },
                {
                  "assignments": [
                    28756
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28756,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 28765,
                      "src": "13362:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28755,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13362:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28757,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13362:12:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "13393:162:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "13479:22:32",
                        "value": {
                          "arguments": [
                            {
                              "name": "arr",
                              "nodeType": "YulIdentifier",
                              "src": "13491:3:32"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13496:4:32",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "13487:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13487:14:32"
                        },
                        "variableNames": [
                          {
                            "name": "_loc",
                            "nodeType": "YulIdentifier",
                            "src": "13479:4:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28756,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "13479:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28743,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "13491:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28758,
                  "nodeType": "InlineAssembly",
                  "src": "13384:171:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28760,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28745,
                        "src": "13578:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      {
                        "id": 28761,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28756,
                        "src": "13587:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28762,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28751,
                        "src": "13593:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 28759,
                      "name": "build",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28740,
                      "src": "13572:5:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                      }
                    },
                    "id": 28763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13572:26:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 28749,
                  "id": 28764,
                  "nodeType": "Return",
                  "src": "13565:33:32"
                }
              ]
            },
            "documentation": {
              "id": 28741,
              "nodeType": "StructuredDocumentation",
              "src": "12846:386:32",
              "text": " @notice          Instantiate a memory view from a byte array.\n @dev             Note that due to Solidity memory representation, it is not possible to\n                  implement a deref, as the `bytes` type stores its len in memory.\n @param arr       The byte array\n @param newType   The type\n @return          bytes29 - The memory view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ref",
            "parameters": {
              "id": 28746,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28743,
                  "mutability": "mutable",
                  "name": "arr",
                  "nodeType": "VariableDeclaration",
                  "scope": 28766,
                  "src": "13250:16:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 28742,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13250:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28745,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 28766,
                  "src": "13268:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28744,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "13268:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13249:34:32"
            },
            "returnParameters": {
              "id": 28749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28748,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28766,
                  "src": "13307:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28747,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13307:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13306:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28776,
            "nodeType": "FunctionDefinition",
            "src": "13797:276:32",
            "body": {
              "id": 28775,
              "nodeType": "Block",
              "src": "13867:206:32",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "13886:181:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "14003:26:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "14016:3:32",
                              "type": "",
                              "value": "216"
                            },
                            {
                              "name": "memView",
                              "nodeType": "YulIdentifier",
                              "src": "14021:7:32"
                            }
                          ],
                          "functionName": {
                            "name": "shr",
                            "nodeType": "YulIdentifier",
                            "src": "14012:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14012:17:32"
                        },
                        "variableNames": [
                          {
                            "name": "_type",
                            "nodeType": "YulIdentifier",
                            "src": "14003:5:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28772,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14003:5:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28769,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14021:7:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28774,
                  "nodeType": "InlineAssembly",
                  "src": "13877:190:32"
                }
              ]
            },
            "documentation": {
              "id": 28767,
              "nodeType": "StructuredDocumentation",
              "src": "13611:181:32",
              "text": " @notice          Return the associated type information.\n @param memView   The memory view\n @return          _type - The type associated with the view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "typeOf",
            "parameters": {
              "id": 28770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28769,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28776,
                  "src": "13813:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28768,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13813:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13812:17:32"
            },
            "returnParameters": {
              "id": 28773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28772,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 28776,
                  "src": "13853:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28771,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "13853:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13852:14:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28799,
            "nodeType": "FunctionDefinition",
            "src": "14337:141:32",
            "body": {
              "id": 28798,
              "nodeType": "Block",
              "src": "14413:65:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    },
                    "id": 28796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "id": 28794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            },
                            "id": 28788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 28786,
                              "name": "left",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28779,
                              "src": "14431:4:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "^",
                            "rightExpression": {
                              "id": 28787,
                              "name": "right",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28781,
                              "src": "14438:5:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "src": "14431:12:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "id": 28789,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "14430:14:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">>",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 28792,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 28790,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14449:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 28791,
                              "name": "TWELVE_BYTES",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28167,
                              "src": "14453:12:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "14449:16:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "id": 28793,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "14448:18:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "14430:36:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 28795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14470:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14430:41:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 28785,
                  "id": 28797,
                  "nodeType": "Return",
                  "src": "14423:48:32"
                }
              ]
            },
            "documentation": {
              "id": 28777,
              "nodeType": "StructuredDocumentation",
              "src": "14079:253:32",
              "text": " @notice          Optimized type comparison. Checks that the 5-byte type flag is equal.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the 5-byte type flag is equal"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sameType",
            "parameters": {
              "id": 28782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28779,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 28799,
                  "src": "14355:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28778,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14355:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28781,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 28799,
                  "src": "14369:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28780,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14369:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14354:29:32"
            },
            "returnParameters": {
              "id": 28785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28784,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28799,
                  "src": "14407:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28783,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14407:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14406:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28813,
            "nodeType": "FunctionDefinition",
            "src": "14658:373:32",
            "body": {
              "id": 28812,
              "nodeType": "Block",
              "src": "14724:307:32",
              "statements": [
                {
                  "assignments": [
                    28808
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28808,
                      "mutability": "mutable",
                      "name": "_mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 28812,
                      "src": "14734:13:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28807,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14734:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28810,
                  "initialValue": {
                    "id": 28809,
                    "name": "LOW_12_MASK",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28164,
                    "src": "14750:11:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14734:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "14811:214:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "14978:37:32",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "14994:3:32",
                                  "type": "",
                                  "value": "120"
                                },
                                {
                                  "name": "memView",
                                  "nodeType": "YulIdentifier",
                                  "src": "14999:7:32"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "14990:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14990:17:32"
                            },
                            {
                              "name": "_mask",
                              "nodeType": "YulIdentifier",
                              "src": "15009:5:32"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "14986:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14986:29:32"
                        },
                        "variableNames": [
                          {
                            "name": "_loc",
                            "nodeType": "YulIdentifier",
                            "src": "14978:4:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28805,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14978:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28808,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "15009:5:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28802,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14999:7:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28811,
                  "nodeType": "InlineAssembly",
                  "src": "14802:223:32"
                }
              ]
            },
            "documentation": {
              "id": 28800,
              "nodeType": "StructuredDocumentation",
              "src": "14484:169:32",
              "text": " @notice          Return the memory address of the underlying bytes.\n @param memView   The view\n @return          _loc - The memory address"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "loc",
            "parameters": {
              "id": 28803,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28802,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28813,
                  "src": "14671:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28801,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14671:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14670:17:32"
            },
            "returnParameters": {
              "id": 28806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28805,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 28813,
                  "src": "14711:11:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 28804,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "14711:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14710:13:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28834,
            "nodeType": "FunctionDefinition",
            "src": "15237:122:32",
            "body": {
              "id": 28833,
              "nodeType": "Block",
              "src": "15301:58:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "hexValue": "3332",
                          "id": 28828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15344:2:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 28824,
                                  "name": "memView",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28816,
                                  "src": "15330:7:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 28823,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28863,
                                "src": "15326:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 28825,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15326:12:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            ],
                            "id": 28822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15318:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 28821,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "15318:7:32",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 28826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15318:21:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 28827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28150,
                        "src": "15318:25:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 28829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15318:29:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 28830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15350:2:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "15318:34:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 28820,
                  "id": 28832,
                  "nodeType": "Return",
                  "src": "15311:41:32"
                }
              ]
            },
            "documentation": {
              "id": 28814,
              "nodeType": "StructuredDocumentation",
              "src": "15037:195:32",
              "text": " @notice          The number of memory words this memory view occupies, rounded up.\n @param memView   The view\n @return          uint256 - The number of memory words"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "words",
            "parameters": {
              "id": 28817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28816,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28834,
                  "src": "15252:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28815,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15252:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15251:17:32"
            },
            "returnParameters": {
              "id": 28820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28819,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28834,
                  "src": "15292:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28818,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15292:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15291:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28849,
            "nodeType": "FunctionDefinition",
            "src": "15578:111:32",
            "body": {
              "id": 28848,
              "nodeType": "Block",
              "src": "15646:43:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 28843,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28837,
                          "src": "15669:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 28842,
                        "name": "words",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28834,
                        "src": "15663:5:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                          "typeString": "function (bytes29) pure returns (uint256)"
                        }
                      },
                      "id": 28844,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15663:14:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 28845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15680:2:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "15663:19:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 28841,
                  "id": 28847,
                  "nodeType": "Return",
                  "src": "15656:26:32"
                }
              ]
            },
            "documentation": {
              "id": 28835,
              "nodeType": "StructuredDocumentation",
              "src": "15365:208:32",
              "text": " @notice          The in-memory footprint of a fresh copy of the view.\n @param memView   The view\n @return          uint256 - The in-memory footprint of a fresh copy of the view."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "footprint",
            "parameters": {
              "id": 28838,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28837,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28849,
                  "src": "15597:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28836,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15597:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15596:17:32"
            },
            "returnParameters": {
              "id": 28841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28840,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28849,
                  "src": "15637:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28839,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15637:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15636:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28863,
            "nodeType": "FunctionDefinition",
            "src": "15855:291:32",
            "body": {
              "id": 28862,
              "nodeType": "Block",
              "src": "15921:225:32",
              "statements": [
                {
                  "assignments": [
                    28858
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28858,
                      "mutability": "mutable",
                      "name": "_mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 28862,
                      "src": "15931:13:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28857,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15931:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28860,
                  "initialValue": {
                    "id": 28859,
                    "name": "LOW_12_MASK",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28164,
                    "src": "15947:11:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15931:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "16008:132:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "16094:36:32",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "16110:2:32",
                                  "type": "",
                                  "value": "24"
                                },
                                {
                                  "name": "memView",
                                  "nodeType": "YulIdentifier",
                                  "src": "16114:7:32"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "16106:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16106:16:32"
                            },
                            {
                              "name": "_mask",
                              "nodeType": "YulIdentifier",
                              "src": "16124:5:32"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "16102:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16102:28:32"
                        },
                        "variableNames": [
                          {
                            "name": "_len",
                            "nodeType": "YulIdentifier",
                            "src": "16094:4:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28855,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "16094:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28858,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "16124:5:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28852,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "16114:7:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 28861,
                  "nodeType": "InlineAssembly",
                  "src": "15999:141:32"
                }
              ]
            },
            "documentation": {
              "id": 28850,
              "nodeType": "StructuredDocumentation",
              "src": "15695:155:32",
              "text": " @notice          The number of bytes of the view.\n @param memView   The view\n @return          _len - The length of the view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "parameters": {
              "id": 28853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28852,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28863,
                  "src": "15868:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28851,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15868:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15867:17:32"
            },
            "returnParameters": {
              "id": 28856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28855,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 28863,
                  "src": "15908:11:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 28854,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "15908:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15907:13:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28880,
            "nodeType": "FunctionDefinition",
            "src": "16320:113:32",
            "body": {
              "id": 28879,
              "nodeType": "Block",
              "src": "16382:51:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 28877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 28872,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28866,
                          "src": "16403:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 28871,
                        "name": "loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28813,
                        "src": "16399:3:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                          "typeString": "function (bytes29) pure returns (uint96)"
                        }
                      },
                      "id": 28873,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16399:12:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 28875,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28866,
                          "src": "16418:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 28874,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28863,
                        "src": "16414:3:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                          "typeString": "function (bytes29) pure returns (uint96)"
                        }
                      },
                      "id": 28876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16414:12:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "16399:27:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "functionReturnParameters": 28870,
                  "id": 28878,
                  "nodeType": "Return",
                  "src": "16392:34:32"
                }
              ]
            },
            "documentation": {
              "id": 28864,
              "nodeType": "StructuredDocumentation",
              "src": "16152:163:32",
              "text": " @notice          Returns the endpoint of `memView`.\n @param memView   The view\n @return          uint256 - The endpoint of `memView`"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "end",
            "parameters": {
              "id": 28867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28866,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28880,
                  "src": "16333:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28865,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "16333:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16332:17:32"
            },
            "returnParameters": {
              "id": 28870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28869,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28880,
                  "src": "16373:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16373:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16372:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28929,
            "nodeType": "FunctionDefinition",
            "src": "16713:370:32",
            "body": {
              "id": 28928,
              "nodeType": "Block",
              "src": "16823:260:32",
              "statements": [
                {
                  "assignments": [
                    28895
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28895,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 28928,
                      "src": "16833:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28894,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16833:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28899,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 28897,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28883,
                        "src": "16852:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 28896,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28813,
                      "src": "16848:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 28898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16848:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16833:27:32"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 28905,
                          "name": "_len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28887,
                          "src": "16942:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 28902,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28885,
                              "src": "16930:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 28900,
                              "name": "_loc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28895,
                              "src": "16921:4:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 28901,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28150,
                            "src": "16921:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 28903,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16921:16:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 28904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28150,
                        "src": "16921:20:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 28906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16921:26:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 28908,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28883,
                          "src": "16954:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 28907,
                        "name": "end",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28880,
                        "src": "16950:3:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                          "typeString": "function (bytes29) pure returns (uint256)"
                        }
                      },
                      "id": 28909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16950:12:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16921:41:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28914,
                  "nodeType": "IfStatement",
                  "src": "16917:83:32",
                  "trueBody": {
                    "id": 28913,
                    "nodeType": "Block",
                    "src": "16964:36:32",
                    "statements": [
                      {
                        "expression": {
                          "id": 28911,
                          "name": "NULL",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28161,
                          "src": "16985:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "functionReturnParameters": 28893,
                        "id": 28912,
                        "nodeType": "Return",
                        "src": "16978:11:32"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 28920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28915,
                      "name": "_loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28895,
                      "src": "17010:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 28918,
                          "name": "_index",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28885,
                          "src": "17026:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 28916,
                          "name": "_loc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28895,
                          "src": "17017:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 28917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28150,
                        "src": "17017:8:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 28919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17017:16:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17010:23:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28921,
                  "nodeType": "ExpressionStatement",
                  "src": "17010:23:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28923,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28889,
                        "src": "17056:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      {
                        "id": 28924,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28895,
                        "src": "17065:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28925,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28887,
                        "src": "17071:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 28922,
                      "name": "build",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28740,
                      "src": "17050:5:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                      }
                    },
                    "id": 28926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17050:26:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 28893,
                  "id": 28927,
                  "nodeType": "Return",
                  "src": "17043:33:32"
                }
              ]
            },
            "documentation": {
              "id": 28881,
              "nodeType": "StructuredDocumentation",
              "src": "16439:269:32",
              "text": " @notice          Safe slicing without memory modification.\n @param memView   The view\n @param _index    The start index\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "slice",
            "parameters": {
              "id": 28890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28883,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28929,
                  "src": "16728:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28882,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "16728:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28885,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 28929,
                  "src": "16745:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28884,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16745:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28887,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 28929,
                  "src": "16761:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28886,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16761:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28889,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 28929,
                  "src": "16775:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28888,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "16775:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16727:63:32"
            },
            "returnParameters": {
              "id": 28893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28892,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28929,
                  "src": "16814:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28891,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "16814:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16813:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28949,
            "nodeType": "FunctionDefinition",
            "src": "17351:151:32",
            "body": {
              "id": 28948,
              "nodeType": "Block",
              "src": "17446:56:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28942,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28932,
                        "src": "17469:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 28943,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17478:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 28944,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28934,
                        "src": "17481:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28945,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28936,
                        "src": "17487:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "id": 28941,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28929,
                      "src": "17463:5:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 28946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17463:32:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 28940,
                  "id": 28947,
                  "nodeType": "Return",
                  "src": "17456:39:32"
                }
              ]
            },
            "documentation": {
              "id": 28930,
              "nodeType": "StructuredDocumentation",
              "src": "17089:257:32",
              "text": " @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\n @param memView   The view\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "prefix",
            "parameters": {
              "id": 28937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28932,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28949,
                  "src": "17367:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28931,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17367:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28934,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 28949,
                  "src": "17384:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28933,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17384:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28936,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 28949,
                  "src": "17398:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28935,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "17398:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17366:47:32"
            },
            "returnParameters": {
              "id": 28940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28939,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28949,
                  "src": "17437:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28938,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17437:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17436:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 28977,
            "nodeType": "FunctionDefinition",
            "src": "17768:182:32",
            "body": {
              "id": 28976,
              "nodeType": "Block",
              "src": "17864:86:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 28962,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28952,
                        "src": "17887:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 28970,
                            "name": "_len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28954,
                            "src": "17922:4:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 28966,
                                    "name": "memView",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28952,
                                    "src": "17908:7:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes29",
                                      "typeString": "bytes29"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes29",
                                      "typeString": "bytes29"
                                    }
                                  ],
                                  "id": 28965,
                                  "name": "len",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28863,
                                  "src": "17904:3:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                    "typeString": "function (bytes29) pure returns (uint96)"
                                  }
                                },
                                "id": 28967,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17904:12:32",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 28964,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17896:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 28963,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "17896:7:32",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 28968,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17896:21:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 28969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28124,
                          "src": "17896:25:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 28971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17896:31:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28972,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28954,
                        "src": "17929:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 28973,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28956,
                        "src": "17935:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "id": 28961,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28929,
                      "src": "17881:5:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 28974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17881:62:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 28960,
                  "id": 28975,
                  "nodeType": "Return",
                  "src": "17874:69:32"
                }
              ]
            },
            "documentation": {
              "id": 28950,
              "nodeType": "StructuredDocumentation",
              "src": "17508:255:32",
              "text": " @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\n @param memView   The view\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "postfix",
            "parameters": {
              "id": 28957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28952,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 28977,
                  "src": "17785:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28951,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17785:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28954,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 28977,
                  "src": "17802:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17802:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28956,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 28977,
                  "src": "17816:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 28955,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "17816:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17784:47:32"
            },
            "returnParameters": {
              "id": 28960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28959,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28977,
                  "src": "17855:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 28958,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17855:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17854:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29046,
            "nodeType": "FunctionDefinition",
            "src": "18259:741:32",
            "body": {
              "id": 29045,
              "nodeType": "Block",
              "src": "18424:576:32",
              "statements": [
                {
                  "assignments": [
                    null,
                    28992
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 28992,
                      "mutability": "mutable",
                      "name": "a",
                      "nodeType": "VariableDeclaration",
                      "scope": 29045,
                      "src": "18437:9:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28991,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18437:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28996,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 28994,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28980,
                        "src": "18460:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 28993,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28412,
                      "src": "18450:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 28995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18450:15:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18434:31:32"
                },
                {
                  "assignments": [
                    null,
                    28998
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 28998,
                      "mutability": "mutable",
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 29045,
                      "src": "18478:9:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28997,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18478:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29002,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29000,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28982,
                        "src": "18501:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 28999,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28412,
                      "src": "18491:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 29001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18491:15:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18475:31:32"
                },
                {
                  "assignments": [
                    null,
                    29004
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 29004,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "scope": 29045,
                      "src": "18519:9:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29003,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18519:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29008,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29006,
                        "name": "_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28984,
                        "src": "18542:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29005,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28412,
                      "src": "18532:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 29007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18532:17:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18516:33:32"
                },
                {
                  "assignments": [
                    null,
                    29010
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 29010,
                      "mutability": "mutable",
                      "name": "d",
                      "nodeType": "VariableDeclaration",
                      "scope": 29045,
                      "src": "18562:9:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29009,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18562:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29014,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29012,
                        "name": "_slice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28986,
                        "src": "18585:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29011,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28412,
                      "src": "18575:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 29013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18575:17:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18559:33:32"
                },
                {
                  "expression": {
                    "id": 29043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 29015,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28989,
                      "src": "18602:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "54797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078",
                              "id": 29020,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18662:55:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fb6c6ce939dcb005b895abe7a9570250d9c1c31a5440a6a6e28e0acc2d1c6af1",
                                "typeString": "literal_string \"TypedMemView/index - Overran the view. Slice is at 0x\""
                              },
                              "value": "TypedMemView/index - Overran the view. Slice is at 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 29023,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28992,
                                  "src": "18742:1:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 29022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18735:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 29021,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18735:6:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29024,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18735:9:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2077697468206c656e677468203078",
                              "id": 29025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18762:17:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              "value": " with length 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 29028,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28998,
                                  "src": "18804:1:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 29027,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18797:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 29026,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18797:6:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18797:9:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2e20417474656d7074656420746f20696e646578206174206f6666736574203078",
                              "id": 29030,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18824:35:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_76d133faf43042eef7167f01d32e0891632a5651573db9fc8b6aa42fdbcaf509",
                                "typeString": "literal_string \". Attempted to index at offset 0x\""
                              },
                              "value": ". Attempted to index at offset 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 29033,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29004,
                                  "src": "18884:1:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 29032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18877:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 29031,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18877:6:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18877:9:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2077697468206c656e677468203078",
                              "id": 29035,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18904:17:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              "value": " with length 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 29038,
                                  "name": "d",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29010,
                                  "src": "18946:1:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 29037,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18939:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 29036,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18939:6:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18939:9:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2e",
                              "id": 29040,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18966:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                                "typeString": "literal_string \".\""
                              },
                              "value": "."
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_fb6c6ce939dcb005b895abe7a9570250d9c1c31a5440a6a6e28e0acc2d1c6af1",
                                "typeString": "literal_string \"TypedMemView/index - Overran the view. Slice is at 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_76d133faf43042eef7167f01d32e0891632a5651573db9fc8b6aa42fdbcaf509",
                                "typeString": "literal_string \". Attempted to index at offset 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                                "typeString": "literal_string \".\""
                              }
                            ],
                            "expression": {
                              "id": 29018,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "18628:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 29019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "18628:16:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 29041,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18628:355:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 29017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "18608:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        },
                        "typeName": {
                          "id": 29016,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "18608:6:32",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 29042,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18608:385:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "18602:391:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "id": 29044,
                  "nodeType": "ExpressionStatement",
                  "src": "18602:391:32"
                }
              ]
            },
            "documentation": {
              "id": 28978,
              "nodeType": "StructuredDocumentation",
              "src": "17956:298:32",
              "text": " @notice          Construct an error message for an indexing overrun.\n @param _loc      The memory address\n @param _len      The length\n @param _index    The index\n @param _slice    The slice where the overrun occurred\n @return          err - The err"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexErrOverrun",
            "parameters": {
              "id": 28987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28980,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 29046,
                  "src": "18293:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28979,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18293:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28982,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 29046,
                  "src": "18315:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28981,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18315:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28984,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 29046,
                  "src": "18337:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28983,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18337:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28986,
                  "mutability": "mutable",
                  "name": "_slice",
                  "nodeType": "VariableDeclaration",
                  "scope": 29046,
                  "src": "18361:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18361:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18283:98:32"
            },
            "returnParameters": {
              "id": 28990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28989,
                  "mutability": "mutable",
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 29046,
                  "src": "18405:17:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 28988,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "18405:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18404:19:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29121,
            "nodeType": "FunctionDefinition",
            "src": "19502:677:32",
            "body": {
              "id": 29120,
              "nodeType": "Block",
              "src": "19603:576:32",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 29060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 29058,
                      "name": "_bytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29053,
                      "src": "19617:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 29059,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19627:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "19617:11:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 29067,
                  "nodeType": "IfStatement",
                  "src": "19613:37:32",
                  "trueBody": {
                    "id": 29066,
                    "nodeType": "Block",
                    "src": "19630:20:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 29063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19646:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 29062,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "19638:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 29061,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "19638:7:32",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 29064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19638:10:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 29057,
                        "id": 29065,
                        "nodeType": "Return",
                        "src": "19631:17:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 29070,
                          "name": "_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29053,
                          "src": "19674:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "expression": {
                          "id": 29068,
                          "name": "_index",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29051,
                          "src": "19663:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 29069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28150,
                        "src": "19663:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 29071,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19663:18:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 29073,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29049,
                          "src": "19688:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 29072,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28863,
                        "src": "19684:3:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                          "typeString": "function (bytes29) pure returns (uint96)"
                        }
                      },
                      "id": 29074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19684:12:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "19663:33:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 29093,
                  "nodeType": "IfStatement",
                  "src": "19659:140:32",
                  "trueBody": {
                    "id": 29092,
                    "nodeType": "Block",
                    "src": "19698:101:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 29079,
                                      "name": "memView",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29049,
                                      "src": "19739:7:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    ],
                                    "id": 29078,
                                    "name": "loc",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28813,
                                    "src": "19735:3:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                      "typeString": "function (bytes29) pure returns (uint96)"
                                    }
                                  },
                                  "id": 29080,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19735:12:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 29082,
                                      "name": "memView",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29049,
                                      "src": "19753:7:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    ],
                                    "id": 29081,
                                    "name": "len",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28863,
                                    "src": "19749:3:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                      "typeString": "function (bytes29) pure returns (uint96)"
                                    }
                                  },
                                  "id": 29083,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19749:12:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  }
                                },
                                {
                                  "id": 29084,
                                  "name": "_index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29051,
                                  "src": "19763:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 29087,
                                      "name": "_bytes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29053,
                                      "src": "19779:6:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    ],
                                    "id": 29086,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "19771:7:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 29085,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "19771:7:32",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 29088,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19771:15:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  },
                                  {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 29077,
                                "name": "indexErrOverrun",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29046,
                                "src": "19719:15:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (string memory)"
                                }
                              },
                              "id": 29089,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19719:68:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 29076,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "19712:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 29090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19712:76:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 29091,
                        "nodeType": "ExpressionStatement",
                        "src": "19712:76:32"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 29097,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 29095,
                          "name": "_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29053,
                          "src": "19816:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "hexValue": "3332",
                          "id": 29096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19826:2:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "32"
                        },
                        "src": "19816:12:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e203332206279746573",
                        "id": 29098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19830:60:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2c061d25dd4dec479f0720f15754fff58a1a4debc7353bd1d3f4b7b23876297",
                          "typeString": "literal_string \"TypedMemView/index - Attempted to index more than 32 bytes\""
                        },
                        "value": "TypedMemView/index - Attempted to index more than 32 bytes"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2c061d25dd4dec479f0720f15754fff58a1a4debc7353bd1d3f4b7b23876297",
                          "typeString": "literal_string \"TypedMemView/index - Attempted to index more than 32 bytes\""
                        }
                      ],
                      "id": 29094,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19808:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 29099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19808:83:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29100,
                  "nodeType": "ExpressionStatement",
                  "src": "19808:83:32"
                },
                {
                  "assignments": [
                    29102
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29102,
                      "mutability": "mutable",
                      "name": "bitLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 29120,
                      "src": "19902:15:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 29101,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "19902:5:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29106,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 29105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 29103,
                      "name": "_bytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29053,
                      "src": "19920:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "38",
                      "id": 29104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19929:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_8_by_1",
                        "typeString": "int_const 8"
                      },
                      "value": "8"
                    },
                    "src": "19920:10:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19902:28:32"
                },
                {
                  "assignments": [
                    29108
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29108,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 29120,
                      "src": "19940:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29107,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19940:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29112,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29110,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29049,
                        "src": "19959:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29109,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28813,
                      "src": "19955:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19955:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19940:27:32"
                },
                {
                  "assignments": [
                    29114
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29114,
                      "mutability": "mutable",
                      "name": "_mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 29120,
                      "src": "19977:13:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29113,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19977:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29118,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29116,
                        "name": "bitLength",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29102,
                        "src": "20002:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 29115,
                      "name": "leftMask",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28519,
                      "src": "19993:8:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint256_$",
                        "typeString": "function (uint8) pure returns (uint256)"
                      }
                    },
                    "id": 29117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19993:19:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19977:35:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "20031:142:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "20117:46:32",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_loc",
                                      "nodeType": "YulIdentifier",
                                      "src": "20141:4:32"
                                    },
                                    {
                                      "name": "_index",
                                      "nodeType": "YulIdentifier",
                                      "src": "20147:6:32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "20137:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "20137:17:32"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "20131:5:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20131:24:32"
                            },
                            {
                              "name": "_mask",
                              "nodeType": "YulIdentifier",
                              "src": "20157:5:32"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "20127:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20127:36:32"
                        },
                        "variableNames": [
                          {
                            "name": "result",
                            "nodeType": "YulIdentifier",
                            "src": "20117:6:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29051,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20147:6:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29108,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20141:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29114,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20157:5:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29056,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20117:6:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29119,
                  "nodeType": "InlineAssembly",
                  "src": "20022:151:32"
                }
              ]
            },
            "documentation": {
              "id": 29047,
              "nodeType": "StructuredDocumentation",
              "src": "19006:491:32",
              "text": " @notice          Load up to 32 bytes from the view onto the stack.\n @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\n                  This can be immediately cast to a smaller fixed-length byte array.\n                  To automatically cast to an integer, use `indexUint`.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The 32 byte result"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "index",
            "parameters": {
              "id": 29054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29049,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29121,
                  "src": "19517:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29048,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "19517:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29051,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 29121,
                  "src": "19534:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19534:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29053,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 29121,
                  "src": "19550:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 29052,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "19550:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19516:47:32"
            },
            "returnParameters": {
              "id": 29057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29056,
                  "mutability": "mutable",
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 29121,
                  "src": "19587:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29055,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19587:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19586:16:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29151,
            "nodeType": "FunctionDefinition",
            "src": "20525:191:32",
            "body": {
              "id": 29150,
              "nodeType": "Block",
              "src": "20630:86:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 29136,
                              "name": "memView",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29124,
                              "src": "20661:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            {
                              "id": 29137,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29126,
                              "src": "20670:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 29138,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29128,
                              "src": "20678:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 29135,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29121,
                            "src": "20655:5:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$",
                              "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                            }
                          },
                          "id": 29139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20655:30:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "20647:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 29133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20647:7:32",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 29140,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20647:39:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">>",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 29146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 29143,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3332",
                                  "id": 29141,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20692:2:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 29142,
                                  "name": "_bytes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29128,
                                  "src": "20697:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "20692:11:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "id": 29144,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "20691:13:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "38",
                            "id": 29145,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20707:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "20691:17:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "id": 29147,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "20690:19:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "20647:62:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 29132,
                  "id": 29149,
                  "nodeType": "Return",
                  "src": "20640:69:32"
                }
              ]
            },
            "documentation": {
              "id": 29122,
              "nodeType": "StructuredDocumentation",
              "src": "20185:335:32",
              "text": " @notice          Parse an unsigned integer from the view at `_index`.\n @dev             Requires that the view have >= `_bytes` bytes following that index.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The unsigned integer"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexUint",
            "parameters": {
              "id": 29129,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29124,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29151,
                  "src": "20544:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29123,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "20544:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29126,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 29151,
                  "src": "20561:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29125,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20561:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29128,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 29151,
                  "src": "20577:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 29127,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "20577:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20543:47:32"
            },
            "returnParameters": {
              "id": 29132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29131,
                  "mutability": "mutable",
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 29151,
                  "src": "20614:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20614:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20613:16:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29175,
            "nodeType": "FunctionDefinition",
            "src": "20958:186:32",
            "body": {
              "id": 29174,
              "nodeType": "Block",
              "src": "21065:79:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 29167,
                                "name": "memView",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29154,
                                "src": "21111:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              {
                                "id": 29168,
                                "name": "_index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29156,
                                "src": "21120:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 29169,
                                "name": "_bytes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29158,
                                "src": "21128:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 29166,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29121,
                              "src": "21105:5:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$",
                                "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                              }
                            },
                            "id": 29170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21105:30:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 29165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21097:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 29164,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "21097:7:32",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21097:39:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29163,
                      "name": "reverseUint256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28509,
                      "src": "21082:14:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 29172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21082:55:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 29162,
                  "id": 29173,
                  "nodeType": "Return",
                  "src": "21075:62:32"
                }
              ]
            },
            "documentation": {
              "id": 29152,
              "nodeType": "StructuredDocumentation",
              "src": "20722:231:32",
              "text": " @notice          Parse an unsigned integer from LE bytes.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The unsigned integer"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexLEUint",
            "parameters": {
              "id": 29159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29154,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29175,
                  "src": "20979:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29153,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "20979:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29156,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 29175,
                  "src": "20996:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20996:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29158,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 29175,
                  "src": "21012:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 29157,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "21012:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20978:47:32"
            },
            "returnParameters": {
              "id": 29162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29161,
                  "mutability": "mutable",
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 29175,
                  "src": "21049:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21049:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21048:16:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29198,
            "nodeType": "FunctionDefinition",
            "src": "21433:159:32",
            "body": {
              "id": 29197,
              "nodeType": "Block",
              "src": "21520:72:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 29190,
                                "name": "memView",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29178,
                                "src": "21563:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              {
                                "id": 29191,
                                "name": "_index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29180,
                                "src": "21572:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "3230",
                                "id": 29192,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21580:2:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_20_by_1",
                                  "typeString": "int_const 20"
                                },
                                "value": "20"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_rational_20_by_1",
                                  "typeString": "int_const 20"
                                }
                              ],
                              "id": 29189,
                              "name": "indexUint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29151,
                              "src": "21553:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$",
                                "typeString": "function (bytes29,uint256,uint8) pure returns (uint256)"
                              }
                            },
                            "id": 29193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21553:30:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 29188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21545:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": {
                            "id": 29187,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "21545:7:32",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21545:39:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 29186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "21537:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 29185,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "21537:7:32",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 29195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21537:48:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 29184,
                  "id": 29196,
                  "nodeType": "Return",
                  "src": "21530:55:32"
                }
              ]
            },
            "documentation": {
              "id": 29176,
              "nodeType": "StructuredDocumentation",
              "src": "21150:278:32",
              "text": " @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\n                  following that index.\n @param memView   The view\n @param _index    The index\n @return          address - The address"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexAddress",
            "parameters": {
              "id": 29181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29178,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29198,
                  "src": "21455:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29177,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "21455:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29180,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 29198,
                  "src": "21472:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29179,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21472:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21454:33:32"
            },
            "returnParameters": {
              "id": 29184,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29183,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29198,
                  "src": "21511:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 29182,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21511:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21510:9:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29220,
            "nodeType": "FunctionDefinition",
            "src": "21799:298:32",
            "body": {
              "id": 29219,
              "nodeType": "Block",
              "src": "21871:226:32",
              "statements": [
                {
                  "assignments": [
                    29207
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29207,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 29219,
                      "src": "21881:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29206,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21881:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29211,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29209,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29201,
                        "src": "21900:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29208,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28813,
                      "src": "21896:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21896:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21881:27:32"
                },
                {
                  "assignments": [
                    29213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29213,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 29219,
                      "src": "21918:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29212,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21918:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29217,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29215,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29201,
                        "src": "21937:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29214,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28863,
                      "src": "21933:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21933:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21918:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "21964:127:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "22050:31:32",
                        "value": {
                          "arguments": [
                            {
                              "name": "_loc",
                              "nodeType": "YulIdentifier",
                              "src": "22070:4:32"
                            },
                            {
                              "name": "_len",
                              "nodeType": "YulIdentifier",
                              "src": "22076:4:32"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nodeType": "YulIdentifier",
                            "src": "22060:9:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22060:21:32"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "22050:6:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29213,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22076:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29207,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22070:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29204,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22050:6:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29218,
                  "nodeType": "InlineAssembly",
                  "src": "21955:136:32"
                }
              ]
            },
            "documentation": {
              "id": 29199,
              "nodeType": "StructuredDocumentation",
              "src": "21598:196:32",
              "text": " @notice          Return the keccak256 hash of the underlying memory\n @param memView   The view\n @return          digest - The keccak256 hash of the underlying memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keccak",
            "parameters": {
              "id": 29202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29201,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29220,
                  "src": "21815:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29200,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "21815:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21814:17:32"
            },
            "returnParameters": {
              "id": 29205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29204,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 29220,
                  "src": "21855:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29203,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "21855:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21854:16:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29242,
            "nodeType": "FunctionDefinition",
            "src": "22365:392:32",
            "body": {
              "id": 29241,
              "nodeType": "Block",
              "src": "22435:322:32",
              "statements": [
                {
                  "assignments": [
                    29229
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29229,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 29241,
                      "src": "22445:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29228,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22445:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29233,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29231,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29223,
                        "src": "22464:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29230,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28813,
                      "src": "22460:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22460:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22445:27:32"
                },
                {
                  "assignments": [
                    29235
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29235,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 29241,
                      "src": "22482:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29234,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22482:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29239,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29237,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29223,
                        "src": "22501:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29236,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28863,
                      "src": "22497:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22497:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22482:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "22528:223:32",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "22614:22:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "22631:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "22625:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22625:11:32"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "22618:3:32",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "22664:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "22664:5:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "22671:1:32",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "22674:4:32"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "22680:4:32"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "22686:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "22691:4:32",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "22653:10:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22653:43:32"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "22649:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22649:48:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "22649:48:32"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "22721:20:32",
                        "value": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "22737:3:32"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "22731:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22731:10:32"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "22721:6:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29235,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22680:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29229,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22674:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29226,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22721:6:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29240,
                  "nodeType": "InlineAssembly",
                  "src": "22519:232:32"
                }
              ]
            },
            "documentation": {
              "id": 29221,
              "nodeType": "StructuredDocumentation",
              "src": "22103:257:32",
              "text": " @notice          Return the sha2 digest of the underlying memory.\n @dev             We explicitly deallocate memory afterwards.\n @param memView   The view\n @return          digest - The sha2 hash of the underlying memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha2",
            "parameters": {
              "id": 29224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29223,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29242,
                  "src": "22379:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29222,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "22379:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22378:17:32"
            },
            "returnParameters": {
              "id": 29227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29226,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 29242,
                  "src": "22419:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29225,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "22419:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22418:16:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29264,
            "nodeType": "FunctionDefinition",
            "src": "22931:503:32",
            "body": {
              "id": 29263,
              "nodeType": "Block",
              "src": "23004:430:32",
              "statements": [
                {
                  "assignments": [
                    29251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29251,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 29263,
                      "src": "23014:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29250,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23014:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29255,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29253,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29245,
                        "src": "23033:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29252,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28813,
                      "src": "23029:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23029:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23014:27:32"
                },
                {
                  "assignments": [
                    29257
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29257,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 29263,
                      "src": "23051:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29256,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23051:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29261,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29259,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29245,
                        "src": "23070:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29258,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28863,
                      "src": "23066:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23066:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23051:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "23097:331:32",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "23183:22:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "23200:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "23194:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23194:11:32"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "23187:3:32",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23233:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23233:5:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23240:1:32",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "23243:4:32"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "23249:4:32"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23255:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23260:4:32",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23222:10:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23222:43:32"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23218:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23218:48:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23218:48:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23302:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23302:5:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23309:1:32",
                                  "type": "",
                                  "value": "3"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23312:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23317:4:32",
                                  "type": "",
                                  "value": "0x20"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23323:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23328:4:32",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23291:10:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23291:42:32"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23287:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23287:47:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23287:47:32"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "23357:30:32",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23377:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23382:3:32",
                                  "type": "",
                                  "value": "0xc"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "23373:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23373:13:32"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "23367:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23367:20:32"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "23357:6:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29257,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23249:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29251,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23243:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29248,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23357:6:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29262,
                  "nodeType": "InlineAssembly",
                  "src": "23088:340:32"
                }
              ]
            },
            "documentation": {
              "id": 29243,
              "nodeType": "StructuredDocumentation",
              "src": "22763:163:32",
              "text": " @notice          Implements bitcoin's hash160 (rmd160(sha2()))\n @param memView   The pre-image\n @return          digest - the Digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hash160",
            "parameters": {
              "id": 29246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29245,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29264,
                  "src": "22948:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29244,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "22948:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22947:17:32"
            },
            "returnParameters": {
              "id": 29249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29248,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 29264,
                  "src": "22988:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 29247,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "22988:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22987:16:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29286,
            "nodeType": "FunctionDefinition",
            "src": "23614:466:32",
            "body": {
              "id": 29285,
              "nodeType": "Block",
              "src": "23687:393:32",
              "statements": [
                {
                  "assignments": [
                    29273
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29273,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 29285,
                      "src": "23697:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29272,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23697:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29277,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29275,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29267,
                        "src": "23716:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29274,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28813,
                      "src": "23712:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23712:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23697:27:32"
                },
                {
                  "assignments": [
                    29279
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29279,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 29285,
                      "src": "23734:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29278,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23734:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29283,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29281,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29267,
                        "src": "23753:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29280,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28863,
                      "src": "23749:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23749:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23734:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "23780:294:32",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "23866:22:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "23883:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "23877:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23877:11:32"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "23870:3:32",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23916:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23916:5:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23923:1:32",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "23926:4:32"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "23932:4:32"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23938:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23943:4:32",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23905:10:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23905:43:32"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23901:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23901:48:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23901:48:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23988:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23988:5:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23995:1:32",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23998:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "24003:4:32",
                                  "type": "",
                                  "value": "0x20"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "24009:3:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "24014:4:32",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23977:10:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23977:42:32"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23973:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23973:47:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23973:47:32"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "24044:20:32",
                        "value": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "24060:3:32"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "24054:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "24054:10:32"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "24044:6:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29279,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23932:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29273,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23926:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29270,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "24044:6:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29284,
                  "nodeType": "InlineAssembly",
                  "src": "23771:303:32"
                }
              ]
            },
            "documentation": {
              "id": 29265,
              "nodeType": "StructuredDocumentation",
              "src": "23440:169:32",
              "text": " @notice          Implements bitcoin's hash256 (double sha2)\n @param memView   A view of the preimage\n @return          digest - the Digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hash256",
            "parameters": {
              "id": 29268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29267,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29286,
                  "src": "23631:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29266,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "23631:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23630:17:32"
            },
            "returnParameters": {
              "id": 29271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29270,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 29286,
                  "src": "23671:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29269,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "23671:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23670:16:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29322,
            "nodeType": "FunctionDefinition",
            "src": "24334:189:32",
            "body": {
              "id": 29321,
              "nodeType": "Block",
              "src": "24414:109:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 29310,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            },
                            "id": 29302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 29297,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29289,
                                  "src": "24436:4:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29296,
                                "name": "loc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28813,
                                "src": "24432:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 29298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24432:9:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 29300,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29291,
                                  "src": "24449:5:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29299,
                                "name": "loc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28813,
                                "src": "24445:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 29301,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24445:10:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "src": "24432:23:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            },
                            "id": 29309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 29304,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29289,
                                  "src": "24463:4:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29303,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28863,
                                "src": "24459:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 29305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24459:9:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 29307,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29291,
                                  "src": "24476:5:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29306,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28863,
                                "src": "24472:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 29308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24472:10:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "src": "24459:23:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "24432:50:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 29311,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24431:52:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 29318,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 29313,
                            "name": "left",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29289,
                            "src": "24494:4:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 29312,
                          "name": "keccak",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29220,
                          "src": "24487:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 29314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24487:12:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 29316,
                            "name": "right",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29291,
                            "src": "24510:5:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 29315,
                          "name": "keccak",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29220,
                          "src": "24503:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 29317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24503:13:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "24487:29:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "24431:85:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29295,
                  "id": 29320,
                  "nodeType": "Return",
                  "src": "24424:92:32"
                }
              ]
            },
            "documentation": {
              "id": 29287,
              "nodeType": "StructuredDocumentation",
              "src": "24086:243:32",
              "text": " @notice          Return true if the underlying memory is equal. Else false.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the underlying memory is equal"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "untypedEqual",
            "parameters": {
              "id": 29292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29289,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 29322,
                  "src": "24356:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29288,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24356:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29291,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 29322,
                  "src": "24370:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29290,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24370:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24355:29:32"
            },
            "returnParameters": {
              "id": 29295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29294,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29322,
                  "src": "24408:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29293,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24408:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24407:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29339,
            "nodeType": "FunctionDefinition",
            "src": "24778:133:32",
            "body": {
              "id": 29338,
              "nodeType": "Block",
              "src": "24861:50:32",
              "statements": [
                {
                  "expression": {
                    "id": 29336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "24878:26:32",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 29333,
                          "name": "left",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29325,
                          "src": "24892:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        {
                          "id": 29334,
                          "name": "right",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29327,
                          "src": "24898:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          },
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 29332,
                        "name": "untypedEqual",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29322,
                        "src": "24879:12:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29,bytes29) pure returns (bool)"
                        }
                      },
                      "id": 29335,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24879:25:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29331,
                  "id": 29337,
                  "nodeType": "Return",
                  "src": "24871:33:32"
                }
              ]
            },
            "documentation": {
              "id": 29323,
              "nodeType": "StructuredDocumentation",
              "src": "24529:244:32",
              "text": " @notice          Return false if the underlying memory is equal. Else true.\n @param left      The first view\n @param right     The second view\n @return          bool - False if the underlying memory is equal"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "untypedNotEqual",
            "parameters": {
              "id": 29328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29325,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 29339,
                  "src": "24803:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29324,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24803:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29327,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 29339,
                  "src": "24817:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29326,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24817:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24802:29:32"
            },
            "returnParameters": {
              "id": 29331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29330,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29339,
                  "src": "24855:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29329,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24855:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24854:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29371,
            "nodeType": "FunctionDefinition",
            "src": "25223:178:32",
            "body": {
              "id": 29370,
              "nodeType": "Block",
              "src": "25296:105:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "id": 29351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 29349,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29342,
                        "src": "25313:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 29350,
                        "name": "right",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29344,
                        "src": "25321:5:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "src": "25313:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 29366,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            },
                            "id": 29358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 29353,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29342,
                                  "src": "25338:4:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29352,
                                "name": "typeOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28776,
                                "src": "25331:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                                  "typeString": "function (bytes29) pure returns (uint40)"
                                }
                              },
                              "id": 29354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25331:12:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 29356,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29344,
                                  "src": "25354:5:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29355,
                                "name": "typeOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28776,
                                "src": "25347:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                                  "typeString": "function (bytes29) pure returns (uint40)"
                                }
                              },
                              "id": 29357,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25347:13:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            "src": "25331:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 29365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 29360,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29342,
                                  "src": "25371:4:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29359,
                                "name": "keccak",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29220,
                                "src": "25364:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes29) pure returns (bytes32)"
                                }
                              },
                              "id": 29361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25364:12:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 29363,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29344,
                                  "src": "25387:5:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 29362,
                                "name": "keccak",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29220,
                                "src": "25380:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes29) pure returns (bytes32)"
                                }
                              },
                              "id": 29364,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25380:13:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "src": "25364:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "25331:62:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 29367,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "25330:64:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "25313:81:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29348,
                  "id": 29369,
                  "nodeType": "Return",
                  "src": "25306:88:32"
                }
              ]
            },
            "documentation": {
              "id": 29340,
              "nodeType": "StructuredDocumentation",
              "src": "24917:301:32",
              "text": " @notice          Compares type equality.\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the types are the same"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equal",
            "parameters": {
              "id": 29345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29342,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 29371,
                  "src": "25238:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29341,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25238:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29344,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 29371,
                  "src": "25252:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29343,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25252:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25237:29:32"
            },
            "returnParameters": {
              "id": 29348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29347,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29371,
                  "src": "25290:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29346,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25290:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25289:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29388,
            "nodeType": "FunctionDefinition",
            "src": "25719:119:32",
            "body": {
              "id": 29387,
              "nodeType": "Block",
              "src": "25795:43:32",
              "statements": [
                {
                  "expression": {
                    "id": 29385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "25812:19:32",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 29382,
                          "name": "left",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29374,
                          "src": "25819:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        {
                          "id": 29383,
                          "name": "right",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29376,
                          "src": "25825:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          },
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 29381,
                        "name": "equal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29371,
                        "src": "25813:5:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29,bytes29) pure returns (bool)"
                        }
                      },
                      "id": 29384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25813:18:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29380,
                  "id": 29386,
                  "nodeType": "Return",
                  "src": "25805:26:32"
                }
              ]
            },
            "documentation": {
              "id": 29372,
              "nodeType": "StructuredDocumentation",
              "src": "25407:307:32",
              "text": " @notice          Compares type inequality.\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the types are not the same"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notEqual",
            "parameters": {
              "id": 29377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29374,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 29388,
                  "src": "25737:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29373,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25737:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29376,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 29388,
                  "src": "25751:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29375,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25751:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25736:29:32"
            },
            "returnParameters": {
              "id": 29380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29379,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29388,
                  "src": "25789:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29378,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25789:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25788:6:32"
            },
            "scope": 29602,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29439,
            "nodeType": "FunctionDefinition",
            "src": "26400:910:32",
            "body": {
              "id": 29438,
              "nodeType": "Block",
              "src": "26495:815:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29400,
                            "name": "memView",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29391,
                            "src": "26521:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 29399,
                          "name": "notNull",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28555,
                          "src": "26513:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                            "typeString": "function (bytes29) pure returns (bool)"
                          }
                        },
                        "id": 29401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26513:16:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54797065644d656d566965772f636f7079546f202d204e756c6c20706f696e746572206465726566",
                        "id": 29402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26531:42:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_efcd06dabd47a0a59b27bbaba0b6773eb50755e41c6b64a127af091bad45512c",
                          "typeString": "literal_string \"TypedMemView/copyTo - Null pointer deref\""
                        },
                        "value": "TypedMemView/copyTo - Null pointer deref"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_efcd06dabd47a0a59b27bbaba0b6773eb50755e41c6b64a127af091bad45512c",
                          "typeString": "literal_string \"TypedMemView/copyTo - Null pointer deref\""
                        }
                      ],
                      "id": 29398,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26505:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 29403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26505:69:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29404,
                  "nodeType": "ExpressionStatement",
                  "src": "26505:69:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29407,
                            "name": "memView",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29391,
                            "src": "26600:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 29406,
                          "name": "isValid",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28580,
                          "src": "26592:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                            "typeString": "function (bytes29) pure returns (bool)"
                          }
                        },
                        "id": 29408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26592:16:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e746572206465726566",
                        "id": 29409,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26610:45:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f41d5ca586b1d56a0f8933b774181f43461390a9a40414a5d943c157df755196",
                          "typeString": "literal_string \"TypedMemView/copyTo - Invalid pointer deref\""
                        },
                        "value": "TypedMemView/copyTo - Invalid pointer deref"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f41d5ca586b1d56a0f8933b774181f43461390a9a40414a5d943c157df755196",
                          "typeString": "literal_string \"TypedMemView/copyTo - Invalid pointer deref\""
                        }
                      ],
                      "id": 29405,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26584:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 29410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26584:72:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29411,
                  "nodeType": "ExpressionStatement",
                  "src": "26584:72:32"
                },
                {
                  "assignments": [
                    29413
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29413,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 29438,
                      "src": "26666:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29412,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26666:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29417,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29415,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29391,
                        "src": "26685:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29414,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28863,
                      "src": "26681:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26681:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26666:27:32"
                },
                {
                  "assignments": [
                    29419
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29419,
                      "mutability": "mutable",
                      "name": "_oldLoc",
                      "nodeType": "VariableDeclaration",
                      "scope": 29438,
                      "src": "26703:15:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29418,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26703:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29423,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29421,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29391,
                        "src": "26725:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29420,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28813,
                      "src": "26721:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26721:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26703:30:32"
                },
                {
                  "assignments": [
                    29425
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29425,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 29438,
                      "src": "26744:11:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29424,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26744:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29426,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26744:11:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "26774:457:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "26860:18:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "26873:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "26867:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "26867:11:32"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "26860:3:32"
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26969:74:32",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26994:4:32",
                                    "type": "",
                                    "value": "0x60"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27000:4:32",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "26987:6:32"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26987:18:32"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26987:18:32"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "26955:3:32"
                            },
                            {
                              "name": "_newLoc",
                              "nodeType": "YulIdentifier",
                              "src": "26960:7:32"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "26952:2:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "26952:16:32"
                        },
                        "nodeType": "YulIf",
                        "src": "26949:2:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "27181:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "27181:5:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "27188:1:32",
                                  "type": "",
                                  "value": "4"
                                },
                                {
                                  "name": "_oldLoc",
                                  "nodeType": "YulIdentifier",
                                  "src": "27191:7:32"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "27200:4:32"
                                },
                                {
                                  "name": "_newLoc",
                                  "nodeType": "YulIdentifier",
                                  "src": "27206:7:32"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "27215:4:32"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "27170:10:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "27170:50:32"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "27166:3:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "27166:55:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "27166:55:32"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29413,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27200:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29413,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27215:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29393,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26960:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29393,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27206:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29419,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27191:7:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29425,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26860:3:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29425,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26955:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29427,
                  "nodeType": "InlineAssembly",
                  "src": "26765:466:32"
                },
                {
                  "expression": {
                    "id": 29436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 29428,
                      "name": "written",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29396,
                      "src": "27241:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 29431,
                              "name": "memView",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29391,
                              "src": "27279:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            ],
                            "id": 29430,
                            "name": "typeOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28776,
                            "src": "27272:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                              "typeString": "function (bytes29) pure returns (uint40)"
                            }
                          },
                          "id": 29432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27272:15:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        {
                          "id": 29433,
                          "name": "_newLoc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29393,
                          "src": "27289:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 29434,
                          "name": "_len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29413,
                          "src": "27298:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 29429,
                        "name": "unsafeBuildUnchecked",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28704,
                        "src": "27251:20:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                        }
                      },
                      "id": 29435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27251:52:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "27241:62:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 29437,
                  "nodeType": "ExpressionStatement",
                  "src": "27241:62:32"
                }
              ]
            },
            "documentation": {
              "id": 29389,
              "nodeType": "StructuredDocumentation",
              "src": "25844:551:32",
              "text": " @notice          Copy the view to a location, return an unsafe memory reference\n @dev             Super Dangerous direct memory access.\n                  This reference can be overwritten if anything else modifies memory (!!!).\n                  As such it MUST be consumed IMMEDIATELY.\n                  This function is private to prevent unsafe usage by callers.\n @param memView   The view\n @param _newLoc   The new location\n @return          written - the unsafe memory reference"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unsafeCopyTo",
            "parameters": {
              "id": 29394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29391,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29439,
                  "src": "26422:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29390,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "26422:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29393,
                  "mutability": "mutable",
                  "name": "_newLoc",
                  "nodeType": "VariableDeclaration",
                  "scope": 29439,
                  "src": "26439:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26439:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26421:34:32"
            },
            "returnParameters": {
              "id": 29397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29396,
                  "mutability": "mutable",
                  "name": "written",
                  "nodeType": "VariableDeclaration",
                  "scope": 29439,
                  "src": "26478:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29395,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "26478:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26477:17:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 29466,
            "nodeType": "FunctionDefinition",
            "src": "27680:614:32",
            "body": {
              "id": 29465,
              "nodeType": "Block",
              "src": "27753:541:32",
              "statements": [
                {
                  "assignments": [
                    29448
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29448,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 29465,
                      "src": "27763:11:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29447,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27763:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29449,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27763:11:32"
                },
                {
                  "assignments": [
                    29451
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29451,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 29465,
                      "src": "27784:12:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29450,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27784:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29455,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29453,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29442,
                        "src": "27803:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29452,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28863,
                      "src": "27799:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27799:12:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27784:27:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "27830:167:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "27916:18:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "27929:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "27923:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "27923:11:32"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "27916:3:32"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "27977:10:32",
                        "value": {
                          "name": "ptr",
                          "nodeType": "YulIdentifier",
                          "src": "27984:3:32"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "27977:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29448,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27916:3:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29448,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27984:3:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29445,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27977:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29456,
                  "nodeType": "InlineAssembly",
                  "src": "27821:176:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29458,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29442,
                        "src": "28019:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 29461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 29459,
                          "name": "ptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29448,
                          "src": "28028:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "30783230",
                          "id": 29460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "28034:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "0x20"
                        },
                        "src": "28028:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29457,
                      "name": "unsafeCopyTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29439,
                      "src": "28006:12:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes29_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256) view returns (bytes29)"
                      }
                    },
                    "id": 29462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28006:33:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 29463,
                  "nodeType": "ExpressionStatement",
                  "src": "28006:33:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "28058:230:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "28151:4:32",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "28165:3:32"
                                    },
                                    {
                                      "name": "_len",
                                      "nodeType": "YulIdentifier",
                                      "src": "28170:4:32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "28161:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "28161:14:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "28177:4:32",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "28157:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "28157:25:32"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "28144:6:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "28144:39:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "28144:39:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "28231:3:32"
                            },
                            {
                              "name": "_len",
                              "nodeType": "YulIdentifier",
                              "src": "28236:4:32"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "28224:6:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "28224:17:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "28224:17:32"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29451,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28170:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29451,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28236:4:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29448,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28165:3:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29448,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28231:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29464,
                  "nodeType": "InlineAssembly",
                  "src": "28049:239:32"
                }
              ]
            },
            "documentation": {
              "id": 29440,
              "nodeType": "StructuredDocumentation",
              "src": "27316:359:32",
              "text": " @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\n                  the new memory\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param memView   The view\n @return          ret - The view pointing to the new memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "clone",
            "parameters": {
              "id": 29443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29442,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29466,
                  "src": "27695:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29441,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "27695:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27694:17:32"
            },
            "returnParameters": {
              "id": 29446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29445,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 29466,
                  "src": "27735:16:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 29444,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "27735:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27734:18:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29523,
            "nodeType": "FunctionDefinition",
            "src": "28842:717:32",
            "body": {
              "id": 29522,
              "nodeType": "Block",
              "src": "28950:609:32",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "28969:285:32",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "29055:22:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "29072:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "29066:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "29066:11:32"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "29059:3:32",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29170:74:32",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29195:4:32",
                                    "type": "",
                                    "value": "0x60"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29201:4:32",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "29188:6:32"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29188:18:32"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29188:18:32"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "29154:3:32"
                            },
                            {
                              "name": "_location",
                              "nodeType": "YulIdentifier",
                              "src": "29159:9:32"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "29151:2:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "29151:18:32"
                        },
                        "nodeType": "YulIf",
                        "src": "29148:2:32"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29472,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "29159:9:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29477,
                  "nodeType": "InlineAssembly",
                  "src": "28960:294:32"
                },
                {
                  "assignments": [
                    29479
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29479,
                      "mutability": "mutable",
                      "name": "_offset",
                      "nodeType": "VariableDeclaration",
                      "scope": 29522,
                      "src": "29264:15:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29478,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29264:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29481,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 29480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "29282:1:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29264:19:32"
                },
                {
                  "body": {
                    "id": 29512,
                    "nodeType": "Block",
                    "src": "29340:147:32",
                    "statements": [
                      {
                        "assignments": [
                          29494
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 29494,
                            "mutability": "mutable",
                            "name": "memView",
                            "nodeType": "VariableDeclaration",
                            "scope": 29512,
                            "src": "29354:15:32",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            },
                            "typeName": {
                              "id": 29493,
                              "name": "bytes29",
                              "nodeType": "ElementaryTypeName",
                              "src": "29354:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 29498,
                        "initialValue": {
                          "baseExpression": {
                            "id": 29495,
                            "name": "memViews",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29470,
                            "src": "29372:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            }
                          },
                          "id": 29497,
                          "indexExpression": {
                            "id": 29496,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29483,
                            "src": "29381:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29372:11:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29354:29:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 29500,
                              "name": "memView",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29494,
                              "src": "29410:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 29503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 29501,
                                "name": "_location",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29472,
                                "src": "29419:9:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 29502,
                                "name": "_offset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29479,
                                "src": "29431:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "29419:19:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 29499,
                            "name": "unsafeCopyTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29439,
                            "src": "29397:12:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes29_$_t_uint256_$returns$_t_bytes29_$",
                              "typeString": "function (bytes29,uint256) view returns (bytes29)"
                            }
                          },
                          "id": 29504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29397:42:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "id": 29505,
                        "nodeType": "ExpressionStatement",
                        "src": "29397:42:32"
                      },
                      {
                        "expression": {
                          "id": 29510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 29506,
                            "name": "_offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29479,
                            "src": "29453:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 29508,
                                "name": "memView",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29494,
                                "src": "29468:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              ],
                              "id": 29507,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28863,
                              "src": "29464:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                "typeString": "function (bytes29) pure returns (uint96)"
                              }
                            },
                            "id": 29509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29464:12:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "29453:23:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 29511,
                        "nodeType": "ExpressionStatement",
                        "src": "29453:23:32"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 29486,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29483,
                      "src": "29313:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 29487,
                        "name": "memViews",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29470,
                        "src": "29317:8:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      },
                      "id": 29488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "29317:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29313:19:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 29513,
                  "initializationExpression": {
                    "assignments": [
                      29483
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 29483,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 29513,
                        "src": "29298:9:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 29482,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29298:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 29485,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 29484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29310:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "29298:13:32"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 29491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "29334:4:32",
                      "subExpression": {
                        "id": 29490,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29483,
                        "src": "29334:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 29492,
                    "nodeType": "ExpressionStatement",
                    "src": "29334:4:32"
                  },
                  "nodeType": "ForStatement",
                  "src": "29293:194:32"
                },
                {
                  "expression": {
                    "id": 29520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 29514,
                      "name": "unsafeView",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29475,
                      "src": "29496:10:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 29516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29530:1:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        {
                          "id": 29517,
                          "name": "_location",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29472,
                          "src": "29533:9:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 29518,
                          "name": "_offset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29479,
                          "src": "29544:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 29515,
                        "name": "unsafeBuildUnchecked",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28704,
                        "src": "29509:20:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                        }
                      },
                      "id": 29519,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29509:43:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "29496:56:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 29521,
                  "nodeType": "ExpressionStatement",
                  "src": "29496:56:32"
                }
              ]
            },
            "documentation": {
              "id": 29467,
              "nodeType": "StructuredDocumentation",
              "src": "28300:537:32",
              "text": " @notice          Join the views in memory, return an unsafe reference to the memory.\n @dev             Super Dangerous direct memory access.\n                  This reference can be overwritten if anything else modifies memory (!!!).\n                  As such it MUST be consumed IMMEDIATELY.\n                  This function is private to prevent unsafe usage by callers.\n @param memViews  The views\n @return          unsafeView - The conjoined view pointing to the new memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unsafeJoin",
            "parameters": {
              "id": 29473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29470,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 29523,
                  "src": "28862:25:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29468,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "28862:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 29469,
                    "nodeType": "ArrayTypeName",
                    "src": "28862:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29472,
                  "mutability": "mutable",
                  "name": "_location",
                  "nodeType": "VariableDeclaration",
                  "scope": 29523,
                  "src": "28889:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29471,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28889:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28861:46:32"
            },
            "returnParameters": {
              "id": 29476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29475,
                  "mutability": "mutable",
                  "name": "unsafeView",
                  "nodeType": "VariableDeclaration",
                  "scope": 29523,
                  "src": "28930:18:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29474,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "28930:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28929:20:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 29544,
            "nodeType": "FunctionDefinition",
            "src": "29771:319:32",
            "body": {
              "id": 29543,
              "nodeType": "Block",
              "src": "29850:240:32",
              "statements": [
                {
                  "assignments": [
                    29533
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29533,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 29543,
                      "src": "29860:11:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29532,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29860:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29534,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29860:11:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "29890:144:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "29976:18:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "29989:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "29983:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "29983:11:32"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "29976:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29533,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "29976:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29535,
                  "nodeType": "InlineAssembly",
                  "src": "29881:153:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29538,
                            "name": "memViews",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29527,
                            "src": "30068:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            }
                          },
                          {
                            "id": 29539,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29533,
                            "src": "30078:3:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 29537,
                          "name": "unsafeJoin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29523,
                          "src": "30057:10:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$",
                            "typeString": "function (bytes29[] memory,uint256) view returns (bytes29)"
                          }
                        },
                        "id": 29540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30057:25:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29536,
                      "name": "keccak",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29220,
                      "src": "30050:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                        "typeString": "function (bytes29) pure returns (bytes32)"
                      }
                    },
                    "id": 29541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30050:33:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 29531,
                  "id": 29542,
                  "nodeType": "Return",
                  "src": "30043:40:32"
                }
              ]
            },
            "documentation": {
              "id": 29524,
              "nodeType": "StructuredDocumentation",
              "src": "29565:201:32",
              "text": " @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\n @param memViews  The views\n @return          bytes32 - The keccak256 digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "joinKeccak",
            "parameters": {
              "id": 29528,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29527,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 29544,
                  "src": "29791:25:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29525,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "29791:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 29526,
                    "nodeType": "ArrayTypeName",
                    "src": "29791:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29790:27:32"
            },
            "returnParameters": {
              "id": 29531,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29530,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29544,
                  "src": "29841:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29529,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "29841:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29840:9:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29565,
            "nodeType": "FunctionDefinition",
            "src": "30296:315:32",
            "body": {
              "id": 29564,
              "nodeType": "Block",
              "src": "30373:238:32",
              "statements": [
                {
                  "assignments": [
                    29554
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29554,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 29564,
                      "src": "30383:11:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29553,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30383:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29555,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30383:11:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "30413:144:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "30499:18:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "30512:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "30506:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "30506:11:32"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "30499:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29554,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "30499:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29556,
                  "nodeType": "InlineAssembly",
                  "src": "30404:153:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29559,
                            "name": "memViews",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29548,
                            "src": "30589:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            }
                          },
                          {
                            "id": 29560,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29554,
                            "src": "30599:3:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 29558,
                          "name": "unsafeJoin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29523,
                          "src": "30578:10:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$",
                            "typeString": "function (bytes29[] memory,uint256) view returns (bytes29)"
                          }
                        },
                        "id": 29561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30578:25:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29557,
                      "name": "sha2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29242,
                      "src": "30573:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes29_$returns$_t_bytes32_$",
                        "typeString": "function (bytes29) view returns (bytes32)"
                      }
                    },
                    "id": 29562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30573:31:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 29552,
                  "id": 29563,
                  "nodeType": "Return",
                  "src": "30566:38:32"
                }
              ]
            },
            "documentation": {
              "id": 29545,
              "nodeType": "StructuredDocumentation",
              "src": "30096:195:32",
              "text": " @notice          Produce the sha256 digest of the concatenated contents of multiple views.\n @param memViews  The views\n @return          bytes32 - The sha256 digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "joinSha2",
            "parameters": {
              "id": 29549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29548,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 29565,
                  "src": "30314:25:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29546,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "30314:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 29547,
                    "nodeType": "ArrayTypeName",
                    "src": "30314:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30313:27:32"
            },
            "returnParameters": {
              "id": 29552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29551,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29565,
                  "src": "30364:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29550,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "30364:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30363:9:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29601,
            "nodeType": "FunctionDefinition",
            "src": "30791:744:32",
            "body": {
              "id": 29600,
              "nodeType": "Block",
              "src": "30873:662:32",
              "statements": [
                {
                  "assignments": [
                    29575
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29575,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 29600,
                      "src": "30883:11:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29574,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30883:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29576,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30883:11:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "30913:144:32",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "30999:18:32",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "31012:4:32",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "31006:5:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "31006:11:32"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "30999:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29575,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "30999:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29577,
                  "nodeType": "InlineAssembly",
                  "src": "30904:153:32"
                },
                {
                  "assignments": [
                    29579
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29579,
                      "mutability": "mutable",
                      "name": "_newView",
                      "nodeType": "VariableDeclaration",
                      "scope": 29600,
                      "src": "31067:16:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 29578,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "31067:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29586,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29581,
                        "name": "memViews",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29569,
                        "src": "31097:8:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 29584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 29582,
                          "name": "ptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29575,
                          "src": "31107:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "30783230",
                          "id": 29583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31113:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "0x20"
                        },
                        "src": "31107:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29580,
                      "name": "unsafeJoin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29523,
                      "src": "31086:10:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29[] memory,uint256) view returns (bytes29)"
                      }
                    },
                    "id": 29585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31086:32:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31067:51:32"
                },
                {
                  "assignments": [
                    29588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29588,
                      "mutability": "mutable",
                      "name": "_written",
                      "nodeType": "VariableDeclaration",
                      "scope": 29600,
                      "src": "31128:16:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29587,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31128:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29592,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29590,
                        "name": "_newView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29579,
                        "src": "31151:8:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29589,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28863,
                      "src": "31147:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31147:13:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31128:32:32"
                },
                {
                  "assignments": [
                    29594
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29594,
                      "mutability": "mutable",
                      "name": "_footprint",
                      "nodeType": "VariableDeclaration",
                      "scope": 29600,
                      "src": "31170:18:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29593,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31170:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29598,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 29596,
                        "name": "_newView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29579,
                        "src": "31201:8:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 29595,
                      "name": "footprint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28849,
                      "src": "31191:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                        "typeString": "function (bytes29) pure returns (uint256)"
                      }
                    },
                    "id": 29597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31191:19:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31170:40:32"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "31230:299:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "31355:3:32"
                            },
                            {
                              "name": "_written",
                              "nodeType": "YulIdentifier",
                              "src": "31360:8:32"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "31348:6:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "31348:21:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "31348:21:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "31458:4:32",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "31472:3:32"
                                    },
                                    {
                                      "name": "_footprint",
                                      "nodeType": "YulIdentifier",
                                      "src": "31477:10:32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "31468:3:32"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "31468:20:32"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "31490:4:32",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "31464:3:32"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "31464:31:32"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "31451:6:32"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "31451:45:32"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "31451:45:32"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "31509:10:32",
                        "value": {
                          "name": "ptr",
                          "nodeType": "YulIdentifier",
                          "src": "31516:3:32"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "31509:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 29594,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31477:10:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29588,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31360:8:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29575,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31355:3:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29575,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31472:3:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29575,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31516:3:32",
                      "valueSize": 1
                    },
                    {
                      "declaration": 29572,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31509:3:32",
                      "valueSize": 1
                    }
                  ],
                  "id": 29599,
                  "nodeType": "InlineAssembly",
                  "src": "31221:308:32"
                }
              ]
            },
            "documentation": {
              "id": 29566,
              "nodeType": "StructuredDocumentation",
              "src": "30617:169:32",
              "text": " @notice          copies all views, joins them into a new bytearray.\n @param memViews  The views\n @return          ret - The new byte array"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "join",
            "parameters": {
              "id": 29570,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29569,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 29601,
                  "src": "30805:25:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29567,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "30805:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 29568,
                    "nodeType": "ArrayTypeName",
                    "src": "30805:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30804:27:32"
            },
            "returnParameters": {
              "id": 29573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29572,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 29601,
                  "src": "30855:16:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 29571,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "30855:5:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30854:18:32"
            },
            "scope": 29602,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          29602
        ],
        "name": "TypedMemView",
        "scope": 29603
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 32
}