library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract class A<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::T%>
    : super core::Object::•()
    ;
  abstract method foo(covariant-by-class self::A::T% x) → dynamic;
}
abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
  synthetic constructor •() → self::B<self::B::T%>
    : super core::Object::•()
    ;
}
class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  method foo(core::num x) → dynamic {}
}
abstract class _D&C&B<T extends core::num> extends self::C implements self::B<self::_D&C&B::T> /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T>
    : super self::C::•()
    ;
  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
    return super.{self::C::foo}(x);
}
class D<T extends core::num> extends self::_D&C&B<self::D::T> {
  synthetic constructor •() → self::D<self::D::T>
    : super self::_D&C&B::•()
    ;
}
class E<T extends core::num> extends self::C implements self::B<self::E::T> /*isEliminatedMixin*/  {
  synthetic constructor •() → self::E<self::E::T>
    : super self::C::•()
    ;
  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
    return super.{self::C::foo}(x);
}
static method main() → dynamic {}
