fun main() {
    class Monkey(val name: String, var value: Long?, val operation: String) {
        fun yell(monkeys: Map<String, Monkey>): Long = if (value != null)
            value!!
        else {
            val (name1, operator, name2) = operation.split(" ")
            val monkey1 = monkeys[name1]!!.yell(monkeys)
            val monkey2 = monkeys[name2]!!.yell(monkeys)

            when (operator) {
                "+" -> monkey1 + monkey2
                "-" -> monkey1 - monkey2
                "*" -> monkey1 * monkey2
                "/" -> monkey1 / monkey2
                else -> throw Exception("Unknown operator $operator")
            }
        }

        fun dependsOn(name: String, monkeys: Map<String, Monkey>): Boolean {
            if (this.name == name)
                return true
            else if (this.value != null)
                return false
            else {
                val (name1, _, name2) = operation.split(" ")

                if (name1 == name || name2 == name)
                    return true

                val monkey1 = monkeys[name1]!!.dependsOn(name, monkeys)
                val monkey2 = monkeys[name2]!!.dependsOn(name, monkeys)

                return monkey1 || monkey2
            }
        }

        fun fix(targetValue: Long, nodeToFix: String, monkeys: Map<String, Monkey>) {
            if (this.name == nodeToFix) {
                this.value = targetValue

                return
            } else if (this.value != null)
                throw Exception("Should not be fixing here!")
            else {
                val (name1, operator, name2) = operation.split(" ")

                val monkey1 = monkeys[name1]!!
                val monkey2 = monkeys[name2]!!
                val monkey1dependOnNodeToFix = monkey1.dependsOn(nodeToFix, monkeys)
                val otherValue = if (monkey1dependOnNodeToFix) monkey2.yell(monkeys) else monkey1.yell(monkeys)

                if (monkey1dependOnNodeToFix) {
                    when (operator) {
                        "+" -> monkey1.fix(targetValue - otherValue, nodeToFix, monkeys)
                        "-" -> monkey1.fix(targetValue + otherValue, nodeToFix, monkeys)
                        "*" -> monkey1.fix(targetValue / otherValue, nodeToFix, monkeys)
                        "/" -> monkey1.fix(targetValue * otherValue, nodeToFix, monkeys)
                        else -> throw Exception("Unknown operator $operator")
                    }
                } else {
                    when (operator) {
                        "+" -> monkey2.fix(targetValue - otherValue, nodeToFix, monkeys)
                        "-" -> monkey2.fix(otherValue - targetValue, nodeToFix, monkeys)
                        "*" -> monkey2.fix(targetValue / otherValue, nodeToFix, monkeys)
                        "/" -> monkey2.fix(otherValue / targetValue, nodeToFix, monkeys)
                        else -> throw Exception("Unknown operation $operator")
                    }
                }

            }
        }
    }

    fun parseMonkeys(input: List<String>) = input.map { it.split(": ") }.associate { (name, yell) ->
        name to Monkey(name, value = yell.toLongOrNull(), operation = yell)
    }

    fun part1(input: List<String>) = parseMonkeys(input).let { it["root"]!!.yell(it) }

    fun part2(input: List<String>): Long {
        val monkeys = parseMonkeys(input)

        val humn = monkeys["humn"]!!
        val root = monkeys["root"]!!
        val (root1name, _, root2name) = root.operation.split(" ")
        val root1 = monkeys[root1name]!!
        val root2 = monkeys[root2name]!!
        val root1dependOnHumn = root1.dependsOn("humn", monkeys)
        val targetValue = if (root1dependOnHumn) root2.yell(monkeys) else root1.yell(monkeys)
        val branchToFix = if (root1dependOnHumn) root1 else root2

        branchToFix.fix(targetValue, "humn", monkeys)

        return humn.value!!
    }

    test(
        day = 21,
        testTarget1 = 152L,
        testTarget2 = 301L,
        part1 = ::part1,
        part2 = ::part2,
    )
}

Compiled from "Day21.kt"
final class Day21Kt$main$2 extends kotlin.jvm.internal.FunctionReferenceImpl implements kotlin.jvm.functions.Function1<java.util.List<? extends java.lang.String>, java.lang.Long> {
  public static final Day21Kt$main$2 INSTANCE;

  Day21Kt$main$2();
    Code:
       0: aload_0
       1: iconst_1
       2: ldc           #11                 // class kotlin/jvm/internal/Intrinsics$Kotlin
       4: ldc           #13                 // String part2
       6: ldc           #15                 // String main$part2(Ljava/util/List;)J
       8: iconst_0
       9: invokespecial #18                 // Method kotlin/jvm/internal/FunctionReferenceImpl."<init>":(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
      12: return

  public final java.lang.Long invoke(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #25                 // String p0
       3: invokestatic  #31                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: invokestatic  #37                 // Method Day21Kt.access$main$part2:(Ljava/util/List;)J
      10: invokestatic  #43                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      13: areturn

  public java.lang.Object invoke(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: checkcast     #47                 // class java/util/List
       5: invokevirtual #49                 // Method invoke:(Ljava/util/List;)Ljava/lang/Long;
       8: areturn

  static {};
    Code:
       0: new           #2                  // class Day21Kt$main$2
       3: dup
       4: invokespecial #54                 // Method "<init>":()V
       7: putstatic     #57                 // Field INSTANCE:LDay21Kt$main$2;
      10: return
}

Compiled from "Day21.kt"
public final class Day21Kt {
  public static final void main();
    Code:
       0: bipush        21
       2: ldc2_w        #7                  // long 152l
       5: invokestatic  #14                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       8: ldc2_w        #15                 // long 301l
      11: invokestatic  #14                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      14: getstatic     #22                 // Field Day21Kt$main$1.INSTANCE:LDay21Kt$main$1;
      17: checkcast     #24                 // class kotlin/jvm/functions/Function1
      20: getstatic     #29                 // Field Day21Kt$main$2.INSTANCE:LDay21Kt$main$2;
      23: checkcast     #24                 // class kotlin/jvm/functions/Function1
      26: invokestatic  #35                 // Method UtilsKt.test:(ILjava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
      29: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #38                 // Method main:()V
       3: return

  private static final java.util.Map<java.lang.String, Day21Kt$main$Monkey> main$parseMonkeys(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: checkcast     #45                 // class java/lang/Iterable
       4: astore_1
       5: iconst_0
       6: istore_2
       7: aload_1
       8: astore_3
       9: new           #47                 // class java/util/ArrayList
      12: dup
      13: aload_1
      14: bipush        10
      16: invokestatic  #53                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      19: invokespecial #57                 // Method java/util/ArrayList."<init>":(I)V
      22: checkcast     #59                 // class java/util/Collection
      25: astore        4
      27: iconst_0
      28: istore        5
      30: aload_3
      31: invokeinterface #63,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      36: astore        6
      38: aload         6
      40: invokeinterface #69,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      45: ifeq          110
      48: aload         6
      50: invokeinterface #73,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      55: astore        7
      57: aload         4
      59: aload         7
      61: checkcast     #75                 // class java/lang/String
      64: astore        8
      66: astore        14
      68: iconst_0
      69: istore        9
      71: aload         8
      73: checkcast     #77                 // class java/lang/CharSequence
      76: iconst_1
      77: anewarray     #75                 // class java/lang/String
      80: astore        10
      82: aload         10
      84: iconst_0
      85: ldc           #79                 // String :
      87: aastore
      88: aload         10
      90: iconst_0
      91: iconst_0
      92: bipush        6
      94: aconst_null
      95: invokestatic  #85                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      98: aload         14
     100: swap
     101: invokeinterface #89,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     106: pop
     107: goto          38
     110: aload         4
     112: checkcast     #91                 // class java/util/List
     115: nop
     116: checkcast     #45                 // class java/lang/Iterable
     119: astore_1
     120: nop
     121: iconst_0
     122: istore_2
     123: aload_1
     124: bipush        10
     126: invokestatic  #53                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     129: invokestatic  #97                 // Method kotlin/collections/MapsKt.mapCapacity:(I)I
     132: bipush        16
     134: invokestatic  #103                // Method kotlin/ranges/RangesKt.coerceAtLeast:(II)I
     137: istore_3
     138: aload_1
     139: astore        4
     141: new           #105                // class java/util/LinkedHashMap
     144: dup
     145: iload_3
     146: invokespecial #106                // Method java/util/LinkedHashMap."<init>":(I)V
     149: checkcast     #108                // class java/util/Map
     152: astore        5
     154: iconst_0
     155: istore        6
     157: aload         4
     159: invokeinterface #63,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     164: astore        7
     166: aload         7
     168: invokeinterface #69,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     173: ifeq          269
     176: aload         7
     178: invokeinterface #73,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     183: astore        8
     185: aload         5
     187: astore        9
     189: aload         8
     191: checkcast     #91                 // class java/util/List
     194: astore        10
     196: iconst_0
     197: istore        11
     199: aload         10
     201: iconst_0
     202: invokeinterface #112,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     207: checkcast     #75                 // class java/lang/String
     210: astore        12
     212: aload         10
     214: iconst_1
     215: invokeinterface #112,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     220: checkcast     #75                 // class java/lang/String
     223: astore        13
     225: aload         12
     227: new           #114                // class Day21Kt$main$Monkey
     230: dup
     231: aload         12
     233: aload         13
     235: invokestatic  #118                // Method kotlin/text/StringsKt.toLongOrNull:(Ljava/lang/String;)Ljava/lang/Long;
     238: aload         13
     240: invokespecial #121                // Method Day21Kt$main$Monkey."<init>":(Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;)V
     243: invokestatic  #127                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     246: astore        10
     248: aload         9
     250: aload         10
     252: invokevirtual #132                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     255: aload         10
     257: invokevirtual #135                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     260: invokeinterface #139,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     265: pop
     266: goto          166
     269: aload         5
     271: nop
     272: areturn

  private static final long main$part1(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: invokestatic  #169                // Method main$parseMonkeys:(Ljava/util/List;)Ljava/util/Map;
       4: astore_1
       5: iconst_0
       6: istore_2
       7: aload_1
       8: ldc           #171                // String root
      10: invokeinterface #174,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
      15: dup
      16: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      19: checkcast     #114                // class Day21Kt$main$Monkey
      22: aload_1
      23: invokevirtual #183                // Method Day21Kt$main$Monkey.yell:(Ljava/util/Map;)J
      26: nop
      27: lreturn

  private static final long main$part2(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: invokestatic  #169                // Method main$parseMonkeys:(Ljava/util/List;)Ljava/util/Map;
       4: astore_1
       5: aload_1
       6: ldc           #187                // String humn
       8: invokeinterface #174,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
      13: dup
      14: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      17: checkcast     #114                // class Day21Kt$main$Monkey
      20: astore_2
      21: aload_1
      22: ldc           #171                // String root
      24: invokeinterface #174,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
      29: dup
      30: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      33: checkcast     #114                // class Day21Kt$main$Monkey
      36: astore_3
      37: aload_3
      38: invokevirtual #191                // Method Day21Kt$main$Monkey.getOperation:()Ljava/lang/String;
      41: checkcast     #77                 // class java/lang/CharSequence
      44: iconst_1
      45: anewarray     #75                 // class java/lang/String
      48: astore        5
      50: aload         5
      52: iconst_0
      53: ldc           #193                // String
      55: aastore
      56: aload         5
      58: iconst_0
      59: iconst_0
      60: bipush        6
      62: aconst_null
      63: invokestatic  #85                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      66: astore        4
      68: aload         4
      70: iconst_0
      71: invokeinterface #112,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      76: checkcast     #75                 // class java/lang/String
      79: astore        5
      81: aload         4
      83: iconst_2
      84: invokeinterface #112,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      89: checkcast     #75                 // class java/lang/String
      92: astore        6
      94: aload_1
      95: aload         5
      97: invokeinterface #174,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     102: dup
     103: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     106: checkcast     #114                // class Day21Kt$main$Monkey
     109: astore        7
     111: aload_1
     112: aload         6
     114: invokeinterface #174,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     119: dup
     120: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     123: checkcast     #114                // class Day21Kt$main$Monkey
     126: astore        8
     128: aload         7
     130: ldc           #187                // String humn
     132: aload_1
     133: invokevirtual #197                // Method Day21Kt$main$Monkey.dependsOn:(Ljava/lang/String;Ljava/util/Map;)Z
     136: istore        9
     138: iload         9
     140: ifeq          152
     143: aload         8
     145: aload_1
     146: invokevirtual #183                // Method Day21Kt$main$Monkey.yell:(Ljava/util/Map;)J
     149: goto          158
     152: aload         7
     154: aload_1
     155: invokevirtual #183                // Method Day21Kt$main$Monkey.yell:(Ljava/util/Map;)J
     158: lstore        10
     160: iload         9
     162: ifeq          170
     165: aload         7
     167: goto          172
     170: aload         8
     172: astore        12
     174: aload         12
     176: lload         10
     178: ldc           #187                // String humn
     180: aload_1
     181: invokevirtual #201                // Method Day21Kt$main$Monkey.fix:(JLjava/lang/String;Ljava/util/Map;)V
     184: aload_2
     185: invokevirtual #205                // Method Day21Kt$main$Monkey.getValue:()Ljava/lang/Long;
     188: dup
     189: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     192: invokevirtual #209                // Method java/lang/Long.longValue:()J
     195: lreturn

  public static final long access$main$part1(java.util.List);
    Code:
       0: aload_0
       1: invokestatic  #223                // Method main$part1:(Ljava/util/List;)J
       4: lreturn

  public static final long access$main$part2(java.util.List);
    Code:
       0: aload_0
       1: invokestatic  #226                // Method main$part2:(Ljava/util/List;)J
       4: lreturn
}

Compiled from "Day21.kt"
final class Day21Kt$main$1 extends kotlin.jvm.internal.FunctionReferenceImpl implements kotlin.jvm.functions.Function1<java.util.List<? extends java.lang.String>, java.lang.Long> {
  public static final Day21Kt$main$1 INSTANCE;

  Day21Kt$main$1();
    Code:
       0: aload_0
       1: iconst_1
       2: ldc           #11                 // class kotlin/jvm/internal/Intrinsics$Kotlin
       4: ldc           #13                 // String part1
       6: ldc           #15                 // String main$part1(Ljava/util/List;)J
       8: iconst_0
       9: invokespecial #18                 // Method kotlin/jvm/internal/FunctionReferenceImpl."<init>":(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
      12: return

  public final java.lang.Long invoke(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #25                 // String p0
       3: invokestatic  #31                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: invokestatic  #37                 // Method Day21Kt.access$main$part1:(Ljava/util/List;)J
      10: invokestatic  #43                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      13: areturn

  public java.lang.Object invoke(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: checkcast     #47                 // class java/util/List
       5: invokevirtual #49                 // Method invoke:(Ljava/util/List;)Ljava/lang/Long;
       8: areturn

  static {};
    Code:
       0: new           #2                  // class Day21Kt$main$1
       3: dup
       4: invokespecial #54                 // Method "<init>":()V
       7: putstatic     #57                 // Field INSTANCE:LDay21Kt$main$1;
      10: return
}

Compiled from "Day21.kt"
public final class Day21Kt$main$Monkey {
  private final java.lang.String name;

  private java.lang.Long value;

  private final java.lang.String operation;

  public Day21Kt$main$Monkey(java.lang.String, java.lang.Long, java.lang.String);
    Code:
       0: aload_1
       1: ldc           #8                  // String name
       3: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_3
       7: ldc           #16                 // String operation
       9: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: invokespecial #19                 // Method java/lang/Object."<init>":()V
      16: aload_0
      17: aload_1
      18: putfield      #22                 // Field name:Ljava/lang/String;
      21: aload_0
      22: aload_2
      23: putfield      #26                 // Field value:Ljava/lang/Long;
      26: aload_0
      27: aload_3
      28: putfield      #28                 // Field operation:Ljava/lang/String;
      31: return

  public final java.lang.String getName();
    Code:
       0: aload_0
       1: getfield      #22                 // Field name:Ljava/lang/String;
       4: areturn

  public final java.lang.Long getValue();
    Code:
       0: aload_0
       1: getfield      #26                 // Field value:Ljava/lang/Long;
       4: areturn

  public final void setValue(java.lang.Long);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #26                 // Field value:Ljava/lang/Long;
       5: return

  public final java.lang.String getOperation();
    Code:
       0: aload_0
       1: getfield      #28                 // Field operation:Ljava/lang/String;
       4: areturn

  public final long yell(java.util.Map<java.lang.String, Day21Kt$main$Monkey>);
    Code:
       0: aload_1
       1: ldc           #43                 // String monkeys
       3: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: getfield      #26                 // Field value:Ljava/lang/Long;
      10: ifnull        27
      13: aload_0
      14: getfield      #26                 // Field value:Ljava/lang/Long;
      17: dup
      18: invokestatic  #47                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      21: invokevirtual #53                 // Method java/lang/Long.longValue:()J
      24: goto          288
      27: aload_0
      28: getfield      #28                 // Field operation:Ljava/lang/String;
      31: checkcast     #55                 // class java/lang/CharSequence
      34: iconst_1
      35: anewarray     #57                 // class java/lang/String
      38: astore_3
      39: aload_3
      40: iconst_0
      41: ldc           #59                 // String
      43: aastore
      44: aload_3
      45: iconst_0
      46: iconst_0
      47: bipush        6
      49: aconst_null
      50: invokestatic  #65                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      53: astore_2
      54: aload_2
      55: iconst_0
      56: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      61: checkcast     #57                 // class java/lang/String
      64: astore_3
      65: aload_2
      66: iconst_1
      67: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      72: checkcast     #57                 // class java/lang/String
      75: astore        4
      77: aload_2
      78: iconst_2
      79: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      84: checkcast     #57                 // class java/lang/String
      87: astore        5
      89: aload_1
      90: aload_3
      91: invokeinterface #76,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
      96: dup
      97: invokestatic  #47                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     100: checkcast     #2                  // class Day21Kt$main$Monkey
     103: aload_1
     104: invokevirtual #78                 // Method yell:(Ljava/util/Map;)J
     107: lstore        6
     109: aload_1
     110: aload         5
     112: invokeinterface #76,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     117: dup
     118: invokestatic  #47                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     121: checkcast     #2                  // class Day21Kt$main$Monkey
     124: aload_1
     125: invokevirtual #78                 // Method yell:(Ljava/util/Map;)J
     128: lstore        8
     130: aload         4
     132: astore        10
     134: aload         10
     136: invokevirtual #82                 // Method java/lang/String.hashCode:()I
     139: tableswitch   { // 42 to 47
                    42: 176
                    43: 189
                    44: 260
                    45: 202
                    46: 260
                    47: 215
               default: 260
          }
     176: aload         10
     178: ldc           #84                 // String *
     180: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     183: ifne          244
     186: goto          260
     189: aload         10
     191: ldc           #90                 // String +
     193: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     196: ifne          228
     199: goto          260
     202: aload         10
     204: ldc           #92                 // String -
     206: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     209: ifne          236
     212: goto          260
     215: aload         10
     217: ldc           #94                 // String /
     219: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     222: ifne          252
     225: goto          260
     228: lload         6
     230: lload         8
     232: ladd
     233: goto          288
     236: lload         6
     238: lload         8
     240: lsub
     241: goto          288
     244: lload         6
     246: lload         8
     248: lmul
     249: goto          288
     252: lload         6
     254: lload         8
     256: ldiv
     257: goto          288
     260: new           #96                 // class java/lang/Exception
     263: dup
     264: new           #98                 // class java/lang/StringBuilder
     267: dup
     268: invokespecial #99                 // Method java/lang/StringBuilder."<init>":()V
     271: ldc           #101                // String Unknown operator
     273: invokevirtual #105                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     276: aload         4
     278: invokevirtual #105                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     281: invokevirtual #108                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     284: invokespecial #111                // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
     287: athrow
     288: lreturn

  public final boolean dependsOn(java.lang.String, java.util.Map<java.lang.String, Day21Kt$main$Monkey>);
    Code:
       0: aload_1
       1: ldc           #8                  // String name
       3: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #43                 // String monkeys
       9: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: getfield      #22                 // Field name:Ljava/lang/String;
      16: aload_1
      17: invokestatic  #125                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      20: ifeq          25
      23: iconst_1
      24: ireturn
      25: aload_0
      26: getfield      #26                 // Field value:Ljava/lang/Long;
      29: ifnull        34
      32: iconst_0
      33: ireturn
      34: aload_0
      35: getfield      #28                 // Field operation:Ljava/lang/String;
      38: checkcast     #55                 // class java/lang/CharSequence
      41: iconst_1
      42: anewarray     #57                 // class java/lang/String
      45: astore        4
      47: aload         4
      49: iconst_0
      50: ldc           #59                 // String
      52: aastore
      53: aload         4
      55: iconst_0
      56: iconst_0
      57: bipush        6
      59: aconst_null
      60: invokestatic  #65                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      63: astore_3
      64: aload_3
      65: iconst_0
      66: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      71: checkcast     #57                 // class java/lang/String
      74: astore        4
      76: aload_3
      77: iconst_2
      78: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      83: checkcast     #57                 // class java/lang/String
      86: astore        5
      88: aload         4
      90: aload_1
      91: invokestatic  #125                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      94: ifne          106
      97: aload         5
      99: aload_1
     100: invokestatic  #125                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     103: ifeq          108
     106: iconst_1
     107: ireturn
     108: aload_2
     109: aload         4
     111: invokeinterface #76,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     116: dup
     117: invokestatic  #47                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     120: checkcast     #2                  // class Day21Kt$main$Monkey
     123: aload_1
     124: aload_2
     125: invokevirtual #127                // Method dependsOn:(Ljava/lang/String;Ljava/util/Map;)Z
     128: istore        6
     130: aload_2
     131: aload         5
     133: invokeinterface #76,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     138: dup
     139: invokestatic  #47                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     142: checkcast     #2                  // class Day21Kt$main$Monkey
     145: aload_1
     146: aload_2
     147: invokevirtual #127                // Method dependsOn:(Ljava/lang/String;Ljava/util/Map;)Z
     150: istore        7
     152: iload         6
     154: ifne          162
     157: iload         7
     159: ifeq          166
     162: iconst_1
     163: goto          167
     166: iconst_0
     167: ireturn

  public final void fix(long, java.lang.String, java.util.Map<java.lang.String, Day21Kt$main$Monkey>);
    Code:
       0: aload_3
       1: ldc           #133                // String nodeToFix
       3: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload         4
       8: ldc           #43                 // String monkeys
      10: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      13: aload_0
      14: getfield      #22                 // Field name:Ljava/lang/String;
      17: aload_3
      18: invokestatic  #125                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      21: ifeq          33
      24: aload_0
      25: lload_1
      26: invokestatic  #137                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      29: putfield      #26                 // Field value:Ljava/lang/Long;
      32: return
      33: aload_0
      34: getfield      #26                 // Field value:Ljava/lang/Long;
      37: ifnull        50
      40: new           #96                 // class java/lang/Exception
      43: dup
      44: ldc           #139                // String Should not be fixing here!
      46: invokespecial #111                // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
      49: athrow
      50: aload_0
      51: getfield      #28                 // Field operation:Ljava/lang/String;
      54: checkcast     #55                 // class java/lang/CharSequence
      57: iconst_1
      58: anewarray     #57                 // class java/lang/String
      61: astore        6
      63: aload         6
      65: iconst_0
      66: ldc           #59                 // String
      68: aastore
      69: aload         6
      71: iconst_0
      72: iconst_0
      73: bipush        6
      75: aconst_null
      76: invokestatic  #65                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      79: astore        5
      81: aload         5
      83: iconst_0
      84: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      89: checkcast     #57                 // class java/lang/String
      92: astore        6
      94: aload         5
      96: iconst_1
      97: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     102: checkcast     #57                 // class java/lang/String
     105: astore        7
     107: aload         5
     109: iconst_2
     110: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     115: checkcast     #57                 // class java/lang/String
     118: astore        8
     120: aload         4
     122: aload         6
     124: invokeinterface #76,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     129: dup
     130: invokestatic  #47                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     133: checkcast     #2                  // class Day21Kt$main$Monkey
     136: astore        9
     138: aload         4
     140: aload         8
     142: invokeinterface #76,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     147: dup
     148: invokestatic  #47                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     151: checkcast     #2                  // class Day21Kt$main$Monkey
     154: astore        10
     156: aload         9
     158: aload_3
     159: aload         4
     161: invokevirtual #127                // Method dependsOn:(Ljava/lang/String;Ljava/util/Map;)Z
     164: istore        11
     166: iload         11
     168: ifeq          181
     171: aload         10
     173: aload         4
     175: invokevirtual #78                 // Method yell:(Ljava/util/Map;)J
     178: goto          188
     181: aload         9
     183: aload         4
     185: invokevirtual #78                 // Method yell:(Ljava/util/Map;)J
     188: lstore        12
     190: iload         11
     192: ifeq          384
     195: aload         7
     197: astore        14
     199: aload         14
     201: invokevirtual #82                 // Method java/lang/String.hashCode:()I
     204: tableswitch   { // 42 to 47
                    42: 244
                    43: 257
                    44: 356
                    45: 270
                    46: 356
                    47: 283
               default: 356
          }
     244: aload         14
     246: ldc           #84                 // String *
     248: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     251: ifne          326
     254: goto          356
     257: aload         14
     259: ldc           #90                 // String +
     261: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     264: ifne          296
     267: goto          356
     270: aload         14
     272: ldc           #92                 // String -
     274: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     277: ifne          311
     280: goto          356
     283: aload         14
     285: ldc           #94                 // String /
     287: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     290: ifne          341
     293: goto          356
     296: aload         9
     298: lload_1
     299: lload         12
     301: lsub
     302: aload_3
     303: aload         4
     305: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     308: goto          572
     311: aload         9
     313: lload_1
     314: lload         12
     316: ladd
     317: aload_3
     318: aload         4
     320: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     323: goto          572
     326: aload         9
     328: lload_1
     329: lload         12
     331: ldiv
     332: aload_3
     333: aload         4
     335: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     338: goto          572
     341: aload         9
     343: lload_1
     344: lload         12
     346: lmul
     347: aload_3
     348: aload         4
     350: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     353: goto          572
     356: new           #96                 // class java/lang/Exception
     359: dup
     360: new           #98                 // class java/lang/StringBuilder
     363: dup
     364: invokespecial #99                 // Method java/lang/StringBuilder."<init>":()V
     367: ldc           #101                // String Unknown operator
     369: invokevirtual #105                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     372: aload         7
     374: invokevirtual #105                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     377: invokevirtual #108                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     380: invokespecial #111                // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
     383: athrow
     384: aload         7
     386: astore        14
     388: aload         14
     390: invokevirtual #82                 // Method java/lang/String.hashCode:()I
     393: tableswitch   { // 42 to 47
                    42: 432
                    43: 445
                    44: 544
                    45: 458
                    46: 544
                    47: 471
               default: 544
          }
     432: aload         14
     434: ldc           #84                 // String *
     436: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     439: ifne          514
     442: goto          544
     445: aload         14
     447: ldc           #90                 // String +
     449: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     452: ifne          484
     455: goto          544
     458: aload         14
     460: ldc           #92                 // String -
     462: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     465: ifne          499
     468: goto          544
     471: aload         14
     473: ldc           #94                 // String /
     475: invokevirtual #88                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
     478: ifne          529
     481: goto          544
     484: aload         10
     486: lload_1
     487: lload         12
     489: lsub
     490: aload_3
     491: aload         4
     493: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     496: goto          572
     499: aload         10
     501: lload         12
     503: lload_1
     504: lsub
     505: aload_3
     506: aload         4
     508: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     511: goto          572
     514: aload         10
     516: lload_1
     517: lload         12
     519: ldiv
     520: aload_3
     521: aload         4
     523: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     526: goto          572
     529: aload         10
     531: lload         12
     533: lload_1
     534: ldiv
     535: aload_3
     536: aload         4
     538: invokevirtual #141                // Method fix:(JLjava/lang/String;Ljava/util/Map;)V
     541: goto          572
     544: new           #96                 // class java/lang/Exception
     547: dup
     548: new           #98                 // class java/lang/StringBuilder
     551: dup
     552: invokespecial #99                 // Method java/lang/StringBuilder."<init>":()V
     555: ldc           #143                // String Unknown operation
     557: invokevirtual #105                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     560: aload         7
     562: invokevirtual #105                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     565: invokevirtual #108                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     568: invokespecial #111                // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
     571: athrow
     572: return
}


fun main() {
    abstract class FileSystem {
        abstract fun size(): Int
    }

    data class Directory(val path: String, val parent: Directory? = null) : FileSystem() {
        val files = mutableMapOf<String, FileSystem>()
        override fun size() = files.values.sumOf { it.size() }
    }

    data class File(val size: Int) : FileSystem() {
        override fun size() = size
    }

    fun parseFileSystem(input: List<String>): Map<String, Directory> {
        val directoryMap = mutableMapOf("/" to Directory("/"))
        var currentDirectory = directoryMap.values.first()

        for (cmd in input) {
            if (cmd.startsWith("\$ cd")) {
                val where = cmd.split("cd ").last().trim()

                currentDirectory = when (where) {
                    "/" -> directoryMap["/"]!!
                    ".." -> currentDirectory.parent!!
                    else -> directoryMap.getOrPut(currentDirectory.path + where + "/") {
                        Directory(currentDirectory.path + where + "/", currentDirectory)
                    }
                }
            } else if (cmd.startsWith("\$ ls")) {
//                println("ls")
            } else if (cmd.startsWith("dir")) {
                val (_, name) = cmd.split(" ")

                currentDirectory.files.putIfAbsent(name, directoryMap.getOrPut(currentDirectory.path + name + "/") {
                    Directory(currentDirectory.path + name + "/", currentDirectory)
                })
            } else if (cmd.first().isDigit()) {
                val (size, file) = cmd.split(" ")

                currentDirectory.files.putIfAbsent(file, File(size.toInt()))
            } else
                throw Exception("Unknown command $cmd")
        }

        return directoryMap
    }

    fun part1(input: List<String>) = parseFileSystem(input).values
        .map { it.size() }
        .filter { it <= 100000 }
        .sum()

    fun part2(input: List<String>): Int {
        val fs = parseFileSystem(input)

        val totalSize = 70000000
        val required = 30000000
        val currentUsed = fs["/"]!!.size()
        val currentFree = totalSize - currentUsed
        val missing = required - currentFree

        return fs.values
            .map { it.size() }
            .filter { it >= missing }
            .min()
    }

    test(
        day = 7,
        testTarget1 = 95437,
        testTarget2 = 24933642,
        part1 = ::part1,
        part2 = ::part2,
    )
}

Compiled from "Day07.kt"
public abstract class Day07Kt$main$FileSystem {
  public Day07Kt$main$FileSystem();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public abstract int size();
}

Compiled from "Day07.kt"
public final class Day07Kt {
  public static final void main();
    Code:
       0: bipush        7
       2: ldc           #7                  // int 95437
       4: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       7: ldc           #14                 // int 24933642
       9: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      12: getstatic     #20                 // Field Day07Kt$main$1.INSTANCE:LDay07Kt$main$1;
      15: checkcast     #22                 // class kotlin/jvm/functions/Function1
      18: getstatic     #27                 // Field Day07Kt$main$2.INSTANCE:LDay07Kt$main$2;
      21: checkcast     #22                 // class kotlin/jvm/functions/Function1
      24: invokestatic  #33                 // Method UtilsKt.test:(ILjava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
      27: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #36                 // Method main:()V
       3: return

  private static final java.util.Map<java.lang.String, Day07Kt$main$Directory> main$parseFileSystem(java.util.List<java.lang.String>);
    Code:
       0: iconst_1
       1: anewarray     #43                 // class kotlin/Pair
       4: astore_2
       5: aload_2
       6: iconst_0
       7: ldc           #45                 // String /
       9: new           #47                 // class Day07Kt$main$Directory
      12: dup
      13: ldc           #45                 // String /
      15: aconst_null
      16: iconst_2
      17: aconst_null
      18: invokespecial #51                 // Method Day07Kt$main$Directory."<init>":(Ljava/lang/String;LDay07Kt$main$Directory;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
      21: invokestatic  #57                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
      24: aastore
      25: aload_2
      26: invokestatic  #63                 // Method kotlin/collections/MapsKt.mutableMapOf:([Lkotlin/Pair;)Ljava/util/Map;
      29: astore_1
      30: aconst_null
      31: astore_2
      32: aload_1
      33: invokeinterface #69,  1           // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
      38: checkcast     #71                 // class java/lang/Iterable
      41: invokestatic  #77                 // Method kotlin/collections/CollectionsKt.first:(Ljava/lang/Iterable;)Ljava/lang/Object;
      44: astore_2
      45: aload_0
      46: invokeinterface #83,  1           // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
      51: astore_3
      52: aload_3
      53: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      58: ifeq          653
      61: aload_3
      62: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      67: checkcast     #95                 // class java/lang/String
      70: astore        4
      72: aload         4
      74: ldc           #97                 // String $ cd
      76: iconst_0
      77: iconst_2
      78: aconst_null
      79: invokestatic  #103                // Method kotlin/text/StringsKt.startsWith$default:(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z
      82: ifeq          312
      85: aload         4
      87: checkcast     #105                // class java/lang/CharSequence
      90: iconst_1
      91: anewarray     #95                 // class java/lang/String
      94: astore        6
      96: aload         6
      98: iconst_0
      99: ldc           #107                // String cd
     101: aastore
     102: aload         6
     104: iconst_0
     105: iconst_0
     106: bipush        6
     108: aconst_null
     109: invokestatic  #111                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     112: invokestatic  #115                // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
     115: checkcast     #95                 // class java/lang/String
     118: checkcast     #105                // class java/lang/CharSequence
     121: invokestatic  #119                // Method kotlin/text/StringsKt.trim:(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
     124: invokevirtual #123                // Method java/lang/Object.toString:()Ljava/lang/String;
     127: astore        5
     129: aload         5
     131: astore        6
     133: aload         6
     135: ldc           #45                 // String /
     137: invokestatic  #129                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     140: ifeq          161
     143: aload_1
     144: ldc           #45                 // String /
     146: invokeinterface #133,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     151: dup
     152: invokestatic  #137                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     155: checkcast     #47                 // class Day07Kt$main$Directory
     158: goto          308
     161: aload         6
     163: ldc           #139                // String ..
     165: invokestatic  #129                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     168: ifeq          185
     171: aload_2
     172: checkcast     #47                 // class Day07Kt$main$Directory
     175: invokevirtual #143                // Method Day07Kt$main$Directory.getParent:()LDay07Kt$main$Directory;
     178: dup
     179: invokestatic  #137                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     182: goto          308
     185: aload_1
     186: astore        7
     188: new           #145                // class java/lang/StringBuilder
     191: dup
     192: invokespecial #147                // Method java/lang/StringBuilder."<init>":()V
     195: aload_2
     196: checkcast     #47                 // class Day07Kt$main$Directory
     199: invokevirtual #150                // Method Day07Kt$main$Directory.getPath:()Ljava/lang/String;
     202: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     205: aload         5
     207: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     210: bipush        47
     212: invokevirtual #157                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     215: invokevirtual #158                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     218: astore        8
     220: iconst_0
     221: istore        9
     223: aload         7
     225: aload         8
     227: invokeinterface #133,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     232: astore        10
     234: aload         10
     236: ifnonnull     302
     239: iconst_0
     240: istore        11
     242: new           #47                 // class Day07Kt$main$Directory
     245: dup
     246: new           #145                // class java/lang/StringBuilder
     249: dup
     250: invokespecial #147                // Method java/lang/StringBuilder."<init>":()V
     253: aload_2
     254: checkcast     #47                 // class Day07Kt$main$Directory
     257: invokevirtual #150                // Method Day07Kt$main$Directory.getPath:()Ljava/lang/String;
     260: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     263: aload         5
     265: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     268: bipush        47
     270: invokevirtual #157                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     273: invokevirtual #158                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     276: aload_2
     277: checkcast     #47                 // class Day07Kt$main$Directory
     280: invokespecial #161                // Method Day07Kt$main$Directory."<init>":(Ljava/lang/String;LDay07Kt$main$Directory;)V
     283: astore        12
     285: aload         7
     287: aload         8
     289: aload         12
     291: invokeinterface #165,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     296: pop
     297: aload         12
     299: goto          304
     302: aload         10
     304: nop
     305: checkcast     #47                 // class Day07Kt$main$Directory
     308: astore_2
     309: goto          52
     312: aload         4
     314: ldc           #167                // String $ ls
     316: iconst_0
     317: iconst_2
     318: aconst_null
     319: invokestatic  #103                // Method kotlin/text/StringsKt.startsWith$default:(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z
     322: ifne          52
     325: aload         4
     327: ldc           #169                // String dir
     329: iconst_0
     330: iconst_2
     331: aconst_null
     332: invokestatic  #103                // Method kotlin/text/StringsKt.startsWith$default:(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z
     335: ifeq          526
     338: aload         4
     340: checkcast     #105                // class java/lang/CharSequence
     343: iconst_1
     344: anewarray     #95                 // class java/lang/String
     347: astore        6
     349: aload         6
     351: iconst_0
     352: ldc           #171                // String
     354: aastore
     355: aload         6
     357: iconst_0
     358: iconst_0
     359: bipush        6
     361: aconst_null
     362: invokestatic  #111                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     365: iconst_1
     366: invokeinterface #174,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     371: checkcast     #95                 // class java/lang/String
     374: astore        6
     376: aload_2
     377: checkcast     #47                 // class Day07Kt$main$Directory
     380: invokevirtual #178                // Method Day07Kt$main$Directory.getFiles:()Ljava/util/Map;
     383: aload         6
     385: aload_1
     386: astore        7
     388: new           #145                // class java/lang/StringBuilder
     391: dup
     392: invokespecial #147                // Method java/lang/StringBuilder."<init>":()V
     395: aload_2
     396: checkcast     #47                 // class Day07Kt$main$Directory
     399: invokevirtual #150                // Method Day07Kt$main$Directory.getPath:()Ljava/lang/String;
     402: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     405: aload         6
     407: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     410: bipush        47
     412: invokevirtual #157                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     415: invokevirtual #158                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     418: astore        8
     420: iconst_0
     421: istore        9
     423: aload         7
     425: aload         8
     427: invokeinterface #133,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     432: astore        10
     434: aload         10
     436: ifnonnull     514
     439: astore        14
     441: astore        13
     443: iconst_0
     444: istore        11
     446: new           #47                 // class Day07Kt$main$Directory
     449: dup
     450: new           #145                // class java/lang/StringBuilder
     453: dup
     454: invokespecial #147                // Method java/lang/StringBuilder."<init>":()V
     457: aload_2
     458: checkcast     #47                 // class Day07Kt$main$Directory
     461: invokevirtual #150                // Method Day07Kt$main$Directory.getPath:()Ljava/lang/String;
     464: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     467: aload         6
     469: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     472: bipush        47
     474: invokevirtual #157                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     477: invokevirtual #158                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     480: aload_2
     481: checkcast     #47                 // class Day07Kt$main$Directory
     484: invokespecial #161                // Method Day07Kt$main$Directory."<init>":(Ljava/lang/String;LDay07Kt$main$Directory;)V
     487: astore        15
     489: aload         13
     491: aload         14
     493: aload         15
     495: astore        12
     497: aload         7
     499: aload         8
     501: aload         12
     503: invokeinterface #165,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     508: pop
     509: aload         12
     511: goto          516
     514: aload         10
     516: nop
     517: invokeinterface #181,  3          // InterfaceMethod java/util/Map.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     522: pop
     523: goto          52
     526: aload         4
     528: checkcast     #105                // class java/lang/CharSequence
     531: invokestatic  #184                // Method kotlin/text/StringsKt.first:(Ljava/lang/CharSequence;)C
     534: invokestatic  #190                // Method java/lang/Character.isDigit:(C)Z
     537: ifeq          625
     540: aload         4
     542: checkcast     #105                // class java/lang/CharSequence
     545: iconst_1
     546: anewarray     #95                 // class java/lang/String
     549: astore        6
     551: aload         6
     553: iconst_0
     554: ldc           #171                // String
     556: aastore
     557: aload         6
     559: iconst_0
     560: iconst_0
     561: bipush        6
     563: aconst_null
     564: invokestatic  #111                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     567: astore        5
     569: aload         5
     571: iconst_0
     572: invokeinterface #174,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     577: checkcast     #95                 // class java/lang/String
     580: astore        6
     582: aload         5
     584: iconst_1
     585: invokeinterface #174,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     590: checkcast     #95                 // class java/lang/String
     593: astore        7
     595: aload_2
     596: checkcast     #47                 // class Day07Kt$main$Directory
     599: invokevirtual #178                // Method Day07Kt$main$Directory.getFiles:()Ljava/util/Map;
     602: aload         7
     604: new           #192                // class Day07Kt$main$File
     607: dup
     608: aload         6
     610: invokestatic  #196                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     613: invokespecial #199                // Method Day07Kt$main$File."<init>":(I)V
     616: invokeinterface #181,  3          // InterfaceMethod java/util/Map.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     621: pop
     622: goto          52
     625: new           #201                // class java/lang/Exception
     628: dup
     629: new           #145                // class java/lang/StringBuilder
     632: dup
     633: invokespecial #147                // Method java/lang/StringBuilder."<init>":()V
     636: ldc           #203                // String Unknown command
     638: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     641: aload         4
     643: invokevirtual #154                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     646: invokevirtual #158                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     649: invokespecial #206                // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
     652: athrow
     653: aload_1
     654: areturn

  private static final int main$part1(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: invokestatic  #231                // Method main$parseFileSystem:(Ljava/util/List;)Ljava/util/Map;
       4: invokeinterface #69,  1           // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
       9: checkcast     #71                 // class java/lang/Iterable
      12: astore_1
      13: nop
      14: iconst_0
      15: istore_2
      16: aload_1
      17: astore_3
      18: new           #233                // class java/util/ArrayList
      21: dup
      22: aload_1
      23: bipush        10
      25: invokestatic  #237                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      28: invokespecial #238                // Method java/util/ArrayList."<init>":(I)V
      31: checkcast     #240                // class java/util/Collection
      34: astore        4
      36: iconst_0
      37: istore        5
      39: aload_3
      40: invokeinterface #241,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      45: astore        6
      47: aload         6
      49: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      54: ifeq          100
      57: aload         6
      59: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      64: astore        7
      66: aload         4
      68: aload         7
      70: checkcast     #47                 // class Day07Kt$main$Directory
      73: astore        8
      75: astore        10
      77: iconst_0
      78: istore        9
      80: aload         8
      82: invokevirtual #244                // Method Day07Kt$main$Directory.size:()I
      85: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      88: aload         10
      90: swap
      91: invokeinterface #248,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
      96: pop
      97: goto          47
     100: aload         4
     102: checkcast     #79                 // class java/util/List
     105: nop
     106: checkcast     #71                 // class java/lang/Iterable
     109: astore_1
     110: nop
     111: iconst_0
     112: istore_2
     113: aload_1
     114: astore_3
     115: new           #233                // class java/util/ArrayList
     118: dup
     119: invokespecial #249                // Method java/util/ArrayList."<init>":()V
     122: checkcast     #240                // class java/util/Collection
     125: astore        4
     127: iconst_0
     128: istore        5
     130: aload_3
     131: invokeinterface #241,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     136: astore        6
     138: aload         6
     140: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     145: ifeq          198
     148: aload         6
     150: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     155: astore        7
     157: aload         7
     159: checkcast     #251                // class java/lang/Number
     162: invokevirtual #254                // Method java/lang/Number.intValue:()I
     165: istore        8
     167: iconst_0
     168: istore        9
     170: iload         8
     172: ldc           #255                // int 100000
     174: if_icmpgt     181
     177: iconst_1
     178: goto          182
     181: iconst_0
     182: ifeq          138
     185: aload         4
     187: aload         7
     189: invokeinterface #248,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     194: pop
     195: goto          138
     198: aload         4
     200: checkcast     #79                 // class java/util/List
     203: nop
     204: checkcast     #71                 // class java/lang/Iterable
     207: invokestatic  #259                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     210: ireturn

  private static final int main$part2(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: invokestatic  #231                // Method main$parseFileSystem:(Ljava/util/List;)Ljava/util/Map;
       4: astore_1
       5: ldc_w         #278                // int 70000000
       8: istore_2
       9: ldc_w         #279                // int 30000000
      12: istore_3
      13: aload_1
      14: ldc           #45                 // String /
      16: invokeinterface #133,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
      21: dup
      22: invokestatic  #137                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      25: checkcast     #47                 // class Day07Kt$main$Directory
      28: invokevirtual #244                // Method Day07Kt$main$Directory.size:()I
      31: istore        4
      33: iload_2
      34: iload         4
      36: isub
      37: istore        5
      39: iload_3
      40: iload         5
      42: isub
      43: istore        6
      45: aload_1
      46: invokeinterface #69,  1           // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
      51: checkcast     #71                 // class java/lang/Iterable
      54: astore        7
      56: nop
      57: iconst_0
      58: istore        8
      60: aload         7
      62: astore        9
      64: new           #233                // class java/util/ArrayList
      67: dup
      68: aload         7
      70: bipush        10
      72: invokestatic  #237                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      75: invokespecial #238                // Method java/util/ArrayList."<init>":(I)V
      78: checkcast     #240                // class java/util/Collection
      81: astore        10
      83: iconst_0
      84: istore        11
      86: aload         9
      88: invokeinterface #241,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      93: astore        12
      95: aload         12
      97: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     102: ifeq          148
     105: aload         12
     107: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     112: astore        13
     114: aload         10
     116: aload         13
     118: checkcast     #47                 // class Day07Kt$main$Directory
     121: astore        14
     123: astore        16
     125: iconst_0
     126: istore        15
     128: aload         14
     130: invokevirtual #244                // Method Day07Kt$main$Directory.size:()I
     133: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     136: aload         16
     138: swap
     139: invokeinterface #248,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     144: pop
     145: goto          95
     148: aload         10
     150: checkcast     #79                 // class java/util/List
     153: nop
     154: checkcast     #71                 // class java/lang/Iterable
     157: astore        7
     159: nop
     160: iconst_0
     161: istore        8
     163: aload         7
     165: astore        9
     167: new           #233                // class java/util/ArrayList
     170: dup
     171: invokespecial #249                // Method java/util/ArrayList."<init>":()V
     174: checkcast     #240                // class java/util/Collection
     177: astore        10
     179: iconst_0
     180: istore        11
     182: aload         9
     184: invokeinterface #241,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     189: astore        12
     191: aload         12
     193: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     198: ifeq          251
     201: aload         12
     203: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     208: astore        13
     210: aload         13
     212: checkcast     #251                // class java/lang/Number
     215: invokevirtual #254                // Method java/lang/Number.intValue:()I
     218: istore        14
     220: iconst_0
     221: istore        15
     223: iload         14
     225: iload         6
     227: if_icmplt     234
     230: iconst_1
     231: goto          235
     234: iconst_0
     235: ifeq          191
     238: aload         10
     240: aload         13
     242: invokeinterface #248,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     247: pop
     248: goto          191
     251: aload         10
     253: checkcast     #79                 // class java/util/List
     256: nop
     257: checkcast     #71                 // class java/lang/Iterable
     260: invokestatic  #283                // Method kotlin/collections/CollectionsKt.minOrThrow:(Ljava/lang/Iterable;)Ljava/lang/Comparable;
     263: checkcast     #251                // class java/lang/Number
     266: invokevirtual #254                // Method java/lang/Number.intValue:()I
     269: ireturn

  public static final int access$main$part1(java.util.List);
    Code:
       0: aload_0
       1: invokestatic  #294                // Method main$part1:(Ljava/util/List;)I
       4: ireturn

  public static final int access$main$part2(java.util.List);
    Code:
       0: aload_0
       1: invokestatic  #297                // Method main$part2:(Ljava/util/List;)I
       4: ireturn
}

Compiled from "Day07.kt"
public final class Day07Kt$main$Directory extends Day07Kt$main$FileSystem {
  private final java.lang.String path;

  private final Day07Kt$main$Directory parent;

  private final java.util.Map<java.lang.String, Day07Kt$main$FileSystem> files;

  public Day07Kt$main$Directory(java.lang.String, Day07Kt$main$Directory);
    Code:
       0: aload_1
       1: ldc           #8                  // String path
       3: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #17                 // Method Day07Kt$main$FileSystem."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #20                 // Field path:Ljava/lang/String;
      15: aload_0
      16: aload_2
      17: putfield      #24                 // Field parent:LDay07Kt$main$Directory;
      20: aload_0
      21: new           #26                 // class java/util/LinkedHashMap
      24: dup
      25: invokespecial #27                 // Method java/util/LinkedHashMap."<init>":()V
      28: checkcast     #29                 // class java/util/Map
      31: putfield      #33                 // Field files:Ljava/util/Map;
      34: return

  public Day07Kt$main$Directory(java.lang.String, Day07Kt$main$Directory, int, kotlin.jvm.internal.DefaultConstructorMarker);
    Code:
       0: iload_3
       1: iconst_2
       2: iand
       3: ifeq          8
       6: aconst_null
       7: astore_2
       8: aload_0
       9: aload_1
      10: aload_2
      11: invokespecial #37                 // Method "<init>":(Ljava/lang/String;LDay07Kt$main$Directory;)V
      14: return

  public final java.lang.String getPath();
    Code:
       0: aload_0
       1: getfield      #20                 // Field path:Ljava/lang/String;
       4: areturn

  public final Day07Kt$main$Directory getParent();
    Code:
       0: aload_0
       1: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
       4: areturn

  public final java.util.Map<java.lang.String, Day07Kt$main$FileSystem> getFiles();
    Code:
       0: aload_0
       1: getfield      #33                 // Field files:Ljava/util/Map;
       4: areturn

  public int size();
    Code:
       0: aload_0
       1: getfield      #33                 // Field files:Ljava/util/Map;
       4: invokeinterface #50,  1           // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
       9: checkcast     #52                 // class java/lang/Iterable
      12: astore_1
      13: iconst_0
      14: istore_2
      15: aload_1
      16: invokeinterface #56,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      21: astore_3
      22: aload_3
      23: invokeinterface #62,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          68
      31: aload_3
      32: invokeinterface #66,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      37: astore        4
      39: iload_2
      40: aload         4
      42: checkcast     #4                  // class Day07Kt$main$FileSystem
      45: astore        5
      47: istore        7
      49: iconst_0
      50: istore        6
      52: aload         5
      54: invokevirtual #68                 // Method Day07Kt$main$FileSystem.size:()I
      57: istore        8
      59: iload         7
      61: iload         8
      63: iadd
      64: istore_2
      65: goto          22
      68: iload_2
      69: ireturn

  public final java.lang.String component1();
    Code:
       0: aload_0
       1: getfield      #20                 // Field path:Ljava/lang/String;
       4: areturn

  public final Day07Kt$main$Directory component2();
    Code:
       0: aload_0
       1: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
       4: areturn

  public final Day07Kt$main$Directory copy(java.lang.String, Day07Kt$main$Directory);
    Code:
       0: aload_1
       1: ldc           #8                  // String path
       3: invokestatic  #14                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Day07Kt$main$Directory
       9: dup
      10: aload_1
      11: aload_2
      12: invokespecial #37                 // Method "<init>":(Ljava/lang/String;LDay07Kt$main$Directory;)V
      15: areturn

  public static Day07Kt$main$Directory copy$default(Day07Kt$main$Directory, java.lang.String, Day07Kt$main$Directory, int, java.lang.Object);
    Code:
       0: iload_3
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #20                 // Field path:Ljava/lang/String;
      10: astore_1
      11: iload_3
      12: iconst_2
      13: iand
      14: ifeq          22
      17: aload_0
      18: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
      21: astore_2
      22: aload_0
      23: aload_1
      24: aload_2
      25: invokevirtual #80                 // Method copy:(Ljava/lang/String;LDay07Kt$main$Directory;)LDay07Kt$main$Directory;
      28: areturn

  public java.lang.String toString();
    Code:
       0: new           #83                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #84                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #86                 // String Directory(path=
       9: invokevirtual #90                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #20                 // Field path:Ljava/lang/String;
      16: invokevirtual #90                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      19: ldc           #92                 // String , parent=
      21: invokevirtual #90                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
      28: invokevirtual #95                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      31: bipush        41
      33: invokevirtual #98                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      36: invokevirtual #100                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      39: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #20                 // Field path:Ljava/lang/String;
       4: invokevirtual #105                // Method java/lang/String.hashCode:()I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
      16: ifnonnull     23
      19: iconst_0
      20: goto          30
      23: aload_0
      24: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
      27: invokevirtual #106                // Method hashCode:()I
      30: iadd
      31: istore_1
      32: iload_1
      33: ireturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_1
       8: instanceof    #2                  // class Day07Kt$main$Directory
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day07Kt$main$Directory
      20: astore_2
      21: aload_0
      22: getfield      #20                 // Field path:Ljava/lang/String;
      25: aload_2
      26: getfield      #20                 // Field path:Ljava/lang/String;
      29: invokestatic  #113                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifne          37
      35: iconst_0
      36: ireturn
      37: aload_0
      38: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
      41: aload_2
      42: getfield      #24                 // Field parent:LDay07Kt$main$Directory;
      45: invokestatic  #113                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      48: ifne          53
      51: iconst_0
      52: ireturn
      53: iconst_1
      54: ireturn
}

Compiled from "Day07.kt"
final class Day07Kt$main$1 extends kotlin.jvm.internal.FunctionReferenceImpl implements kotlin.jvm.functions.Function1<java.util.List<? extends java.lang.String>, java.lang.Integer> {
  public static final Day07Kt$main$1 INSTANCE;

  Day07Kt$main$1();
    Code:
       0: aload_0
       1: iconst_1
       2: ldc           #11                 // class kotlin/jvm/internal/Intrinsics$Kotlin
       4: ldc           #13                 // String part1
       6: ldc           #15                 // String main$part1(Ljava/util/List;)I
       8: iconst_0
       9: invokespecial #18                 // Method kotlin/jvm/internal/FunctionReferenceImpl."<init>":(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
      12: return

  public final java.lang.Integer invoke(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #25                 // String p0
       3: invokestatic  #31                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: invokestatic  #37                 // Method Day07Kt.access$main$part1:(Ljava/util/List;)I
      10: invokestatic  #43                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      13: areturn

  public java.lang.Object invoke(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: checkcast     #47                 // class java/util/List
       5: invokevirtual #49                 // Method invoke:(Ljava/util/List;)Ljava/lang/Integer;
       8: areturn

  static {};
    Code:
       0: new           #2                  // class Day07Kt$main$1
       3: dup
       4: invokespecial #54                 // Method "<init>":()V
       7: putstatic     #57                 // Field INSTANCE:LDay07Kt$main$1;
      10: return
}

Compiled from "Day07.kt"
final class Day07Kt$main$2 extends kotlin.jvm.internal.FunctionReferenceImpl implements kotlin.jvm.functions.Function1<java.util.List<? extends java.lang.String>, java.lang.Integer> {
  public static final Day07Kt$main$2 INSTANCE;

  Day07Kt$main$2();
    Code:
       0: aload_0
       1: iconst_1
       2: ldc           #11                 // class kotlin/jvm/internal/Intrinsics$Kotlin
       4: ldc           #13                 // String part2
       6: ldc           #15                 // String main$part2(Ljava/util/List;)I
       8: iconst_0
       9: invokespecial #18                 // Method kotlin/jvm/internal/FunctionReferenceImpl."<init>":(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
      12: return

  public final java.lang.Integer invoke(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #25                 // String p0
       3: invokestatic  #31                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: invokestatic  #37                 // Method Day07Kt.access$main$part2:(Ljava/util/List;)I
      10: invokestatic  #43                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      13: areturn

  public java.lang.Object invoke(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: checkcast     #47                 // class java/util/List
       5: invokevirtual #49                 // Method invoke:(Ljava/util/List;)Ljava/lang/Integer;
       8: areturn

  static {};
    Code:
       0: new           #2                  // class Day07Kt$main$2
       3: dup
       4: invokespecial #54                 // Method "<init>":()V
       7: putstatic     #57                 // Field INSTANCE:LDay07Kt$main$2;
      10: return
}

Compiled from "Day07.kt"
public final class Day07Kt$main$File extends Day07Kt$main$FileSystem {
  private final int size;

  public Day07Kt$main$File(int);
    Code:
       0: aload_0
       1: invokespecial #9                  // Method Day07Kt$main$FileSystem."<init>":()V
       4: aload_0
       5: iload_1
       6: putfield      #13                 // Field size:I
       9: return

  public final int getSize();
    Code:
       0: aload_0
       1: getfield      #13                 // Field size:I
       4: ireturn

  public int size();
    Code:
       0: aload_0
       1: getfield      #13                 // Field size:I
       4: ireturn

  public final int component1();
    Code:
       0: aload_0
       1: getfield      #13                 // Field size:I
       4: ireturn

  public final Day07Kt$main$File copy(int);
    Code:
       0: new           #2                  // class Day07Kt$main$File
       3: dup
       4: iload_1
       5: invokespecial #22                 // Method "<init>":(I)V
       8: areturn

  public static Day07Kt$main$File copy$default(Day07Kt$main$File, int, int, java.lang.Object);
    Code:
       0: iload_2
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #13                 // Field size:I
      10: istore_1
      11: aload_0
      12: iload_1
      13: invokevirtual #26                 // Method copy:(I)LDay07Kt$main$File;
      16: areturn

  public java.lang.String toString();
    Code:
       0: new           #30                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #31                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #33                 // String File(size=
       9: invokevirtual #37                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #13                 // Field size:I
      16: invokevirtual #40                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      19: bipush        41
      21: invokevirtual #43                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      24: invokevirtual #45                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      27: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #13                 // Field size:I
       4: invokestatic  #51                 // Method java/lang/Integer.hashCode:(I)I
       7: ireturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_1
       8: instanceof    #2                  // class Day07Kt$main$File
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day07Kt$main$File
      20: astore_2
      21: aload_0
      22: getfield      #13                 // Field size:I
      25: aload_2
      26: getfield      #13                 // Field size:I
      29: if_icmpeq     34
      32: iconst_0
      33: ireturn
      34: iconst_1
      35: ireturn
}