FILE fqName:<root> fileName:/generticReferences.kt
  CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]
    thisReceiver: VALUE_PARAMETER INSTANCE_RECEIVER kind:DispatchReceiver name:<this> type:<root>.A<T of <root>.A>
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
    CONSTRUCTOR visibility:public returnType:<root>.A<T of <root>.A> [primary]
      BLOCK_BODY
        DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
        INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit
    FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN returnType:kotlin.Boolean [fake_override,operator]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      VALUE_PARAMETER kind:Regular name:other index:1 type:kotlin.Any?
      overridden:
        public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any
    FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN returnType:kotlin.Int [fake_override]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      overridden:
        public open fun hashCode (): kotlin.Int declared in kotlin.Any
    FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN returnType:kotlin.String [fake_override]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      overridden:
        public open fun toString (): kotlin.String declared in kotlin.Any
    FUN name:bar visibility:public modality:FINAL returnType:T of <root>.A
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:<root>.A<T of <root>.A>
      VALUE_PARAMETER kind:Regular name:x index:1 type:T of <root>.A
      BLOCK_BODY
        RETURN type=kotlin.Nothing from='public final fun bar (x: T of <root>.A): T of <root>.A declared in <root>.A'
          GET_VAR 'x: T of <root>.A declared in <root>.A.bar' type=T of <root>.A origin=null
  CLASS CLASS name:A2 modality:FINAL visibility:public superTypes:[kotlin.Any]
    thisReceiver: VALUE_PARAMETER INSTANCE_RECEIVER kind:DispatchReceiver name:<this> type:<root>.A2<T of <root>.A2>
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence] reified:false
    CONSTRUCTOR visibility:public returnType:<root>.A2<T of <root>.A2> [primary]
      BLOCK_BODY
        DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
        INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A2 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit
    FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN returnType:kotlin.Boolean [fake_override,operator]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      VALUE_PARAMETER kind:Regular name:other index:1 type:kotlin.Any?
      overridden:
        public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any
    FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN returnType:kotlin.Int [fake_override]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      overridden:
        public open fun hashCode (): kotlin.Int declared in kotlin.Any
    FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN returnType:kotlin.String [fake_override]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      overridden:
        public open fun toString (): kotlin.String declared in kotlin.Any
    FUN name:bar2 visibility:public modality:FINAL returnType:T of <root>.A2
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:<root>.A2<T of <root>.A2>
      VALUE_PARAMETER kind:Regular name:x index:1 type:T of <root>.A2
      BLOCK_BODY
        RETURN type=kotlin.Nothing from='public final fun bar2 (x: T of <root>.A2): T of <root>.A2 declared in <root>.A2'
          GET_VAR 'x: T of <root>.A2 declared in <root>.A2.bar2' type=T of <root>.A2 origin=null
  CLASS CLASS name:A3 modality:FINAL visibility:public superTypes:[kotlin.Any]
    thisReceiver: VALUE_PARAMETER INSTANCE_RECEIVER kind:DispatchReceiver name:<this> type:<root>.A3<T of <root>.A3>
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Comparable<T of <root>.A3>] reified:false
    CONSTRUCTOR visibility:public returnType:<root>.A3<T of <root>.A3> [primary]
      BLOCK_BODY
        DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
        INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A3 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit
    FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN returnType:kotlin.Boolean [fake_override,operator]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      VALUE_PARAMETER kind:Regular name:other index:1 type:kotlin.Any?
      overridden:
        public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any
    FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN returnType:kotlin.Int [fake_override]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      overridden:
        public open fun hashCode (): kotlin.Int declared in kotlin.Any
    FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN returnType:kotlin.String [fake_override]
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:kotlin.Any
      overridden:
        public open fun toString (): kotlin.String declared in kotlin.Any
    FUN name:bar3 visibility:public modality:FINAL returnType:T of <root>.A3
      VALUE_PARAMETER kind:DispatchReceiver name:<this> index:0 type:<root>.A3<T of <root>.A3>
      VALUE_PARAMETER kind:Regular name:x index:1 type:T of <root>.A3
      BLOCK_BODY
        RETURN type=kotlin.Nothing from='public final fun bar3 (x: T of <root>.A3): T of <root>.A3 declared in <root>.A3'
          GET_VAR 'x: T of <root>.A3 declared in <root>.A3.bar3' type=T of <root>.A3 origin=null
  FUN name:box visibility:public modality:FINAL returnType:kotlin.String
    BLOCK_BODY
      VAR name:r1 type:kotlin.Function1<kotlin.Int, kotlin.Int> [val]
        FUNCTION_REFERENCE 'public final fun foo <T> (x: T of <root>.foo): T of <root>.foo declared in <root>' type=kotlin.reflect.KFunction1<@[ParameterName(name = "x")] kotlin.Int, kotlin.Int> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.Int
      VAR name:r2 type:@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A<kotlin.Int>, @[ParameterName(name = "x")] kotlin.Int, kotlin.Int> [val]
        FUNCTION_REFERENCE 'public final fun foo <T> (<this>: <root>.A<T of <root>.foo>, x: T of <root>.foo): T of <root>.foo declared in <root>' type=@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A<kotlin.Int>, @[ParameterName(name = "x")] kotlin.Int, kotlin.Int> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.Int
      VAR name:r3 type:@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A<*>, kotlin.Nothing, kotlin.Any?> [val]
        FUNCTION_REFERENCE 'public final fun foo <T> (<this>: <root>.A<T of <root>.foo>, x: T of <root>.foo): T of <root>.foo declared in <root>' type=@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A<*>, kotlin.Any?, kotlin.Any?> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.Any?
      VAR name:r4 type:kotlin.reflect.KFunction2<<root>.A<kotlin.Int>, @[ParameterName(name = "x")] kotlin.Int, kotlin.Int> [val]
        FUNCTION_REFERENCE 'public final fun bar (x: T of <root>.A): T of <root>.A declared in <root>.A' type=kotlin.reflect.KFunction2<<root>.A<kotlin.Int>, @[ParameterName(name = "x")] kotlin.Int, kotlin.Int> origin=null reflectionTarget=<same>
      VAR name:r5 type:kotlin.reflect.KFunction2<<root>.A<*>, kotlin.Nothing, kotlin.Any?> [val]
        FUNCTION_REFERENCE 'public final fun bar (x: T of <root>.A): T of <root>.A declared in <root>.A' type=kotlin.reflect.KFunction2<<root>.A<*>, kotlin.Any?, kotlin.Any?> origin=null reflectionTarget=<same>
      VAR name:s1 type:kotlin.Function1<kotlin.String, kotlin.String> [val]
        FUNCTION_REFERENCE 'public final fun foo2 <T> (x: T of <root>.foo2): T of <root>.foo2 declared in <root>' type=kotlin.reflect.KFunction1<@[ParameterName(name = "x")] kotlin.String, kotlin.String> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.String
      VAR name:s2 type:@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A2<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> [val]
        FUNCTION_REFERENCE 'public final fun foo2 <T> (<this>: <root>.A2<T of <root>.foo2>, x: T of <root>.foo2): T of <root>.foo2 declared in <root>' type=@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A2<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.String
      VAR name:s3 type:@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A2<*>, kotlin.Nothing, kotlin.CharSequence> [val]
        FUNCTION_REFERENCE 'public final fun foo2 <T> (<this>: <root>.A2<T of <root>.foo2>, x: T of <root>.foo2): T of <root>.foo2 declared in <root>' type=@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A2<*>, kotlin.CharSequence, kotlin.CharSequence> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.CharSequence
      VAR name:s4 type:kotlin.reflect.KFunction2<<root>.A2<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> [val]
        FUNCTION_REFERENCE 'public final fun bar2 (x: T of <root>.A2): T of <root>.A2 declared in <root>.A2' type=kotlin.reflect.KFunction2<<root>.A2<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> origin=null reflectionTarget=<same>
      VAR name:s5 type:kotlin.reflect.KFunction2<<root>.A2<*>, kotlin.Nothing, kotlin.CharSequence> [val]
        FUNCTION_REFERENCE 'public final fun bar2 (x: T of <root>.A2): T of <root>.A2 declared in <root>.A2' type=kotlin.reflect.KFunction2<<root>.A2<*>, kotlin.CharSequence, kotlin.CharSequence> origin=null reflectionTarget=<same>
      VAR name:t1 type:kotlin.Function1<kotlin.String, kotlin.String> [val]
        FUNCTION_REFERENCE 'public final fun foo3 <T> (x: T of <root>.foo3): T of <root>.foo3 declared in <root>' type=kotlin.reflect.KFunction1<@[ParameterName(name = "x")] kotlin.String, kotlin.String> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.String
      VAR name:t2 type:@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A3<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> [val]
        FUNCTION_REFERENCE 'public final fun foo3 <T> (<this>: <root>.A3<T of <root>.foo3>, x: T of <root>.foo3): T of <root>.foo3 declared in <root>' type=@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A3<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.String
      VAR name:t3 type:@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A3<*>, kotlin.Nothing, kotlin.Comparable<*>> [val]
        FUNCTION_REFERENCE 'public final fun foo3 <T> (<this>: <root>.A3<T of <root>.foo3>, x: T of <root>.foo3): T of <root>.foo3 declared in <root>' type=@[ExtensionFunctionType] kotlin.reflect.KFunction2<<root>.A3<*>, kotlin.Comparable<*>, kotlin.Comparable<*>> origin=null reflectionTarget=<same>
          TYPE_ARG T: kotlin.Comparable<*>
      VAR name:t4 type:kotlin.reflect.KFunction2<<root>.A3<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> [val]
        FUNCTION_REFERENCE 'public final fun bar3 (x: T of <root>.A3): T of <root>.A3 declared in <root>.A3' type=kotlin.reflect.KFunction2<<root>.A3<kotlin.String>, @[ParameterName(name = "x")] kotlin.String, kotlin.String> origin=null reflectionTarget=<same>
      VAR name:t5 type:kotlin.reflect.KFunction2<<root>.A3<*>, kotlin.Nothing, kotlin.Comparable<*>> [val]
        FUNCTION_REFERENCE 'public final fun bar3 (x: T of <root>.A3): T of <root>.A3 declared in <root>.A3' type=kotlin.reflect.KFunction2<<root>.A3<*>, kotlin.Comparable<*>, kotlin.Comparable<*>> origin=null reflectionTarget=<same>
      RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
        CONST String type=kotlin.String value="OK"
  FUN name:foo visibility:public modality:FINAL returnType:T of <root>.foo
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
    VALUE_PARAMETER kind:ExtensionReceiver name:<this> index:0 type:<root>.A<T of <root>.foo>
    VALUE_PARAMETER kind:Regular name:x index:1 type:T of <root>.foo
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun foo <T> (<this>: <root>.A<T of <root>.foo>, x: T of <root>.foo): T of <root>.foo declared in <root>'
        CALL 'public final fun bar (x: T of <root>.A): T of <root>.A declared in <root>.A' type=T of <root>.foo origin=null
          ARG <this>: GET_VAR '<this>: <root>.A<T of <root>.foo> declared in <root>.foo' type=<root>.A<T of <root>.foo> origin=IMPLICIT_ARGUMENT
          ARG x: GET_VAR 'x: T of <root>.foo declared in <root>.foo' type=T of <root>.foo origin=null
  FUN name:foo visibility:public modality:FINAL returnType:T of <root>.foo
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
    VALUE_PARAMETER kind:Regular name:x index:0 type:T of <root>.foo
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun foo <T> (x: T of <root>.foo): T of <root>.foo declared in <root>'
        GET_VAR 'x: T of <root>.foo declared in <root>.foo' type=T of <root>.foo origin=null
  FUN name:foo2 visibility:public modality:FINAL returnType:T of <root>.foo2
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence] reified:false
    VALUE_PARAMETER kind:ExtensionReceiver name:<this> index:0 type:<root>.A2<T of <root>.foo2>
    VALUE_PARAMETER kind:Regular name:x index:1 type:T of <root>.foo2
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun foo2 <T> (<this>: <root>.A2<T of <root>.foo2>, x: T of <root>.foo2): T of <root>.foo2 declared in <root>'
        CALL 'public final fun bar2 (x: T of <root>.A2): T of <root>.A2 declared in <root>.A2' type=T of <root>.foo2 origin=null
          ARG <this>: GET_VAR '<this>: <root>.A2<T of <root>.foo2> declared in <root>.foo2' type=<root>.A2<T of <root>.foo2> origin=IMPLICIT_ARGUMENT
          ARG x: GET_VAR 'x: T of <root>.foo2 declared in <root>.foo2' type=T of <root>.foo2 origin=null
  FUN name:foo2 visibility:public modality:FINAL returnType:T of <root>.foo2
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence] reified:false
    VALUE_PARAMETER kind:Regular name:x index:0 type:T of <root>.foo2
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun foo2 <T> (x: T of <root>.foo2): T of <root>.foo2 declared in <root>'
        GET_VAR 'x: T of <root>.foo2 declared in <root>.foo2' type=T of <root>.foo2 origin=null
  FUN name:foo3 visibility:public modality:FINAL returnType:T of <root>.foo3
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Comparable<T of <root>.foo3>] reified:false
    VALUE_PARAMETER kind:ExtensionReceiver name:<this> index:0 type:<root>.A3<T of <root>.foo3>
    VALUE_PARAMETER kind:Regular name:x index:1 type:T of <root>.foo3
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun foo3 <T> (<this>: <root>.A3<T of <root>.foo3>, x: T of <root>.foo3): T of <root>.foo3 declared in <root>'
        CALL 'public final fun bar3 (x: T of <root>.A3): T of <root>.A3 declared in <root>.A3' type=T of <root>.foo3 origin=null
          ARG <this>: GET_VAR '<this>: <root>.A3<T of <root>.foo3> declared in <root>.foo3' type=<root>.A3<T of <root>.foo3> origin=IMPLICIT_ARGUMENT
          ARG x: GET_VAR 'x: T of <root>.foo3 declared in <root>.foo3' type=T of <root>.foo3 origin=null
  FUN name:foo3 visibility:public modality:FINAL returnType:T of <root>.foo3
    TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Comparable<T of <root>.foo3>] reified:false
    VALUE_PARAMETER kind:Regular name:x index:0 type:T of <root>.foo3
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun foo3 <T> (x: T of <root>.foo3): T of <root>.foo3 declared in <root>'
        GET_VAR 'x: T of <root>.foo3 declared in <root>.foo3' type=T of <root>.foo3 origin=null
