In<Fun<T, R>>
  T = in Int. R = out String. lower: In<Fun<Int, String>>; upper: In<Fun<Any?, Nothing>>; substitution: In<Fun<Int, String>>

Out<Fun<T, R>>
  T = in Int. R = out String. lower: Out<Fun<Any?, Nothing>>; upper: Out<Fun<Int, String>>; substitution: Out<Fun<Int, String>>

Inv<Fun<T, R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv<out Fun<Int, String>>; substitution: Inv<Fun<Int, String>>

Inv<in Fun<T, R>>
  T = in Int. R = out String. lower: Inv<in Fun<Int, String>>; upper: Inv<in Fun<Any?, Nothing>>; substitution: Inv<in Fun<Int, String>>

Inv<out Fun<T, R>>
  T = in Int. R = out String. lower: Inv<out Fun<Any?, Nothing>>; upper: Inv<out Fun<Int, String>>; substitution: Inv<out Fun<Int, String>>

Fun<In<T>, In<R>>
  T = in Int. R = out String. lower: Fun<In<Int>, In<String>>; upper: Fun<In<Any?>, In<Nothing>>; substitution: Fun<In<Int>, In<*>>

Fun<In<T>, Out<R>>
  T = in Int. R = out String. lower: Fun<In<Int>, Out<Nothing>>; upper: Fun<In<Any?>, Out<String>>; substitution: Fun<In<Int>, Out<String>>

Fun<In<T>, Inv<R>>
  T = in Int. R = out String. lower: Fun<In<Int>, Nothing>; upper: Fun<In<Any?>, Inv<out String>>; substitution: Fun<In<Int>, Inv<out String>>

Fun<In<T>, Inv<in R>>
  T = in Int. R = out String. lower: Fun<In<Int>, Inv<in String>>; upper: Fun<In<Any?>, Inv<out Any?>>; substitution: Fun<In<Int>, Inv<in String>>

Fun<In<T>, Inv<out R>>
  T = in Int. R = out String. lower: Fun<In<Int>, Inv<Nothing>>; upper: Fun<In<Any?>, Inv<out String>>; substitution: Fun<In<Int>, Inv<out String>>

Fun<Out<T>, In<R>>
  T = in Int. R = out String. lower: Fun<Out<Any?>, In<String>>; upper: Fun<Out<Int>, In<Nothing>>; substitution: Fun<Out<*>, In<*>>

Fun<Out<T>, Out<R>>
  T = in Int. R = out String. lower: Fun<Out<Any?>, Out<Nothing>>; upper: Fun<Out<Int>, Out<String>>; substitution: Fun<Out<*>, Out<String>>

Fun<Out<T>, Inv<R>>
  T = in Int. R = out String. lower: Fun<Out<Any?>, Nothing>; upper: Fun<Out<Int>, Inv<out String>>; substitution: Fun<Out<*>, Inv<out String>>

Fun<Out<T>, Inv<in R>>
  T = in Int. R = out String. lower: Fun<Out<Any?>, Inv<in String>>; upper: Fun<Out<Int>, Inv<out Any?>>; substitution: Fun<Out<*>, Inv<in String>>

Fun<Out<T>, Inv<out R>>
  T = in Int. R = out String. lower: Fun<Out<Any?>, Inv<Nothing>>; upper: Fun<Out<Int>, Inv<out String>>; substitution: Fun<Out<*>, Inv<out String>>

Fun<Inv<T>, In<R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, In<String>>; upper: Fun<Nothing, In<Nothing>>; substitution: Fun<Inv<in Int>, In<*>>

Fun<Inv<T>, Out<R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Out<Nothing>>; upper: Fun<Nothing, Out<String>>; substitution: Fun<Inv<in Int>, Out<String>>

Fun<Inv<T>, Inv<R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Nothing>; upper: Fun<Nothing, Inv<out String>>; substitution: Fun<Inv<in Int>, Inv<out String>>

Fun<Inv<T>, Inv<in R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Inv<in String>>; upper: Fun<Nothing, Inv<out Any?>>; substitution: Fun<Inv<in Int>, Inv<in String>>

Fun<Inv<T>, Inv<out R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Inv<Nothing>>; upper: Fun<Nothing, Inv<out String>>; substitution: Fun<Inv<in Int>, Inv<out String>>

Fun<Inv<in T>, In<R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, In<String>>; upper: Fun<Inv<Any?>, In<Nothing>>; substitution: Fun<Inv<in Int>, In<*>>

Fun<Inv<in T>, Out<R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Out<Nothing>>; upper: Fun<Inv<Any?>, Out<String>>; substitution: Fun<Inv<in Int>, Out<String>>

Fun<Inv<in T>, Inv<R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Nothing>; upper: Fun<Inv<Any?>, Inv<out String>>; substitution: Fun<Inv<in Int>, Inv<out String>>

Fun<Inv<in T>, Inv<in R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Inv<in String>>; upper: Fun<Inv<Any?>, Inv<out Any?>>; substitution: Fun<Inv<in Int>, Inv<in String>>

Fun<Inv<in T>, Inv<out R>>
  T = in Int. R = out String. lower: Fun<Inv<in Int>, Inv<Nothing>>; upper: Fun<Inv<Any?>, Inv<out String>>; substitution: Fun<Inv<in Int>, Inv<out String>>

Fun<Inv<out T>, In<R>>
  T = in Int. R = out String. lower: Fun<Inv<out Any?>, In<String>>; upper: Fun<Inv<out Int>, In<Nothing>>; substitution: Fun<Inv<out Int>, In<*>>

Fun<Inv<out T>, Out<R>>
  T = in Int. R = out String. lower: Fun<Inv<out Any?>, Out<Nothing>>; upper: Fun<Inv<out Int>, Out<String>>; substitution: Fun<Inv<out Int>, Out<String>>

Fun<Inv<out T>, Inv<R>>
  T = in Int. R = out String. lower: Fun<Inv<out Any?>, Nothing>; upper: Fun<Inv<out Int>, Inv<out String>>; substitution: Fun<Inv<out Int>, Inv<out String>>

Fun<Inv<out T>, Inv<in R>>
  T = in Int. R = out String. lower: Fun<Inv<out Any?>, Inv<in String>>; upper: Fun<Inv<out Int>, Inv<out Any?>>; substitution: Fun<Inv<out Int>, Inv<in String>>

Fun<Inv<out T>, Inv<out R>>
  T = in Int. R = out String. lower: Fun<Inv<out Any?>, Inv<Nothing>>; upper: Fun<Inv<out Int>, Inv<out String>>; substitution: Fun<Inv<out Int>, Inv<out String>>

In<Inv2<T, R>>
  T = in Int. R = out String. lower: In<Inv2<in Int, out String>>; upper: In<Nothing>; substitution: In<Inv2<in Int, out String>>

Out<Inv2<T, R>>
  T = in Int. R = out String. lower: Out<Nothing>; upper: Out<Inv2<in Int, out String>>; substitution: Out<Inv2<in Int, out String>>

Inv<Inv2<T, R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv<out Inv2<in Int, out String>>; substitution: Inv<Inv2<in Int, out String>>

Inv<in Inv2<T, R>>
  T = in Int. R = out String. lower: Inv<in Inv2<in Int, out String>>; upper: Inv<out Any?>; substitution: Inv<in Inv2<in Int, out String>>

Inv<out Inv2<T, R>>
  T = in Int. R = out String. lower: Inv<Nothing>; upper: Inv<out Inv2<in Int, out String>>; substitution: Inv<out Inv2<in Int, out String>>

Inv2<In<T>, In<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out In<Int>, out In<Nothing>>; substitution: Inv2<In<Int>, In<*>>

Inv2<In<T>, Out<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out In<Int>, out Out<String>>; substitution: Inv2<In<Int>, Out<String>>

Inv2<In<T>, Inv<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out In<Int>, out Inv<out String>>; substitution: Inv2<In<Int>, Inv<out String>>

Inv2<In<T>, Inv<in R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out In<Int>, out Inv<out Any?>>; substitution: Inv2<In<Int>, Inv<in String>>

Inv2<In<T>, Inv<out R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out In<Int>, out Inv<out String>>; substitution: Inv2<In<Int>, Inv<out String>>

Inv2<Out<T>, In<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Out<Any?>, out In<Nothing>>; substitution: Inv2<Out<*>, In<*>>

Inv2<Out<T>, Out<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Out<Any?>, out Out<String>>; substitution: Inv2<Out<*>, Out<String>>

Inv2<Out<T>, Inv<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Out<Any?>, out Inv<out String>>; substitution: Inv2<Out<*>, Inv<out String>>

Inv2<Out<T>, Inv<in R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Out<Any?>, out Inv<out Any?>>; substitution: Inv2<Out<*>, Inv<in String>>

Inv2<Out<T>, Inv<out R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Out<Any?>, out Inv<out String>>; substitution: Inv2<Out<*>, Inv<out String>>

Inv2<Inv<T>, In<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out In<Nothing>>; substitution: Inv2<Inv<in Int>, In<*>>

Inv2<Inv<T>, Out<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Out<String>>; substitution: Inv2<Inv<in Int>, Out<String>>

Inv2<Inv<T>, Inv<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Inv<out String>>; substitution: Inv2<Inv<in Int>, Inv<out String>>

Inv2<Inv<T>, Inv<in R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Inv<out Any?>>; substitution: Inv2<Inv<in Int>, Inv<in String>>

Inv2<Inv<T>, Inv<out R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Inv<out String>>; substitution: Inv2<Inv<in Int>, Inv<out String>>

Inv2<Inv<in T>, In<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out In<Nothing>>; substitution: Inv2<Inv<in Int>, In<*>>

Inv2<Inv<in T>, Out<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Out<String>>; substitution: Inv2<Inv<in Int>, Out<String>>

Inv2<Inv<in T>, Inv<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Inv<out String>>; substitution: Inv2<Inv<in Int>, Inv<out String>>

Inv2<Inv<in T>, Inv<in R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Inv<out Any?>>; substitution: Inv2<Inv<in Int>, Inv<in String>>

Inv2<Inv<in T>, Inv<out R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<in Int>, out Inv<out String>>; substitution: Inv2<Inv<in Int>, Inv<out String>>

Inv2<Inv<out T>, In<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<out Any?>, out In<Nothing>>; substitution: Inv2<Inv<out Int>, In<*>>

Inv2<Inv<out T>, Out<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<out Any?>, out Out<String>>; substitution: Inv2<Inv<out Int>, Out<String>>

Inv2<Inv<out T>, Inv<R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<out Any?>, out Inv<out String>>; substitution: Inv2<Inv<out Int>, Inv<out String>>

Inv2<Inv<out T>, Inv<in R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<out Any?>, out Inv<out Any?>>; substitution: Inv2<Inv<out Int>, Inv<in String>>

Inv2<Inv<out T>, Inv<out R>>
  T = in Int. R = out String. lower: Nothing; upper: Inv2<out Inv<out Any?>, out Inv<out String>>; substitution: Inv2<Inv<out Int>, Inv<out String>>
