package test

public fun func(/*0*/ test.EnumName): kotlin.String

public final enum class EnumName : kotlin.Enum<test.EnumName!> {
    enum entry FIRST

    enum entry SECOND

    private constructor EnumName()
    @kotlin.internal.IntrinsicConstEvaluation public final /*fake_override*/ val name: kotlin.String
    public final /*fake_override*/ val ordinal: kotlin.Int
    protected final /*fake_override*/ fun clone(): kotlin.Any
    public final /*fake_override*/ fun compareTo(/*0*/ test.EnumName!): kotlin.Int
    protected/*protected and package*/ final /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit
    public final /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<test.EnumName!>!

    // Static members
    public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<test.EnumName>
    public final /*synthesized*/ fun valueOf(/*0*/ kotlin.String): test.EnumName
    public final /*synthesized*/ fun values(): kotlin.Array<test.EnumName>
}
