// @dart = 2.9
main() {}
typedef E1<T> = void Function();
typedef E2<T extends num> = void Function();
typedef E3<T, S> = void Function();
typedef E4<T extends num, S extends num> = void Function();
typedef E5<T extends S, S extends num> = void Function();
typedef E6<T extends num, S extends T> = void Function();
typedef F1 = void Function<T>();
typedef F2 = void Function<T extends num>();
typedef F3 = void Function<T, S>();
typedef F4 = void Function<T extends num, S extends num>();
typedef F5 = void Function<T extends S, S extends num>();
typedef F6 = void Function<T extends num, S extends T>();
typedef G1<X> = void Function<T extends X>();
typedef G2<X extends num> = void Function<T extends X>();
typedef G3<X, Y> = void Function<T extends X, S extends Y>();
typedef G4<X extends num, Y extends num> = void
    Function<T extends X, S extends Y>();
typedef G5<X extends num> = void Function<T extends S, S extends X>();
typedef G6<X extends num> = void Function<T extends X, S extends T>();
typedef H1 = void Function(void Function<T>());
typedef H2 = void Function(void Function<T extends num>());
typedef H3 = void Function(void Function<T, S>());
typedef H4 = void Function(void Function<T extends num, S extends num>());
typedef H5 = void Function(void Function<T extends S, S extends num>());
typedef H6 = void Function(void Function<T extends num, S extends T>());
void Function<T, S>() f3;
void Function<T>() f1;
void Function<T extends S, S extends num>() f5;
void Function<T extends num, S extends T>() f6;
void Function<T extends num, S extends num>() f4;
void Function<T extends num>() f2;
