beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(, null, null)
      handleNoType()
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          beginPattern(()
            beginPattern(()
              handleNoType(a1)
              handleDeclaredVariablePattern(null, a1, false)
            endPattern(a1)
            handlePatternField(null)
            handleRecordPattern((, 1)
          endPattern())
          handlePatternField(null)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          beginParenthesizedExpressionOrRecordLiteral(()
            handleLiteralInt(1)
            handleUnaryPrefixExpression(-)
          endRecordLiteral((, 1, null)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a2)
              handleDeclaredVariablePattern(null, a2, false)
            endPattern(a2)
            handlePatternField(:)
            handleRecordPattern((, 1)
          endPattern())
          handlePatternField(:)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(x, namedRecordFieldReference)
            handleLiteralInt(42)
            handleNamedRecordField(:)
          endRecordLiteral((, 1, null)
          handleNamedRecordField(:)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a3)
              handleDeclaredVariablePattern(null, a3, false)
            endPattern(a3)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(b3)
              handleDeclaredVariablePattern(null, b3, false)
            endPattern(b3)
            handlePatternField(null)
            handleRecordPattern((, 2)
          endPattern())
          handlePatternField(:)
          beginPattern(,)
            handleIdentifier(y, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(c3)
              handleDeclaredVariablePattern(null, c3, false)
            endPattern(c3)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(d3)
              handleDeclaredVariablePattern(null, d3, false)
            endPattern(d3)
            handlePatternField(null)
            handleRecordPattern((, 2)
          endPattern())
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(x, namedRecordFieldReference)
            handleLiteralInt(42)
            handleNamedRecordField(:)
            handleLiteralInt(1)
            handleUnaryPrefixExpression(-)
          endRecordLiteral((, 2, null)
          handleNamedRecordField(:)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(y, namedRecordFieldReference)
            handleLiteralInt(1)
            handleNamedRecordField(:)
            handleLiteralInt(0)
          endRecordLiteral((, 2, null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginPattern(final)
          beginPattern(()
            beginPattern(()
              handleNoType(a4)
              handleDeclaredVariablePattern(null, a4, false)
            endPattern(a4)
            handlePatternField(null)
            handleRecordPattern((, 1)
          endPattern())
          handlePatternField(null)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          beginParenthesizedExpressionOrRecordLiteral(()
            handleLiteralInt(1)
            handleUnaryPrefixExpression(-)
          endRecordLiteral((, 1, null)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(final, =, ;)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginPattern(final)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a5)
              handleDeclaredVariablePattern(null, a5, false)
            endPattern(a5)
            handlePatternField(:)
            handleRecordPattern((, 1)
          endPattern())
          handlePatternField(:)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(x, namedRecordFieldReference)
            handleLiteralInt(42)
            handleNamedRecordField(:)
          endRecordLiteral((, 1, null)
          handleNamedRecordField(:)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(final, =, ;)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginPattern(final)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a6)
              handleDeclaredVariablePattern(null, a6, false)
            endPattern(a6)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(b6)
              handleDeclaredVariablePattern(null, b6, false)
            endPattern(b6)
            handlePatternField(null)
            handleRecordPattern((, 2)
          endPattern())
          handlePatternField(:)
          beginPattern(,)
            handleIdentifier(y, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(c6)
              handleDeclaredVariablePattern(null, c6, false)
            endPattern(c6)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(d6)
              handleDeclaredVariablePattern(null, d6, false)
            endPattern(d6)
            handlePatternField(null)
            handleRecordPattern((, 2)
          endPattern())
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(x, namedRecordFieldReference)
            handleLiteralInt(42)
            handleNamedRecordField(:)
            handleLiteralInt(1)
            handleUnaryPrefixExpression(-)
          endRecordLiteral((, 2, null)
          handleNamedRecordField(:)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(y, namedRecordFieldReference)
            handleLiteralInt(1)
            handleNamedRecordField(:)
            handleLiteralInt(0)
          endRecordLiteral((, 2, null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(final, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          beginPattern(()
            beginPattern(()
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a7)
              handleType(int, null)
              handleDeclaredVariablePattern(null, a7, false)
            endPattern(a7)
            handlePatternField(null)
            handleRecordPattern((, 1)
          endPattern())
          handlePatternField(null)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          beginParenthesizedExpressionOrRecordLiteral(()
            handleLiteralInt(1)
            handleUnaryPrefixExpression(-)
          endRecordLiteral((, 1, null)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a8)
              handleType(int, null)
              handleDeclaredVariablePattern(null, a8, false)
            endPattern(a8)
            handlePatternField(:)
            handleRecordPattern((, 1)
          endPattern())
          handlePatternField(:)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(x, namedRecordFieldReference)
            handleLiteralInt(42)
            handleNamedRecordField(:)
          endRecordLiteral((, 1, null)
          handleNamedRecordField(:)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, a9, false)
            endPattern(a9)
            handlePatternField(:)
            beginPattern(,)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(b9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, b9, false)
            endPattern(b9)
            handlePatternField(null)
            handleRecordPattern((, 2)
          endPattern())
          handlePatternField(:)
          beginPattern(,)
            handleIdentifier(y, namedRecordFieldReference)
            beginPattern(:)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(c9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, c9, false)
            endPattern(c9)
            handlePatternField(:)
            beginPattern(,)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(d9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, d9, false)
            endPattern(d9)
            handlePatternField(null)
            handleRecordPattern((, 2)
          endPattern())
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(x, namedRecordFieldReference)
            handleLiteralInt(42)
            handleNamedRecordField(:)
            handleLiteralInt(1)
            handleUnaryPrefixExpression(-)
          endRecordLiteral((, 2, null)
          handleNamedRecordField(:)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(y, namedRecordFieldReference)
            handleLiteralInt(1)
            handleNamedRecordField(:)
            handleLiteralInt(0)
          endRecordLiteral((, 2, null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            beginRecordType(()
              beginRecordTypeEntry()
                beginMetadataStar(int)
                endMetadataStar(0)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(,)
                handleType(int, null)
                handleNoName(,)
              endRecordTypeEntry()
              beginRecordTypeNamedFields({)
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(x)
                  handleType(int, null)
                  handleIdentifier(x, recordFieldDeclaration)
                endRecordTypeEntry()
              endRecordTypeNamedFields(1, {)
            endRecordType((, null, 2, true)
            handleDeclaredVariablePattern(null, a10, false)
          endPattern(a10)
          handlePatternField(:)
          beginPattern(,)
            beginRecordType(()
              beginRecordTypeEntry()
                beginMetadataStar(int)
                endMetadataStar(0)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(z)
                handleType(int, null)
                handleIdentifier(z, recordFieldDeclaration)
              endRecordTypeEntry()
              beginRecordTypeNamedFields({)
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(y)
                  handleType(int, null)
                  handleIdentifier(y, recordFieldDeclaration)
                endRecordTypeEntry()
              endRecordTypeNamedFields(1, {)
            endRecordType((, null, 2, true)
            handleDeclaredVariablePattern(null, b10, false)
          endPattern(b10)
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(x, namedRecordFieldReference)
            handleLiteralInt(42)
            handleNamedRecordField(:)
            handleLiteralInt(1)
            handleUnaryPrefixExpression(-)
          endRecordLiteral((, 2, null)
          handleNamedRecordField(:)
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(y, namedRecordFieldReference)
            handleLiteralInt(1)
            handleNamedRecordField(:)
            handleLiteralInt(0)
          endRecordLiteral((, 2, null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          beginPattern(()
            beginPattern(()
              handleNoType(a1)
              handleDeclaredVariablePattern(null, a1, false)
            endPattern(a1)
            handlePatternField(null)
            handleRecordPattern((, 1)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(null)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleLiteralNull(null)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a2)
              handleDeclaredVariablePattern(null, a2, false)
            endPattern(a2)
            handlePatternField(:)
            handleRecordPattern((, 1)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(:)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          handleLiteralNull(null)
          handleNamedRecordField(:)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a3)
              handleDeclaredVariablePattern(null, a3, false)
            endPattern(a3)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(b3)
              handleDeclaredVariablePattern(null, b3, false)
            endPattern(b3)
            handlePatternField(null)
            handleRecordPattern((, 2)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(:)
          beginPattern(,)
            handleIdentifier(y, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(c3)
              handleDeclaredVariablePattern(null, c3, false)
            endPattern(c3)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(d3)
              handleDeclaredVariablePattern(null, d3, false)
            endPattern(d3)
            handlePatternField(null)
            handleRecordPattern((, 2)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          handleLiteralNull(null)
          handleNamedRecordField(:)
          handleLiteralNull(null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginPattern(final)
          beginPattern(()
            beginPattern(()
              handleNoType(a4)
              handleDeclaredVariablePattern(null, a4, false)
            endPattern(a4)
            handlePatternField(null)
            handleRecordPattern((, 1)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(null)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleLiteralNull(null)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(final, =, ;)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginPattern(final)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a5)
              handleDeclaredVariablePattern(null, a5, false)
            endPattern(a5)
            handlePatternField(:)
            handleRecordPattern((, 1)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(:)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          handleLiteralNull(null)
          handleNamedRecordField(:)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(final, =, ;)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginPattern(final)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(a6)
              handleDeclaredVariablePattern(null, a6, false)
            endPattern(a6)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(b6)
              handleDeclaredVariablePattern(null, b6, false)
            endPattern(b6)
            handlePatternField(null)
            handleRecordPattern((, 2)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(:)
          beginPattern(,)
            handleIdentifier(y, namedRecordFieldReference)
            beginPattern(:)
              handleNoType(c6)
              handleDeclaredVariablePattern(null, c6, false)
            endPattern(c6)
            handlePatternField(:)
            beginPattern(,)
              handleNoType(d6)
              handleDeclaredVariablePattern(null, d6, false)
            endPattern(d6)
            handlePatternField(null)
            handleRecordPattern((, 2)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          handleLiteralNull(null)
          handleNamedRecordField(:)
          handleLiteralNull(null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(final, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          beginPattern(()
            beginPattern(()
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a7)
              handleType(int, null)
              handleDeclaredVariablePattern(null, a7, false)
            endPattern(a7)
            handlePatternField(null)
            handleRecordPattern((, 1)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(null)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleLiteralNull(null)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a8)
              handleType(int, null)
              handleDeclaredVariablePattern(null, a8, false)
            endPattern(a8)
            handlePatternField(:)
            handleRecordPattern((, 1)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(:)
          handleRecordPattern((, 1)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          handleLiteralNull(null)
          handleNamedRecordField(:)
        endRecordLiteral((, 1, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            handleIdentifier(x, namedRecordFieldReference)
            beginPattern(:)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, a9, false)
            endPattern(a9)
            handlePatternField(:)
            beginPattern(,)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(b9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, b9, false)
            endPattern(b9)
            handlePatternField(null)
            handleRecordPattern((, 2)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(:)
          beginPattern(,)
            handleIdentifier(y, namedRecordFieldReference)
            beginPattern(:)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(c9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, c9, false)
            endPattern(c9)
            handlePatternField(:)
            beginPattern(,)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(d9)
              handleType(int, null)
              handleDeclaredVariablePattern(null, d9, false)
            endPattern(d9)
            handlePatternField(null)
            handleRecordPattern((, 2)
            handleNullCheckPattern(?)
          endPattern(?)
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          handleLiteralNull(null)
          handleNamedRecordField(:)
          handleLiteralNull(null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        beginPattern(var)
          handleIdentifier(n, namedRecordFieldReference)
          beginPattern(:)
            beginRecordType(()
              beginRecordTypeEntry()
                beginMetadataStar(int)
                endMetadataStar(0)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(,)
                handleType(int, null)
                handleNoName(,)
              endRecordTypeEntry()
              beginRecordTypeNamedFields({)
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(x)
                  handleType(int, null)
                  handleIdentifier(x, recordFieldDeclaration)
                endRecordTypeEntry()
              endRecordTypeNamedFields(1, {)
            endRecordType((, ?, 2, true)
            handleDeclaredVariablePattern(null, a10, false)
          endPattern(a10)
          handlePatternField(:)
          beginPattern(,)
            beginRecordType(()
              beginRecordTypeEntry()
                beginMetadataStar(int)
                endMetadataStar(0)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(z)
                handleType(int, null)
                handleIdentifier(z, recordFieldDeclaration)
              endRecordTypeEntry()
              beginRecordTypeNamedFields({)
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(y)
                  handleType(int, null)
                  handleIdentifier(y, recordFieldDeclaration)
                endRecordTypeEntry()
              endRecordTypeNamedFields(1, {)
            endRecordType((, ?, 2, true)
            handleDeclaredVariablePattern(null, b10, false)
          endPattern(b10)
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(n, namedRecordFieldReference)
          handleLiteralNull(null)
          handleNamedRecordField(:)
          handleLiteralNull(null)
        endRecordLiteral((, 2, null)
        handlePatternVariableDeclarationStatement(var, =, ;)
      endBlockFunctionBody(20, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
