beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(, null)
      handleNoType()
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(List)
        endMetadataStar(0)
        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(List, typeReference)
          beginTypeArguments(<)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(>)
            handleType(int, null)
          endTypeArguments(1, <, >)
          handleType(List, ?)
          handleIdentifier(a, formalParameterDeclaration)
          handleFormalParameterWithoutValue(,)
        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
        beginMetadataStar(bool)
        endMetadataStar(0)
        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(bool, typeReference)
          handleNoTypeArguments(?)
          handleType(bool, ?)
          handleIdentifier(b, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(a, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(a, !)
        handleNonNullAssertExpression(!)
        handleLiteralInt(0)
        handleIndexedExpression(null, [, ])
        handleExpressionStatement(;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(?)
        handleNoArguments(?)
        handleSend(a, ?)
        handleLiteralInt(0)
        handleIndexedExpression(?, [, ])
        handleExpressionStatement(;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(a, !)
        handleNonNullAssertExpression(!)
        handleLiteralInt(0)
        handleIndexedExpression(?, [, ])
        handleExpressionStatement(;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(a, !)
        handleNonNullAssertExpression(!)
        handleParenthesizedExpression(()
        handleLiteralInt(0)
        handleIndexedExpression(?, [, ])
        handleExpressionStatement(;)
        handleIdentifier(b, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(b, !)
        handleNonNullAssertExpression(!)
        beginConditionalExpression(?)
          handleNoTypeArguments([)
          handleLiteralInt(0)
          handleLiteralList(1, [, null, ])
          handleConditionalExpressionColon()
          handleLiteralInt(0)
        endConditionalExpression(?, :)
        handleExpressionStatement(;)
        handleIdentifier(b, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(b, !)
        handleNonNullAssertExpression(!)
        handleParenthesizedExpression(()
        beginConditionalExpression(?)
          handleNoTypeArguments([)
          handleLiteralInt(0)
          handleLiteralList(1, [, null, ])
          handleConditionalExpressionColon()
          handleLiteralInt(0)
        endConditionalExpression(?, :)
        handleExpressionStatement(;)
      endBlockFunctionBody(6, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
