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

import "dart:core" as prefixedCore;
import "dart:core";

abstract class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  abstract operator *(self::A other) → self::A;
}
class B<X extends core::Object? = dynamic> extends core::Object implements self::A {
  synthetic constructor •() → self::B<self::B::X%>
    : super core::Object::•()
    ;
  get foo() → core::bool
    return throw 42;
  operator *(self::A other) → self::A
    return throw 42;
}
class C extends self::B<core::int> {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
  set bar(core::int value) → void {}
  method baz() → void {}
}
extension type E0 on core::int {
}
extension type E1 on core::int {
}
extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
}
extension type E3 on core::int {
}
extension type E4 on core::List<core::int> {
}
extension type E5 on core::List<dynamic> {
}
extension type E6 on core::List<core::int> {
}
extension type E on self::C {
}
static method main() → dynamic {}
