B f1(int i, B b, Map<int, num> m, var x,
        {required extraParam,
        required bool obool,
        required var ox,
        required D ob,
        required List<num>? ol}) =>
    new B();
C f3(num i, A b, Map<Object, Object> m, var x,
        {required var ox,
        required extraParam,
        required A2 ob,
        required List ol,
        required Object obool}) =>
    new C();
C f4(num i, A b, Map<Object, Object> m, var x,
        {required var ox,
        required A2 ob,
        required List ol,
        required bool obool,
        required A xx,
        required B yy}) =>
    new C();
C f5(int i, A b, Map<Object, Object> m, var x,
        {required ox, required B ob, required List ol, required obool}) =>
    new C();
D f2(int i, D b, Map<int, int> m, func x,
        {required func ox,
        required D ob,
        required List<int> ol,
        required bool obool}) =>
    new D();
bool inStrongMode = <int?>[] is! List<int>;

class A {}

class A1 {}

class A2 {}

class B implements A, A1, A2 {}

class C implements B {}

class D implements C {}

const f1_is_t1 = f1 is t1;
const f2_is_t1 = f2 is t1;
const f3_is_t1 = f3 is t1;
const f4_is_t1 = f4 is t1;
const f5_is_t1 = f5 is t1;
const f_is_bigType = f is bigType;
const f_is_fType = f is fType;
const f_is_gType = f is gType;
const g_is_fType = g is fType;
const g_is_gType = g is gType;
expect(expected, actual) {}
int f({required int i}) {}
int g({int i = 1}) {}
main() {}
typedef B func(Object o);
typedef B t1(int i, B b, Map<int, num> m, var x,
    {required var ox,
    required B ob,
    required List<num> ol,
    required bool obool});
typedef int bigType(
    {required int i1,
    required int i2,
    required int i3,
    required int i4,
    required int i5,
    required int i6,
    required int i7,
    required int i8,
    required int i9,
    required int i10,
    required int i11,
    required int i12,
    required int i13,
    required int i14,
    required int i15,
    required int i16,
    required int i17,
    required int i18,
    required int i19,
    required int i20,
    required int i21,
    required int i22,
    required int i23,
    required int i24,
    required int i25,
    required int i26,
    required int i27,
    required int i28,
    required int i29,
    required int i30,
    required int i31,
    required int i32,
    required int i33,
    required int i34,
    required int i35,
    required int i36,
    required int i37,
    required int i38,
    required int i39,
    required int i40,
    required int i41,
    required int i42,
    required int i43,
    required int i44,
    required int i45,
    required int i46,
    required int i47,
    required int i48,
    required int i49,
    required int i50,
    required int i51,
    required int i52,
    required int i53,
    required int i54,
    required int i55,
    required int i56,
    required int i57,
    required int i58,
    required int i59,
    required int i60,
    required int i61,
    required int i62,
    required int i63,
    required int i64,
    required int i65,
    required int i66,
    required int i67,
    required int i68,
    required int i69,
    required int i70});
typedef int fType({required int i});
typedef int gType({int i});
