// CHECK:
//   Mangled name: Z
//   Public signature: /Z|null[0]
object Z {
  // CHECK:
  //   Mangled name: Z{}counter
  //   Public signature: /Z.counter|3849500605769271673[0]
  //   Public signature debug description: {}counter
  var counter: Int
    // CHECK JVM_IR:
    //   Mangled name: Z#<get-counter>(){}kotlin.Int
    //   Public signature: /Z.counter.<get-counter>|6416265643848993228[0]
    //   Public signature debug description: <get-counter>(){}kotlin.Int
    // CHECK JS_IR NATIVE:
    //   Mangled name: Z#<get-counter>(){}
    //   Public signature: /Z.counter.<get-counter>|6903507550118978958[0]
    //   Public signature debug description: <get-counter>(){}
    get
    // CHECK:
    //   Mangled name: Z#<set-counter>(kotlin.Int){}
    //   Public signature: /Z.counter.<set-counter>|-8124462411591632783[0]
    //   Public signature debug description: <set-counter>(kotlin.Int){}
    set

  // CHECK:
  //   Mangled name: Z{}aLambda
  //   Public signature: /Z.aLambda|3337321219156655813[0]
  //   Public signature debug description: {}aLambda
  val aLambda: Function0<Unit>
    // CHECK JVM_IR:
    //   Mangled name: Z#<get-aLambda>(){}kotlin.Function0<kotlin.Unit>
    //   Public signature: /Z.aLambda.<get-aLambda>|9058518221524596568[0]
    //   Public signature debug description: <get-aLambda>(){}kotlin.Function0<kotlin.Unit>
    // CHECK JS_IR NATIVE:
    //   Mangled name: Z#<get-aLambda>(){}
    //   Public signature: /Z.aLambda.<get-aLambda>|8927671768328125269[0]
    //   Public signature debug description: <get-aLambda>(){}
    get

  // CHECK:
  //   Mangled name: Z{}anObject
  //   Public signature: /Z.anObject|409091113626572731[0]
  //   Public signature debug description: {}anObject
  val anObject: Any
    // CHECK JVM_IR:
    //   Mangled name: Z#<get-anObject>(){}kotlin.Any
    //   Public signature: /Z.anObject.<get-anObject>|-6807306499596507825[0]
    //   Public signature debug description: <get-anObject>(){}kotlin.Any
    // CHECK JS_IR NATIVE:
    //   Mangled name: Z#<get-anObject>(){}
    //   Public signature: /Z.anObject.<get-anObject>|6468357437342963609[0]
    //   Public signature debug description: <get-anObject>(){}
    get

  // CHECK:
  //   Mangled name: Z.Nested
  //   Public signature: /Z.Nested|null[0]
  class Nested {
    // CHECK:
    //   Mangled name: Z.Nested#<init>(){}
    //   Public signature: /Z.Nested.<init>|-5645683436151566731[0]
    //   Public signature debug description: <init>(){}
    constructor() /* primary */

    // CHECK:
    //   Mangled name: Z.Nested#test(){}
    //   Public signature: /Z.Nested.test|6620506149988718649[0]
    //   Public signature debug description: test(){}
    fun test(): Unit

  }

  // CHECK:
  //   Mangled name: Z#<init>(){}
  //   Public signature: /Z.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  private constructor() /* primary */

  // CHECK:
  //   Mangled name: Z#aFun(){}
  //   Public signature: /Z.aFun|-596272525427331003[0]
  //   Public signature debug description: aFun(){}
  fun aFun(): Unit

  // CHECK:
  //   Mangled name: Z#bar(){}
  //   Public signature: /Z.bar|496682602797471549[0]
  //   Public signature debug description: bar(){}
  fun bar(): Unit

  // CHECK:
  //   Mangled name: Z#foo(){}
  //   Public signature: /Z.foo|-1041209573719867811[0]
  //   Public signature debug description: foo(){}
  fun foo(): Unit

}

// CHECK:
//   Mangled name: #test@Z(){}
//   Public signature: /test|2491484829934192138[0]
//   Public signature debug description: test@Z(){}
fun Z.test(): Unit

// CHECK:
//   Mangled name: #withLambda(kotlin.Function0<kotlin.Unit>){}
//   Public signature: /withLambda|-1561447572468305971[0]
//   Public signature debug description: withLambda(kotlin.Function0<kotlin.Unit>){}
fun withLambda(f: Function0<Unit>): Unit

