main = #lib::main;
 [@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
    name '#lib'
    script '#lib'

Class '', script = '#lib'

Field 'globalVar', type = dart:core::List < dart:core::Iterable null >, reflectable, static
    value = null

Function 'foo1', static, reflectable, debuggable
    parameters [dynamic 'x'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  PushConstant         CP#0
  InterfaceCall        CP#1, 2
  JumpIfFalse          L1
  PushConstant         CP#3
  DirectCall           CP#4, 1
  Drop1
L1:
  Push                 FP[-5]
  PushNull
  PushNull
  PushConstant         CP#6
  InterfaceCall        CP#7, 4
  JumpIfFalse          L2
  PushConstant         CP#9
  DirectCall           CP#4, 1
  Drop1
L2:
  Push                 FP[-5]
  PushConstant         CP#10
  PushNull
  PushNull
  PushConstant         CP#11
  AssertAssignable     0, CP#12
  ReturnTOS
}
ConstantPool {
  [0] = Type #lib::B < dart:core::String >
  [1] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
  [2] = Reserved
  [3] = ObjectRef '11'
  [4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = Type #lib::C < dart:core::String, dart:core::int, dart:core::Object, dynamic >
  [7] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
  [8] = Reserved
  [9] = ObjectRef '12'
  [10] = Type #lib::A < dart:core::int >
  [11] = ObjectRef ' in type cast'
  [12] = SubtypeTestCache
}


Function 'foo5', static, reflectable, debuggable
    parameters [dynamic 'x'] (required: 1)
    return-type void

Bytecode {
  Entry                1
  CheckStack           0
  Push                 FP[-5]
  PushConstant         CP#0
  PushNull
  PushNull
  PushConstant         CP#1
  AssertAssignable     0, CP#2
  StoreStaticTOS       CP#3
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = Type dart:core::List < dart:core::Iterable null >
  [1] = ObjectRef ''
  [2] = SubtypeTestCache
  [3] = StaticField #lib::globalVar (field)
}


Function 'main', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}

Class 'A', script = '#lib'
    type-params <dart:core::Object T> (args: 1)
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::A < #lib::A::TypeParam/0 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'B', script = '#lib'
    extends #lib::A < dart:core::String >


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::B < dart:core::String >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C', script = '#lib'
    type-params <dart:core::Object T1, dart:core::Object T2, dart:core::Object T3> (args: 4)
    extends #lib::B < dart:core::String >


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C < dart:core::String, #lib::C::TypeParam/0, #lib::C::TypeParam/1, #lib::C::TypeParam/2 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'D', script = '#lib'
    type-params <dart:core::Object P, dart:core::Object Q> (args: 5)
    extends #lib::C < dart:core::String, dart:core::int, #lib::D::TypeParam/1, #lib::D::TypeParam/0 >

Field 'foo', type = dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >, getter = 'get:foo', setter = 'set:foo', reflectable
    value = null

Function '', constructor, reflectable, debuggable
    parameters [dynamic 'tt'] (required: 1)
    return-type #lib::D < dart:core::String, dart:core::int, #lib::D::TypeParam/1, #lib::D::TypeParam/0, #lib::D::TypeParam/1 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-6]
  Push                 FP[-5]
  PushConstant         CP#0
  Push                 FP[-6]
  LoadTypeArgumentsField CP#1
  PushNull
  PushConstant         CP#2
  AssertAssignable     0, CP#3
  StoreFieldTOS        CP#4
  Push                 FP[-6]
  DirectCall           CP#6, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = Type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
  [1] = TypeArgumentsField #lib::D
  [2] = ObjectRef ''
  [3] = SubtypeTestCache
  [4] = InstanceField #lib::D::foo (field)
  [5] = Reserved
  [6] = DirectCall '#lib::C:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [7] = Reserved
}


Function 'foo2', reflectable, debuggable
    parameters [dynamic 'y'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                1
  CheckStack           0
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#1
  InterfaceCall        CP#2, 4
  JumpIfFalse          L1
  PushConstant         CP#4
  DirectCall           CP#5, 1
  Drop1
L1:
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#7
  InterfaceCall        CP#2, 4
  JumpIfFalse          L2
  PushConstant         CP#8
  DirectCall           CP#5, 1
  Drop1
L2:
  Push                 FP[-6]
  Push                 FP[-5]
  PushConstant         CP#9
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#10
  AssertAssignable     0, CP#11
  UncheckedInterfaceCall CP#12, 2
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField #lib::D
  [1] = Type #lib::A < #lib::D::TypeParam/0 >
  [2] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
  [3] = Reserved
  [4] = ObjectRef '21'
  [5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [6] = Reserved
  [7] = Type #lib::C < dart:core::String, dynamic, #lib::D::TypeParam/1, dart:core::List < #lib::D::TypeParam/0 > >
  [8] = ObjectRef '22'
  [9] = Type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
  [10] = ObjectRef ''
  [11] = SubtypeTestCache
  [12] = InterfaceCall '#lib::D::set:foo', ArgDesc num-args 2, num-type-args 0, names []
  [13] = Reserved
}


Function 'foo3', reflectable, debuggable
    type-params <dart:core::Object T1, dart:core::Object T2>
    parameters [dynamic 'z'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 2, r0
  CheckStack           0
  Push                 FP[-5]
  PushNull
  Push                 r0
  PushConstant         CP#0
  InterfaceCall        CP#1, 4
  JumpIfFalse          L1
  PushConstant         CP#3
  DirectCall           CP#4, 1
  Drop1
L1:
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#6
  Push                 r0
  PushConstant         CP#7
  InterfaceCall        CP#1, 4
  JumpIfFalse          L2
  PushConstant         CP#8
  DirectCall           CP#4, 1
  Drop1
L2:
  Push                 FP[-5]
  PushConstant         CP#9
  Push                 FP[-6]
  LoadTypeArgumentsField CP#6
  Push                 r0
  PushConstant         CP#10
  AssertAssignable     0, CP#11
  InterfaceCall        CP#12, 1
  ReturnTOS
}
ConstantPool {
  [0] = Type #lib::A < #lib::D::foo3::TypeParam/0 >
  [1] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
  [2] = Reserved
  [3] = ObjectRef '31'
  [4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = TypeArgumentsField #lib::D
  [7] = Type #lib::C < dart:core::String, dart:core::Map < #lib::D::foo3::TypeParam/0, #lib::D::TypeParam/0 >, dart:core::List < #lib::D::foo3::TypeParam/1 >, #lib::D::TypeParam/1 >
  [8] = ObjectRef '32'
  [9] = Type dart:core::Map < #lib::D::foo3::TypeParam/1, #lib::D::TypeParam/1 >
  [10] = ObjectRef ' in type cast'
  [11] = SubtypeTestCache
  [12] = InterfaceCall 'dart:core::Map::get:values', ArgDesc num-args 1, num-type-args 0, names []
  [13] = Reserved
}


Function 'foo4', reflectable, debuggable
    parameters [dynamic 'w'] (required: 1)
    return-type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >

Bytecode {
  Entry                2
  CheckStack           0
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  InstantiateTypeArgumentsTOS 0, CP#1
  StoreLocal           r1
  Push                 r1
  PushInt              1
  CreateArrayTOS
  StoreLocal           r1
  Push                 r1
  PushInt              0
  Push                 FP[-5]
  PushConstant         CP#2
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#3
  AssertAssignable     0, CP#4
  StoreIndexedTOS
  DirectCall           CP#5, 2
  PopLocal             r0
  Push                 FP[-5]
  PushConstant         CP#2
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#3
  AssertAssignable     0, CP#7
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField #lib::D
  [1] = ObjectRef < dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 > >
  [2] = Type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
  [3] = ObjectRef ''
  [4] = SubtypeTestCache
  [5] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [6] = Reserved
  [7] = SubtypeTestCache
}

Class 'E', script = '#lib'
    type-params <dart:core::String P> (args: 1)
    extends dart:core::Object


Function '', factory, static, reflectable, debuggable
    type-params <dart:core::String P>
    parameters [] (required: 0)
    return-type #lib::E < #lib::E:: (constructor)::TypeParam/0 >

Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}


Function 'foo6', reflectable, debuggable
    type-params <#lib::E::TypeParam/0 T, dart:core::List < #lib::E::foo6::TypeParam/0 > U>
    parameters [dart:core::Map < #lib::E::foo6::TypeParam/0, #lib::E::foo6::TypeParam/1 > 'map'] (required: 1)
    return-type void

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 2, r0
  JumpIfNotZeroTypeArgs L1
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  InstantiateTypeArgumentsTOS 0, CP#1
  PopLocal             r0
L1:
  CheckStack           0
  JumpIfUnchecked      L2
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  Push                 r0
  PushConstant         CP#2
  PushConstant         CP#3
  PushConstant         CP#4
  AssertSubtype
L2:
  PushNull
  ReturnTOS
}
Default function type arguments: CP#1
ConstantPool {
  [0] = TypeArgumentsField #lib::E
  [1] = ObjectRef < #lib::E::TypeParam/0, dart:core::List < #lib::E::TypeParam/0 > >
  [2] = Type #lib::E::foo6::TypeParam/0
  [3] = Type #lib::E::TypeParam/0
  [4] = ObjectRef 'T'
}

Class 'F', script = '#lib', abstract
    type-params <dart:core::Object T> (args: 1)
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::F < #lib::F::TypeParam/0 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'foo7', abstract, reflectable, debuggable
    type-params <#lib::F::TypeParam/0 Q>
    parameters [#lib::F::foo7::TypeParam/0 'a', dart:core::num 'b', #lib::F::TypeParam/0 'c'] (required: 3)
    return-type void

Function 'foo8', abstract, reflectable, debuggable
    type-params <#lib::F::TypeParam/0 Q>
    parameters [#lib::F::foo8::TypeParam/0 'a', dart:core::num 'b', #lib::F::TypeParam/0 'c'] (required: 3)
    return-type void
Class 'G', script = '#lib'
    type-params <dart:core::Object T> (args: 1)
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::G < #lib::G::TypeParam/0 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'foo7', reflectable, debuggable
    type-params <#lib::G::TypeParam/0 Q>
    parameters [#lib::G::foo7::TypeParam/0 'a', dart:core::int 'b', #lib::G::TypeParam/0 'c'] (required: 3)
    return-type void

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 1, r0
  JumpIfNotZeroTypeArgs L1
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  PopLocal             r0
L1:
  CheckStack           0
  JumpIfUnchecked      L2
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#2
  PushConstant         CP#3
  AssertSubtype
  Push                 FP[-5]
  PushConstant         CP#2
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#4
  AssertAssignable     0, CP#5
  Drop1
L2:
  PushNull
  ReturnTOS
}
Parameter flags: [0, 0, 2]
Default function type arguments: CP#6
ConstantPool {
  [0] = TypeArgumentsField #lib::G
  [1] = Type #lib::G::foo7::TypeParam/0
  [2] = Type #lib::G::TypeParam/0
  [3] = ObjectRef 'Q'
  [4] = ObjectRef 'c'
  [5] = SubtypeTestCache
  [6] = ObjectRef < #lib::G::TypeParam/0 >
}

Class 'H', script = '#lib'
    type-params <dart:core::Object T> (args: 1)
    extends #lib::G < #lib::H::TypeParam/0 >
    implements [#lib::F < #lib::H::TypeParam/0 >]


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::H < #lib::H::TypeParam/0 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall '#lib::G:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'foo8', reflectable, debuggable
    type-params <#lib::H::TypeParam/0 Q>
    parameters [#lib::H::foo8::TypeParam/0 'a', dart:core::int 'b', #lib::H::TypeParam/0 'c'] (required: 3)
    return-type void

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 1, r0
  JumpIfNotZeroTypeArgs L1
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  PopLocal             r0
L1:
  CheckStack           0
  JumpIfUnchecked      L2
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#2
  PushConstant         CP#3
  AssertSubtype
  Push                 FP[-5]
  PushConstant         CP#2
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#4
  AssertAssignable     0, CP#5
  Drop1
L2:
  PushNull
  ReturnTOS
}
Parameter flags: [0, 0, 2]
Default function type arguments: CP#6
ConstantPool {
  [0] = TypeArgumentsField #lib::H
  [1] = Type #lib::H::foo8::TypeParam/0
  [2] = Type #lib::H::TypeParam/0
  [3] = ObjectRef 'Q'
  [4] = ObjectRef 'c'
  [5] = SubtypeTestCache
  [6] = ObjectRef < #lib::H::TypeParam/0 >
}


Function 'foo7', reflectable, debuggable, forwarding-stub
    type-params <#lib::H::TypeParam/0 Q>
    parameters [#lib::H::foo7::TypeParam/0 'a', dart:core::num 'b', #lib::H::TypeParam/0 'c'] (required: 3)
    return-type void

Bytecode {
  Entry                2
  CheckFunctionTypeArgs 1, r0
  CheckStack           0
  JumpIfUnchecked      L1
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#2
  PushConstant         CP#3
  AssertSubtype
  Push                 FP[-5]
  PushConstant         CP#2
  Push                 FP[-8]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#4
  AssertAssignable     0, CP#5
  Drop1
L1:
  Push                 FP[-6]
  PushConstant         CP#6
  PushNull
  PushNull
  PushConstant         CP#7
  AssertAssignable     1, CP#8
  Drop1
  Push                 r0
  Push                 FP[-8]
  Push                 FP[-7]
  Push                 FP[-6]
  Push                 FP[-5]
  UncheckedDirectCall  CP#9, 5
  ReturnTOS
}
Parameter flags: [0, 1, 2]
Forwarding stub target: CP#11
ConstantPool {
  [0] = TypeArgumentsField #lib::H
  [1] = Type #lib::H::foo7::TypeParam/0
  [2] = Type #lib::H::TypeParam/0
  [3] = ObjectRef 'Q'
  [4] = ObjectRef 'c'
  [5] = SubtypeTestCache
  [6] = Type dart:core::int
  [7] = ObjectRef 'b'
  [8] = SubtypeTestCache
  [9] = DirectCall '#lib::G::foo7', ArgDesc num-args 4, num-type-args 1, names []
  [10] = Reserved
  [11] = ObjectRef #lib::G::foo7
}


}
]library #lib from "#lib" as #lib {

  class A<T extends dart.core::Object* = dynamic> extends dart.core::Object {
    synthetic constructor •() → #lib::A<#lib::A::T*>*
      : super dart.core::Object::•()
      ;
  }
  class B extends #lib::A<dart.core::String*> {
    synthetic constructor •() → #lib::B*
      : super #lib::A::•()
      ;
  }
  class C<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic, T3 extends dart.core::Object* = dynamic> extends #lib::B {
    synthetic constructor •() → #lib::C<#lib::C::T1*, #lib::C::T2*, #lib::C::T3*>*
      : super #lib::B::•()
      ;
  }
  class D<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::C<dart.core::int*, #lib::D::Q*, #lib::D::P*> {
    generic-covariant-impl field dart.core::Map<#lib::D::P*, #lib::D::Q*>* foo;
    constructor •(dynamic tt) → #lib::D<#lib::D::P*, #lib::D::Q*>*
      : #lib::D::foo = tt as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*, super #lib::C::•()
      ;
    method foo2(dynamic y) → dynamic {
      if(y is #lib::A<#lib::D::P*>*) {
        dart.core::print("21");
      }
      if(y is #lib::C<dynamic, #lib::D::Q*, dart.core::List<#lib::D::P*>*>*) {
        dart.core::print("22");
      }
      [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P*, #lib::D::Q*>*] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
    }
    method foo3<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic>(dynamic z) → dynamic {
      if(z is #lib::A<#lib::D::foo3::T1*>*) {
        dart.core::print("31");
      }
      if(z is #lib::C<dart.core::Map<#lib::D::foo3::T1*, #lib::D::P*>*, dart.core::List<#lib::D::foo3::T2*>*, #lib::D::Q*>*) {
        dart.core::print("32");
      }
      return (z as dart.core::Map<#lib::D::foo3::T2*, #lib::D::Q*>*).{dart.core::Map::values};
    }
    method foo4(dynamic w) → dart.core::Map<#lib::D::P*, #lib::D::Q*>* {
      dart.core::List<dart.core::Map<#lib::D::P*, #lib::D::Q*>*>* list = <dart.core::Map<#lib::D::P*, #lib::D::Q*>*>[w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*];
      return w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
    }
  }
  class E<P extends dart.core::String* = dart.core::String*> extends dart.core::Object {
    static factory •<P extends dart.core::String* = dynamic>() → #lib::E<#lib::E::•::P*>*
      return null;
    method foo6<generic-covariant-impl T extends #lib::E::P* = #lib::E::P*, U extends dart.core::List<#lib::E::foo6::T*>* = dart.core::List<#lib::E::P*>*>(dart.core::Map<#lib::E::foo6::T*, #lib::E::foo6::U*>* map) → void {}
  }
  abstract class F<T extends dart.core::Object* = dynamic> extends dart.core::Object {
    synthetic constructor •() → #lib::F<#lib::F::T*>*
      : super dart.core::Object::•()
      ;
    abstract method foo7<generic-covariant-impl Q extends #lib::F::T* = #lib::F::T*>(#lib::F::foo7::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::F::T* c) → void;
    abstract method foo8<generic-covariant-impl Q extends #lib::F::T* = #lib::F::T*>(#lib::F::foo8::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::F::T* c) → void;
  }
  class G<T extends dart.core::Object* = dynamic> extends dart.core::Object {
    synthetic constructor •() → #lib::G<#lib::G::T*>*
      : super dart.core::Object::•()
      ;
    method foo7<generic-covariant-impl Q extends #lib::G::T* = #lib::G::T*>(#lib::G::foo7::Q* a, dart.core::int* b, generic-covariant-impl #lib::G::T* c) → void {}
  }
  class H<T extends dart.core::Object* = dynamic> extends #lib::G<#lib::H::T*> implements #lib::F<#lib::H::T*> {
    synthetic constructor •() → #lib::H<#lib::H::T*>*
      : super #lib::G::•()
      ;
    method foo8<generic-covariant-impl Q extends #lib::H::T* = #lib::H::T*>(#lib::H::foo8::Q* a, dart.core::int* b, generic-covariant-impl #lib::H::T* c) → void {}
    forwarding-stub method foo7<generic-covariant-impl Q extends #lib::H::T*>(#lib::H::foo7::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::H::T* c) → void
      return super.{#lib::G::foo7}<#lib::H::foo7::Q*>(a, b, c);
  }
  static field dart.core::List<dart.core::Iterable<dynamic>*>* globalVar;
  static method foo1(dynamic x) → dynamic {
    if(x is #lib::B*) {
      dart.core::print("11");
    }
    if(x is #lib::C<dart.core::int*, dart.core::Object*, dynamic>*) {
      dart.core::print("12");
    }
    return x as #lib::A<dart.core::int*>*;
  }
  static method foo5(dynamic x) → void {
    #lib::globalVar = x as{TypeError,ForDynamic} dart.core::List<dart.core::Iterable<dynamic>*>*;
  }
  static method main() → dynamic {}
}
