beginCompilationUnit(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(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, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(DeclarationKind.TopLevel, null, null, null, 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)
      handleIdentifier(f1, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(DeclarationKind.TopLevel, null, null, null, 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)
      handleIdentifier(f2, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(DeclarationKind.TopLevel, null, null, null, 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)
      handleIdentifier(f3, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(DeclarationKind.TopLevel, null, null, null, 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)
      handleIdentifier(f4, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(DeclarationKind.TopLevel, null, null, null, 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)
      handleIdentifier(f5, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, void, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginFields(DeclarationKind.TopLevel, null, null, null, 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)
      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, )
