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

typedef F = self::A;
typedef G0 = self::B<dynamic>;
typedef G1 = self::B<core::int>;
typedef G2<T extends core::Object? = dynamic> = self::B<T%>;
typedef G3<T extends core::num> = self::B<T>;
typedef H0 = self::C<dynamic, dynamic>;
typedef H1 = self::C<core::int, core::String>;
typedef H2<T extends core::Object? = dynamic> = self::C<core::int, T%>;
typedef H3<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::C<T%, S%>;
typedef H4<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::C<S%, T%>;
typedef H5<T extends core::num, S extends core::Object? = dynamic> = self::C<T, S%>;
typedef H6<T extends core::Object? = dynamic, S extends core::num> = self::C<T%, S>;
typedef I0 = self::D<core::num>;
typedef I1 = self::D<core::num>;
typedef I2<T extends core::num> = self::D<T>;
typedef I3<T extends core::int> = self::D<T>;
class A extends core::Object {
  synthetic constructor •() → self::A
    ;
  static method _#new#tearOff() → self::A
    return new self::A::•();
}
class B<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::T%>
    ;
  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::B<self::B::_#new#tearOff::T%>
    return new self::B::•<self::B::_#new#tearOff::T%>();
}
class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
    ;
  static method _#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%, self::C::_#new#tearOff::Y%>
    return new self::C::•<self::C::_#new#tearOff::X%, self::C::_#new#tearOff::Y%>();
}
class D<X extends core::num> extends core::Object {
  synthetic constructor •() → self::D<self::D::X>
    ;
  static method _#new#tearOff<X extends core::num>() → self::D<self::D::_#new#tearOff::X>
    return new self::D::•<self::D::_#new#tearOff::X>();
}
static method main() → dynamic
  ;
static method _#G3#new#tearOff<T extends core::num>() → self::B<self::_#G3#new#tearOff::T>
  return new self::B::•<self::_#G3#new#tearOff::T>();
static method _#H2#new#tearOff<T extends core::Object? = dynamic>() → self::C<core::int, self::_#H2#new#tearOff::T%>
  return new self::C::•<core::int, self::_#H2#new#tearOff::T%>();
static method _#H4#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → self::C<self::_#H4#new#tearOff::S%, self::_#H4#new#tearOff::T%>
  return new self::C::•<self::_#H4#new#tearOff::S%, self::_#H4#new#tearOff::T%>();
static method _#H5#new#tearOff<T extends core::num, S extends core::Object? = dynamic>() → self::C<self::_#H5#new#tearOff::T, self::_#H5#new#tearOff::S%>
  return new self::C::•<self::_#H5#new#tearOff::T, self::_#H5#new#tearOff::S%>();
static method _#H6#new#tearOff<T extends core::Object? = dynamic, S extends core::num>() → self::C<self::_#H6#new#tearOff::T%, self::_#H6#new#tearOff::S>
  return new self::C::•<self::_#H6#new#tearOff::T%, self::_#H6#new#tearOff::S>();
static method _#I3#new#tearOff<T extends core::int>() → self::D<self::_#I3#new#tearOff::T>
  return new self::D::•<self::_#I3#new#tearOff::T>();
