library;
import self as self;
import "dart:core" as core;

abstract class _Object&M1 = core::Object with self::M1 {
}
abstract class __Object&M1&M2 = self::_Object&M1 with self::M2 {
}
class B extends self::__Object&M1&M2 {
  constructor •(dynamic value) → void
    : super core::Object::•()
    ;
}
abstract class M1 extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method m() → dynamic
    return core::print("M1");
}
abstract class M2 extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method m() → dynamic
    return core::print("M2");
}
class C extends self::__Object&M1&M2 {
  constructor •(dynamic value) → void
    : super core::Object::•()
    ;
}
abstract class G1<T extends core::Object> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method m() → dynamic
    return core::print(self::G1::T);
}
abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
}
class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
static method main() → dynamic {
  new self::B::•(null).{self::M2::m}();
  new self::C::•(null).{self::M2::m}();
  new self::D::•<dynamic>().{self::G1::m}();
  new self::D::•<core::int>().{self::G1::m}();
  new self::D::•<core::List<core::int>>().{self::G1::m}();
}
