package

private object Case1 {
    private constructor Case1()
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public final fun main(): kotlin.Unit
    public final fun process(/*0*/ input: kotlin.String): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String

    public final class CharSequenceValidator : Case1.Validator<kotlin.CharSequence> {
        public constructor CharSequenceValidator()
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }

    public final class CompositeValidator</*0*/ T> {
        public constructor CompositeValidator</*0*/ T>(/*0*/ vararg validators: Case1.Validator<T> /*kotlin.Array<out Case1.Validator<T>>*/)
        public final val validators: kotlin.Array<out Case1.Validator<T>>
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }

    public final class PredicateValidator</*0*/ T> : Case1.Validator<T> {
        public constructor PredicateValidator</*0*/ T>(/*0*/ predicate: (T) -> kotlin.Boolean)
        public final val predicate: (T) -> kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }

    public interface Validator</*0*/ in T> {
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }
}

private object Case2 {
    private constructor Case2()
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public final fun f(): kotlin.Unit
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public final fun </*0*/ T> listOf(/*0*/ vararg elements: T /*kotlin.Array<out T>*/): kotlin.collections.List<T>
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String

    public final data class Add : Case2.Expr<kotlin.Int> {
        public constructor Add(/*0*/ left: Case2.Expr<kotlin.Int>, /*1*/ right: Case2.Expr<kotlin.Int>)
        public final val left: Case2.Expr<kotlin.Int>
        public final val right: Case2.Expr<kotlin.Int>
        public final operator /*synthesized*/ fun component1(): Case2.Expr<kotlin.Int>
        public final operator /*synthesized*/ fun component2(): Case2.Expr<kotlin.Int>
        public final /*synthesized*/ fun copy(/*0*/ left: Case2.Expr<kotlin.Int> = ..., /*1*/ right: Case2.Expr<kotlin.Int> = ...): Case2.Add
        public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
    }

    public interface Expr</*0*/ out T> {
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }

    public final data class Subtract : Case2.Expr<kotlin.Int> {
        public constructor Subtract(/*0*/ left: Case2.Expr<kotlin.Int>, /*1*/ right: Case2.Expr<kotlin.Int>)
        public final val left: Case2.Expr<kotlin.Int>
        public final val right: Case2.Expr<kotlin.Int>
        public final operator /*synthesized*/ fun component1(): Case2.Expr<kotlin.Int>
        public final operator /*synthesized*/ fun component2(): Case2.Expr<kotlin.Int>
        public final /*synthesized*/ fun copy(/*0*/ left: Case2.Expr<kotlin.Int> = ..., /*1*/ right: Case2.Expr<kotlin.Int> = ...): Case2.Subtract
        public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
    }
}
