beginCompilationUnit(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(E1, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(T)
        endMetadataStar(0)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(E2, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(T)
        endMetadataStar(0)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(num, 1)
          handleIdentifier(num, typeReference)
          handleNoTypeArguments(>)
          handleType(num, null)
        endTypeVariable(>, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(E3, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(T)
        endMetadataStar(0)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          beginMetadataStar(S)
          endMetadataStar(0)
          handleIdentifier(S, typeVariableDeclaration)
          beginTypeVariable(S)
            handleTypeVariablesDefined(S, 2)
            handleNoType(S)
          endTypeVariable(>, 1, null, null)
          handleNoType(T)
        endTypeVariable(,, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(E4, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(T)
        endMetadataStar(0)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          beginMetadataStar(S)
          endMetadataStar(0)
          handleIdentifier(S, typeVariableDeclaration)
          beginTypeVariable(S)
            handleTypeVariablesDefined(num, 2)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(>)
            handleType(num, null)
          endTypeVariable(>, 1, extends, null)
          handleIdentifier(num, typeReference)
          handleNoTypeArguments(,)
          handleType(num, null)
        endTypeVariable(,, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(E5, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(T)
        endMetadataStar(0)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          beginMetadataStar(S)
          endMetadataStar(0)
          handleIdentifier(S, typeVariableDeclaration)
          beginTypeVariable(S)
            handleTypeVariablesDefined(num, 2)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(>)
            handleType(num, null)
          endTypeVariable(>, 1, extends, null)
          handleIdentifier(S, typeReference)
          handleNoTypeArguments(,)
          handleType(S, null)
        endTypeVariable(,, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(E6, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(T)
        endMetadataStar(0)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          beginMetadataStar(S)
          endMetadataStar(0)
          handleIdentifier(S, typeVariableDeclaration)
          beginTypeVariable(S)
            handleTypeVariablesDefined(T, 2)
            handleIdentifier(T, typeReference)
            handleNoTypeArguments(>)
            handleType(T, null)
          endTypeVariable(>, 1, extends, null)
          handleIdentifier(num, typeReference)
          handleNoTypeArguments(,)
          handleType(num, null)
        endTypeVariable(,, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(F1, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            handleTypeVariablesDefined(T, 1)
            handleNoType(T)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(F2, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            handleTypeVariablesDefined(num, 1)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(>)
            handleType(num, null)
          endTypeVariable(>, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(F3, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(S, 2)
              handleNoType(S)
            endTypeVariable(>, 1, null, null)
            handleNoType(T)
          endTypeVariable(,, 0, null, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(F4, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(num, 2)
              handleIdentifier(num, typeReference)
              handleNoTypeArguments(>)
              handleType(num, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(,)
            handleType(num, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(F5, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(num, 2)
              handleIdentifier(num, typeReference)
              handleNoTypeArguments(>)
              handleType(num, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(S, typeReference)
            handleNoTypeArguments(,)
            handleType(S, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(F6, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(T, 2)
              handleIdentifier(T, typeReference)
              handleNoTypeArguments(>)
              handleType(T, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(,)
            handleType(num, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(G1, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(X)
        endMetadataStar(0)
        handleIdentifier(X, typeVariableDeclaration)
        beginTypeVariable(X)
          handleTypeVariablesDefined(X, 1)
          handleNoType(X)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            handleTypeVariablesDefined(X, 1)
            handleIdentifier(X, typeReference)
            handleNoTypeArguments(>)
            handleType(X, null)
          endTypeVariable(>, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(G2, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(X)
        endMetadataStar(0)
        handleIdentifier(X, typeVariableDeclaration)
        beginTypeVariable(X)
          handleTypeVariablesDefined(num, 1)
          handleIdentifier(num, typeReference)
          handleNoTypeArguments(>)
          handleType(num, null)
        endTypeVariable(>, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            handleTypeVariablesDefined(X, 1)
            handleIdentifier(X, typeReference)
            handleNoTypeArguments(>)
            handleType(X, null)
          endTypeVariable(>, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(G3, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(X)
        endMetadataStar(0)
        handleIdentifier(X, typeVariableDeclaration)
        beginTypeVariable(X)
          beginMetadataStar(Y)
          endMetadataStar(0)
          handleIdentifier(Y, typeVariableDeclaration)
          beginTypeVariable(Y)
            handleTypeVariablesDefined(Y, 2)
            handleNoType(Y)
          endTypeVariable(>, 1, null, null)
          handleNoType(X)
        endTypeVariable(,, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(Y, 2)
              handleIdentifier(Y, typeReference)
              handleNoTypeArguments(>)
              handleType(Y, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(X, typeReference)
            handleNoTypeArguments(,)
            handleType(X, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(G4, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(X)
        endMetadataStar(0)
        handleIdentifier(X, typeVariableDeclaration)
        beginTypeVariable(X)
          beginMetadataStar(Y)
          endMetadataStar(0)
          handleIdentifier(Y, typeVariableDeclaration)
          beginTypeVariable(Y)
            handleTypeVariablesDefined(num, 2)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(>)
            handleType(num, null)
          endTypeVariable(>, 1, extends, null)
          handleIdentifier(num, typeReference)
          handleNoTypeArguments(,)
          handleType(num, null)
        endTypeVariable(,, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(Y, 2)
              handleIdentifier(Y, typeReference)
              handleNoTypeArguments(>)
              handleType(Y, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(X, typeReference)
            handleNoTypeArguments(,)
            handleType(X, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(G5, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(X)
        endMetadataStar(0)
        handleIdentifier(X, typeVariableDeclaration)
        beginTypeVariable(X)
          handleTypeVariablesDefined(num, 1)
          handleIdentifier(num, typeReference)
          handleNoTypeArguments(>)
          handleType(num, null)
        endTypeVariable(>, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(X, 2)
              handleIdentifier(X, typeReference)
              handleNoTypeArguments(>)
              handleType(X, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(S, typeReference)
            handleNoTypeArguments(,)
            handleType(S, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(G6, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(X)
        endMetadataStar(0)
        handleIdentifier(X, typeVariableDeclaration)
        beginTypeVariable(X)
          handleTypeVariablesDefined(num, 1)
          handleIdentifier(num, typeReference)
          handleNoTypeArguments(>)
          handleType(num, null)
        endTypeVariable(>, 0, extends, null)
      endTypeVariables(<, >)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(T, 2)
              handleIdentifier(T, typeReference)
              handleNoTypeArguments(>)
              handleType(T, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(X, typeReference)
            handleNoTypeArguments(,)
            handleType(X, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(H1, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(void)
          endMetadataStar(0)
          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
            beginFunctionType(void)
              beginTypeVariables(<)
                beginMetadataStar(T)
                endMetadataStar(0)
                handleIdentifier(T, typeVariableDeclaration)
                beginTypeVariable(T)
                  handleTypeVariablesDefined(T, 1)
                  handleNoType(T)
                endTypeVariable(>, 0, null, null)
              endTypeVariables(<, >)
              handleVoidKeyword(void)
              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
            endFunctionType(Function, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(H2, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(void)
          endMetadataStar(0)
          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
            beginFunctionType(void)
              beginTypeVariables(<)
                beginMetadataStar(T)
                endMetadataStar(0)
                handleIdentifier(T, typeVariableDeclaration)
                beginTypeVariable(T)
                  handleTypeVariablesDefined(num, 1)
                  handleIdentifier(num, typeReference)
                  handleNoTypeArguments(>)
                  handleType(num, null)
                endTypeVariable(>, 0, extends, null)
              endTypeVariables(<, >)
              handleVoidKeyword(void)
              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
            endFunctionType(Function, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(H3, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(void)
          endMetadataStar(0)
          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
            beginFunctionType(void)
              beginTypeVariables(<)
                beginMetadataStar(T)
                endMetadataStar(0)
                handleIdentifier(T, typeVariableDeclaration)
                beginTypeVariable(T)
                  beginMetadataStar(S)
                  endMetadataStar(0)
                  handleIdentifier(S, typeVariableDeclaration)
                  beginTypeVariable(S)
                    handleTypeVariablesDefined(S, 2)
                    handleNoType(S)
                  endTypeVariable(>, 1, null, null)
                  handleNoType(T)
                endTypeVariable(,, 0, null, null)
              endTypeVariables(<, >)
              handleVoidKeyword(void)
              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
            endFunctionType(Function, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(H4, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(void)
          endMetadataStar(0)
          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
            beginFunctionType(void)
              beginTypeVariables(<)
                beginMetadataStar(T)
                endMetadataStar(0)
                handleIdentifier(T, typeVariableDeclaration)
                beginTypeVariable(T)
                  beginMetadataStar(S)
                  endMetadataStar(0)
                  handleIdentifier(S, typeVariableDeclaration)
                  beginTypeVariable(S)
                    handleTypeVariablesDefined(num, 2)
                    handleIdentifier(num, typeReference)
                    handleNoTypeArguments(>)
                    handleType(num, null)
                  endTypeVariable(>, 1, extends, null)
                  handleIdentifier(num, typeReference)
                  handleNoTypeArguments(,)
                  handleType(num, null)
                endTypeVariable(,, 0, extends, null)
              endTypeVariables(<, >)
              handleVoidKeyword(void)
              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
            endFunctionType(Function, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(H5, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(void)
          endMetadataStar(0)
          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
            beginFunctionType(void)
              beginTypeVariables(<)
                beginMetadataStar(T)
                endMetadataStar(0)
                handleIdentifier(T, typeVariableDeclaration)
                beginTypeVariable(T)
                  beginMetadataStar(S)
                  endMetadataStar(0)
                  handleIdentifier(S, typeVariableDeclaration)
                  beginTypeVariable(S)
                    handleTypeVariablesDefined(num, 2)
                    handleIdentifier(num, typeReference)
                    handleNoTypeArguments(>)
                    handleType(num, null)
                  endTypeVariable(>, 1, extends, null)
                  handleIdentifier(S, typeReference)
                  handleNoTypeArguments(,)
                  handleType(S, null)
                endTypeVariable(,, 0, extends, null)
              endTypeVariables(<, >)
              handleVoidKeyword(void)
              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
            endFunctionType(Function, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(H6, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(void)
          endMetadataStar(0)
          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
            beginFunctionType(void)
              beginTypeVariables(<)
                beginMetadataStar(T)
                endMetadataStar(0)
                handleIdentifier(T, typeVariableDeclaration)
                beginTypeVariable(T)
                  beginMetadataStar(S)
                  endMetadataStar(0)
                  handleIdentifier(S, typeVariableDeclaration)
                  beginTypeVariable(S)
                    handleTypeVariablesDefined(T, 2)
                    handleIdentifier(T, typeReference)
                    handleNoTypeArguments(>)
                    handleType(T, null)
                  endTypeVariable(>, 1, extends, null)
                  handleIdentifier(num, typeReference)
                  handleNoTypeArguments(,)
                  handleType(num, null)
                endTypeVariable(,, 0, extends, null)
              endTypeVariables(<, >)
              handleVoidKeyword(void)
              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
            endFunctionType(Function, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(;)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            handleTypeVariablesDefined(T, 1)
            handleNoType(T)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
      handleIdentifier(f1, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(;)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            handleTypeVariablesDefined(num, 1)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(>)
            handleType(num, null)
          endTypeVariable(>, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
      handleIdentifier(f2, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(;)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(S, 2)
              handleNoType(S)
            endTypeVariable(>, 1, null, null)
            handleNoType(T)
          endTypeVariable(,, 0, null, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
      handleIdentifier(f3, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(;)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(num, 2)
              handleIdentifier(num, typeReference)
              handleNoTypeArguments(>)
              handleType(num, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(,)
            handleType(num, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
      handleIdentifier(f4, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(;)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(num, 2)
              handleIdentifier(num, typeReference)
              handleNoTypeArguments(>)
              handleType(num, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(S, typeReference)
            handleNoTypeArguments(,)
            handleType(S, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
      handleIdentifier(f5, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(;)
      beginFunctionType(void)
        beginTypeVariables(<)
          beginMetadataStar(T)
          endMetadataStar(0)
          handleIdentifier(T, typeVariableDeclaration)
          beginTypeVariable(T)
            beginMetadataStar(S)
            endMetadataStar(0)
            handleIdentifier(S, typeVariableDeclaration)
            beginTypeVariable(S)
              handleTypeVariablesDefined(T, 2)
              handleIdentifier(T, typeReference)
              handleNoTypeArguments(>)
              handleType(T, null)
            endTypeVariable(>, 1, extends, null)
            handleIdentifier(num, typeReference)
            handleNoTypeArguments(,)
            handleType(num, null)
          endTypeVariable(,, 0, extends, null)
        endTypeVariables(<, >)
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
      handleIdentifier(f6, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(;, null)
      handleNoType(;)
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
      endBlockFunctionBody(0, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(31, )
