import kotlin.time.ExperimentalTime
import kotlin.time.measureTime

class Day18 {
    data class Point(val xs: Array<Int>) {
        fun isBetween(minPoint: Point, maxPoint: Point): Boolean {
            return xs
                .zip(minPoint.xs)
                .zip(maxPoint.xs)
                .all { p ->
                    val x = p.first.first
                    val min = p.first.second
                    val max = p.second

                    x in min..max
                }
        }

        fun add(index: Int, value: Int): Point {
            val new = xs.copyOf()
            new[index] += value
            return Point(new)
        }

        override fun equals(other: Any?): Boolean {
            if (this === other) return true
            if (javaClass != other?.javaClass) return false

            other as Point

            if (!xs.contentEquals(other.xs)) return false

            return true
        }

        override fun hashCode(): Int {
            return xs.contentHashCode()
        }
    }

    fun parse(input: List<String>): Set<Point> {
        return input.map { line ->
            val xs = line.split(',').map { it.toInt() }.toTypedArray()
            Point(xs)
        }.toSet()
    }

    fun getNeighbors(point: Point): Set<Point> {
        val range = listOf(-1, 1)

        return point.xs.flatMapIndexed { index, _ -> range.map { dx -> point.add(index, dx) } }.toSet()
    }

    fun part1(input: List<String>): String {
        val points = parse(input)
        var result = 0L
        for (point in points) {
            var coverage = 6
            val neighbors = getNeighbors(point)
            coverage -= neighbors.count { points.contains(it) }
            result += coverage
        }

        return result.toString()
    }

    fun part2(input: List<String>): String {
        val points = parse(input)
        var result = 0L

        val dimension = points.first().xs.size
        val max = (0 until dimension).map { d -> points.maxOf { p -> p.xs[d] } }
        val min = (0 until dimension).map { d -> points.minOf { p -> p.xs[d] } }

        val maxPoint = Point(max.map { it + 1 }.toTypedArray())
        val minPoint = Point(min.map { it - 1 }.toTypedArray())

        val visited = mutableSetOf<Point>()
        val q = ArrayDeque(listOf(minPoint))

        while (q.isNotEmpty()) {
            val point = q.removeFirst()

            val neighbors = getNeighbors(point).filter { n -> n.isBetween(minPoint, maxPoint) }
            for (neighbor in neighbors) {
                if (neighbor in points) {
                    ++result
                } else if (neighbor !in visited) {
                    visited.add(neighbor)
                    q.addLast(neighbor)
                }
            }
        }

        return result.toString()
    }
}

@OptIn(ExperimentalTime::class)
@Suppress("DuplicatedCode")
fun main() {
    val solution = Day18()
    val name = solution.javaClass.name

    fun test() {
        val expected1 = "64"
        val expected2 = "58"

        val testInput = readInput("${name}_test")
        println("Test part 1")
        assert(solution.part1(testInput), expected1)
        println("> Passed")
        println("Test part 2")
        assert(solution.part2(testInput), expected2)
        println("> Passed")
        println()
        println("=================================")
        println()
    }

    fun run() {
        val input = readInput(name)
        val elapsed1 = measureTime {
            println("Part 1: " + solution.part1(input))
        }
        println("Elapsed: $elapsed1")
        println()

        val elapsed2 = measureTime {
            println("Part 2: " + solution.part2(input))
        }
        println("Elapsed: $elapsed2")
        println()
    }

    test()
    run()
}

Compiled from "Day18.kt"
public final class Day18$Point {
  private final java.lang.Integer[] xs;

  public Day18$Point(java.lang.Integer[]);
    Code:
       0: aload_1
       1: ldc           #9                  // String xs
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #18                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #21                 // Field xs:[Ljava/lang/Integer;
      15: return

  public final java.lang.Integer[] getXs();
    Code:
       0: aload_0
       1: getfield      #21                 // Field xs:[Ljava/lang/Integer;
       4: areturn

  public final boolean isBetween(Day18$Point, Day18$Point);
    Code:
       0: aload_1
       1: ldc           #29                 // String minPoint
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #31                 // String maxPoint
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: getfield      #21                 // Field xs:[Ljava/lang/Integer;
      16: aload_1
      17: getfield      #21                 // Field xs:[Ljava/lang/Integer;
      20: invokestatic  #37                 // Method kotlin/collections/ArraysKt.zip:([Ljava/lang/Object;[Ljava/lang/Object;)Ljava/util/List;
      23: checkcast     #39                 // class java/lang/Iterable
      26: aload_2
      27: getfield      #21                 // Field xs:[Ljava/lang/Integer;
      30: invokestatic  #44                 // Method kotlin/collections/CollectionsKt.zip:(Ljava/lang/Iterable;[Ljava/lang/Object;)Ljava/util/List;
      33: checkcast     #39                 // class java/lang/Iterable
      36: astore_3
      37: nop
      38: iconst_0
      39: istore        4
      41: aload_3
      42: instanceof    #46                 // class java/util/Collection
      45: ifeq          64
      48: aload_3
      49: checkcast     #46                 // class java/util/Collection
      52: invokeinterface #50,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
      57: ifeq          64
      60: iconst_1
      61: goto          183
      64: aload_3
      65: invokeinterface #54,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      70: astore        5
      72: aload         5
      74: invokeinterface #59,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      79: ifeq          182
      82: aload         5
      84: invokeinterface #63,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      89: astore        6
      91: aload         6
      93: checkcast     #65                 // class kotlin/Pair
      96: astore        7
      98: iconst_0
      99: istore        8
     101: aload         7
     103: invokevirtual #68                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     106: checkcast     #65                 // class kotlin/Pair
     109: invokevirtual #68                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     112: checkcast     #70                 // class java/lang/Number
     115: invokevirtual #74                 // Method java/lang/Number.intValue:()I
     118: istore        9
     120: aload         7
     122: invokevirtual #68                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     125: checkcast     #65                 // class kotlin/Pair
     128: invokevirtual #77                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     131: checkcast     #70                 // class java/lang/Number
     134: invokevirtual #74                 // Method java/lang/Number.intValue:()I
     137: istore        10
     139: aload         7
     141: invokevirtual #77                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     144: checkcast     #70                 // class java/lang/Number
     147: invokevirtual #74                 // Method java/lang/Number.intValue:()I
     150: istore        11
     152: iload         10
     154: iload         9
     156: if_icmpgt     174
     159: iload         9
     161: iload         11
     163: if_icmpgt     170
     166: iconst_1
     167: goto          175
     170: iconst_0
     171: goto          175
     174: iconst_0
     175: ifne          72
     178: iconst_0
     179: goto          183
     182: iconst_1
     183: ireturn

  public final Day18$Point add(int, int);
    Code:
       0: aload_0
       1: getfield      #21                 // Field xs:[Ljava/lang/Integer;
       4: dup
       5: arraylength
       6: invokestatic  #97                 // Method java/util/Arrays.copyOf:([Ljava/lang/Object;I)[Ljava/lang/Object;
       9: dup
      10: ldc           #99                 // String copyOf(...)
      12: invokestatic  #102                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      15: checkcast     #103                // class "[Ljava/lang/Integer;"
      18: astore_3
      19: aload_3
      20: iload_1
      21: aload_3
      22: iload_1
      23: aaload
      24: invokevirtual #106                // Method java/lang/Integer.intValue:()I
      27: iload_2
      28: iadd
      29: invokestatic  #110                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: new           #2                  // class Day18$Point
      36: dup
      37: aload_3
      38: invokespecial #112                // Method "<init>":([Ljava/lang/Integer;)V
      41: areturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_0
       8: invokevirtual #122                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      11: aload_1
      12: dup
      13: ifnull        22
      16: invokevirtual #122                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      19: goto          24
      22: pop
      23: aconst_null
      24: invokestatic  #126                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      27: ifne          32
      30: iconst_0
      31: ireturn
      32: aload_1
      33: ldc           #128                // String null cannot be cast to non-null type <root>.Day18.Point
      35: invokestatic  #131                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;Ljava/lang/String;)V
      38: aload_1
      39: checkcast     #2                  // class Day18$Point
      42: pop
      43: aload_0
      44: getfield      #21                 // Field xs:[Ljava/lang/Integer;
      47: aload_1
      48: checkcast     #2                  // class Day18$Point
      51: getfield      #21                 // Field xs:[Ljava/lang/Integer;
      54: invokestatic  #134                // Method java/util/Arrays.equals:([Ljava/lang/Object;[Ljava/lang/Object;)Z
      57: ifne          62
      60: iconst_0
      61: ireturn
      62: iconst_1
      63: ireturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #21                 // Field xs:[Ljava/lang/Integer;
       4: invokestatic  #141                // Method java/util/Arrays.hashCode:([Ljava/lang/Object;)I
       7: ireturn

  public final java.lang.Integer[] component1();
    Code:
       0: aload_0
       1: getfield      #21                 // Field xs:[Ljava/lang/Integer;
       4: areturn

  public final Day18$Point copy(java.lang.Integer[]);
    Code:
       0: aload_1
       1: ldc           #9                  // String xs
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Day18$Point
       9: dup
      10: aload_1
      11: invokespecial #112                // Method "<init>":([Ljava/lang/Integer;)V
      14: areturn

  public static Day18$Point copy$default(Day18$Point, java.lang.Integer[], int, java.lang.Object);
    Code:
       0: iload_2
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #21                 // Field xs:[Ljava/lang/Integer;
      10: astore_1
      11: aload_0
      12: aload_1
      13: invokevirtual #148                // Method copy:([Ljava/lang/Integer;)LDay18$Point;
      16: areturn

  public java.lang.String toString();
    Code:
       0: new           #152                // class java/lang/StringBuilder
       3: dup
       4: invokespecial #153                // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #155                // String Point(xs=
       9: invokevirtual #159                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #21                 // Field xs:[Ljava/lang/Integer;
      16: invokestatic  #162                // Method java/util/Arrays.toString:([Ljava/lang/Object;)Ljava/lang/String;
      19: invokevirtual #159                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      22: bipush        41
      24: invokevirtual #165                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      27: invokevirtual #167                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      30: areturn
}

Compiled from "Day18.kt"
public final class Day18 {
  public Day18();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final java.util.Set<Day18$Point> parse(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #24                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: astore        4
      16: new           #26                 // class java/util/ArrayList
      19: dup
      20: aload_2
      21: bipush        10
      23: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      26: invokespecial #35                 // Method java/util/ArrayList."<init>":(I)V
      29: checkcast     #37                 // class java/util/Collection
      32: astore        5
      34: iconst_0
      35: istore        6
      37: aload         4
      39: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      44: astore        7
      46: aload         7
      48: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      53: ifeq          258
      56: aload         7
      58: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      63: astore        8
      65: aload         5
      67: aload         8
      69: checkcast     #53                 // class java/lang/String
      72: astore        9
      74: astore        22
      76: iconst_0
      77: istore        10
      79: aload         9
      81: checkcast     #55                 // class java/lang/CharSequence
      84: iconst_1
      85: newarray       char
      87: astore        11
      89: aload         11
      91: iconst_0
      92: bipush        44
      94: castore
      95: aload         11
      97: iconst_0
      98: iconst_0
      99: bipush        6
     101: aconst_null
     102: invokestatic  #61                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[CZIILjava/lang/Object;)Ljava/util/List;
     105: checkcast     #24                 // class java/lang/Iterable
     108: astore        11
     110: iconst_0
     111: istore        12
     113: aload         11
     115: astore        13
     117: new           #26                 // class java/util/ArrayList
     120: dup
     121: aload         11
     123: bipush        10
     125: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     128: invokespecial #35                 // Method java/util/ArrayList."<init>":(I)V
     131: checkcast     #37                 // class java/util/Collection
     134: astore        14
     136: iconst_0
     137: istore        15
     139: aload         13
     141: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     146: astore        16
     148: aload         16
     150: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     155: ifeq          202
     158: aload         16
     160: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     165: astore        17
     167: aload         14
     169: aload         17
     171: checkcast     #53                 // class java/lang/String
     174: astore        18
     176: astore        19
     178: iconst_0
     179: istore        20
     181: aload         18
     183: invokestatic  #67                 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     186: nop
     187: invokestatic  #71                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     190: aload         19
     192: swap
     193: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     198: pop
     199: goto          148
     202: aload         14
     204: checkcast     #77                 // class java/util/List
     207: nop
     208: checkcast     #37                 // class java/util/Collection
     211: astore        11
     213: nop
     214: iconst_0
     215: istore        12
     217: aload         11
     219: astore        13
     221: aload         13
     223: iconst_0
     224: anewarray     #63                 // class java/lang/Integer
     227: invokeinterface #81,  2           // InterfaceMethod java/util/Collection.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
     232: checkcast     #83                 // class "[Ljava/lang/Integer;"
     235: astore        21
     237: new           #85                 // class Day18$Point
     240: dup
     241: aload         21
     243: invokespecial #88                 // Method Day18$Point."<init>":([Ljava/lang/Integer;)V
     246: aload         22
     248: swap
     249: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     254: pop
     255: goto          46
     258: aload         5
     260: checkcast     #77                 // class java/util/List
     263: nop
     264: checkcast     #24                 // class java/lang/Iterable
     267: invokestatic  #92                 // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     270: areturn

  public final java.util.Set<Day18$Point> getNeighbors(Day18$Point);
    Code:
       0: aload_1
       1: ldc           #117                // String point
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iconst_2
       7: anewarray     #63                 // class java/lang/Integer
      10: astore_3
      11: aload_3
      12: iconst_0
      13: iconst_m1
      14: invokestatic  #71                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      17: aastore
      18: aload_3
      19: iconst_1
      20: iconst_1
      21: invokestatic  #71                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      24: aastore
      25: aload_3
      26: invokestatic  #121                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      29: astore_2
      30: aload_1
      31: invokevirtual #125                // Method Day18$Point.getXs:()[Ljava/lang/Integer;
      34: astore        4
      36: new           #26                 // class java/util/ArrayList
      39: dup
      40: invokespecial #126                // Method java/util/ArrayList."<init>":()V
      43: checkcast     #37                 // class java/util/Collection
      46: astore        5
      48: iconst_0
      49: istore        6
      51: iconst_0
      52: istore        7
      54: aload         4
      56: arraylength
      57: istore        8
      59: iload         7
      61: iload         8
      63: if_icmpge     215
      66: aload         4
      68: iload         7
      70: aaload
      71: astore        9
      73: iload         6
      75: iinc          6, 1
      78: aload         9
      80: checkcast     #128                // class java/lang/Number
      83: invokevirtual #132                // Method java/lang/Number.intValue:()I
      86: pop
      87: istore        10
      89: iconst_0
      90: istore        11
      92: aload_2
      93: checkcast     #24                 // class java/lang/Iterable
      96: astore        12
      98: iconst_0
      99: istore        13
     101: aload         12
     103: astore        14
     105: new           #26                 // class java/util/ArrayList
     108: dup
     109: aload         12
     111: bipush        10
     113: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     116: invokespecial #35                 // Method java/util/ArrayList."<init>":(I)V
     119: checkcast     #37                 // class java/util/Collection
     122: astore        15
     124: iconst_0
     125: istore        16
     127: aload         14
     129: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     134: astore        17
     136: aload         17
     138: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     143: ifeq          192
     146: aload         17
     148: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     153: astore        18
     155: aload         15
     157: aload         18
     159: checkcast     #128                // class java/lang/Number
     162: invokevirtual #132                // Method java/lang/Number.intValue:()I
     165: istore        19
     167: astore        20
     169: iconst_0
     170: istore        21
     172: aload_1
     173: iload         10
     175: iload         19
     177: invokevirtual #135                // Method Day18$Point.add:(II)LDay18$Point;
     180: aload         20
     182: swap
     183: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     188: pop
     189: goto          136
     192: aload         15
     194: checkcast     #77                 // class java/util/List
     197: nop
     198: checkcast     #24                 // class java/lang/Iterable
     201: nop
     202: aload         5
     204: swap
     205: invokestatic  #139                // Method kotlin/collections/CollectionsKt.addAll:(Ljava/util/Collection;Ljava/lang/Iterable;)Z
     208: pop
     209: iinc          7, 1
     212: goto          59
     215: aload         5
     217: checkcast     #77                 // class java/util/List
     220: checkcast     #24                 // class java/lang/Iterable
     223: invokestatic  #92                 // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     226: areturn

  public final java.lang.String part1(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: aload_1
       8: invokevirtual #150                // Method parse:(Ljava/util/List;)Ljava/util/Set;
      11: astore_2
      12: lconst_0
      13: lstore_3
      14: aload_2
      15: invokeinterface #153,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
      20: astore        5
      22: aload         5
      24: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      29: ifeq          181
      32: aload         5
      34: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      39: checkcast     #85                 // class Day18$Point
      42: astore        6
      44: bipush        6
      46: istore        7
      48: aload_0
      49: aload         6
      51: invokevirtual #155                // Method getNeighbors:(LDay18$Point;)Ljava/util/Set;
      54: astore        8
      56: iload         7
      58: aload         8
      60: checkcast     #24                 // class java/lang/Iterable
      63: astore        9
      65: istore        16
      67: iconst_0
      68: istore        10
      70: aload         9
      72: instanceof    #37                 // class java/util/Collection
      75: ifeq          95
      78: aload         9
      80: checkcast     #37                 // class java/util/Collection
      83: invokeinterface #158,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
      88: ifeq          95
      91: iconst_0
      92: goto          163
      95: iconst_0
      96: istore        11
      98: aload         9
     100: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     105: astore        12
     107: aload         12
     109: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     114: ifeq          161
     117: aload         12
     119: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     124: astore        13
     126: aload         13
     128: checkcast     #85                 // class Day18$Point
     131: astore        14
     133: iconst_0
     134: istore        15
     136: aload_2
     137: aload         14
     139: invokeinterface #161,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     144: ifeq          107
     147: iinc          11, 1
     150: iload         11
     152: ifge          107
     155: invokestatic  #164                // Method kotlin/collections/CollectionsKt.throwCountOverflow:()V
     158: goto          107
     161: iload         11
     163: istore        17
     165: iload         16
     167: iload         17
     169: isub
     170: istore        7
     172: lload_3
     173: iload         7
     175: i2l
     176: ladd
     177: lstore_3
     178: goto          22
     181: lload_3
     182: invokestatic  #167                // Method java/lang/String.valueOf:(J)Ljava/lang/String;
     185: areturn

  public final java.lang.String part2(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: aload_1
       8: invokevirtual #150                // Method parse:(Ljava/util/List;)Ljava/util/Set;
      11: astore_2
      12: lconst_0
      13: lstore_3
      14: aload_2
      15: checkcast     #24                 // class java/lang/Iterable
      18: invokestatic  #183                // Method kotlin/collections/CollectionsKt.first:(Ljava/lang/Iterable;)Ljava/lang/Object;
      21: checkcast     #85                 // class Day18$Point
      24: invokevirtual #125                // Method Day18$Point.getXs:()[Ljava/lang/Integer;
      27: arraylength
      28: istore        5
      30: iconst_0
      31: iload         5
      33: invokestatic  #189                // Method kotlin/ranges/RangesKt.until:(II)Lkotlin/ranges/IntRange;
      36: checkcast     #24                 // class java/lang/Iterable
      39: astore        7
      41: iconst_0
      42: istore        8
      44: aload         7
      46: astore        9
      48: new           #26                 // class java/util/ArrayList
      51: dup
      52: aload         7
      54: bipush        10
      56: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      59: invokespecial #35                 // Method java/util/ArrayList."<init>":(I)V
      62: checkcast     #37                 // class java/util/Collection
      65: astore        10
      67: iconst_0
      68: istore        11
      70: aload         9
      72: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      77: astore        12
      79: aload         12
      81: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      86: ifeq          237
      89: aload         12
      91: checkcast     #191                // class kotlin/collections/IntIterator
      94: invokevirtual #194                // Method kotlin/collections/IntIterator.nextInt:()I
      97: istore        13
      99: aload         10
     101: iload         13
     103: istore        14
     105: astore        23
     107: iconst_0
     108: istore        15
     110: aload_2
     111: checkcast     #24                 // class java/lang/Iterable
     114: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     119: astore        16
     121: aload         16
     123: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     128: ifne          139
     131: new           #196                // class java/util/NoSuchElementException
     134: dup
     135: invokespecial #197                // Method java/util/NoSuchElementException."<init>":()V
     138: athrow
     139: aload         16
     141: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     146: checkcast     #85                 // class Day18$Point
     149: astore        17
     151: iconst_0
     152: istore        18
     154: aload         17
     156: invokevirtual #125                // Method Day18$Point.getXs:()[Ljava/lang/Integer;
     159: iload         14
     161: aaload
     162: invokevirtual #198                // Method java/lang/Integer.intValue:()I
     165: istore        17
     167: aload         16
     169: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     174: ifeq          219
     177: aload         16
     179: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     184: checkcast     #85                 // class Day18$Point
     187: astore        18
     189: iconst_0
     190: istore        19
     192: aload         18
     194: invokevirtual #125                // Method Day18$Point.getXs:()[Ljava/lang/Integer;
     197: iload         14
     199: aaload
     200: invokevirtual #198                // Method java/lang/Integer.intValue:()I
     203: istore        18
     205: iload         17
     207: iload         18
     209: if_icmpge     167
     212: iload         18
     214: istore        17
     216: goto          167
     219: iload         17
     221: nop
     222: invokestatic  #71                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     225: aload         23
     227: swap
     228: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     233: pop
     234: goto          79
     237: aload         10
     239: checkcast     #77                 // class java/util/List
     242: nop
     243: astore        6
     245: iconst_0
     246: iload         5
     248: invokestatic  #189                // Method kotlin/ranges/RangesKt.until:(II)Lkotlin/ranges/IntRange;
     251: checkcast     #24                 // class java/lang/Iterable
     254: astore        8
     256: iconst_0
     257: istore        9
     259: aload         8
     261: astore        10
     263: new           #26                 // class java/util/ArrayList
     266: dup
     267: aload         8
     269: bipush        10
     271: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     274: invokespecial #35                 // Method java/util/ArrayList."<init>":(I)V
     277: checkcast     #37                 // class java/util/Collection
     280: astore        11
     282: iconst_0
     283: istore        12
     285: aload         10
     287: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     292: astore        13
     294: aload         13
     296: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     301: ifeq          452
     304: aload         13
     306: checkcast     #191                // class kotlin/collections/IntIterator
     309: invokevirtual #194                // Method kotlin/collections/IntIterator.nextInt:()I
     312: istore        14
     314: aload         11
     316: iload         14
     318: istore        15
     320: astore        23
     322: iconst_0
     323: istore        16
     325: aload_2
     326: checkcast     #24                 // class java/lang/Iterable
     329: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     334: astore        17
     336: aload         17
     338: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     343: ifne          354
     346: new           #196                // class java/util/NoSuchElementException
     349: dup
     350: invokespecial #197                // Method java/util/NoSuchElementException."<init>":()V
     353: athrow
     354: aload         17
     356: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     361: checkcast     #85                 // class Day18$Point
     364: astore        18
     366: iconst_0
     367: istore        19
     369: aload         18
     371: invokevirtual #125                // Method Day18$Point.getXs:()[Ljava/lang/Integer;
     374: iload         15
     376: aaload
     377: invokevirtual #198                // Method java/lang/Integer.intValue:()I
     380: istore        18
     382: aload         17
     384: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     389: ifeq          434
     392: aload         17
     394: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     399: checkcast     #85                 // class Day18$Point
     402: astore        19
     404: iconst_0
     405: istore        20
     407: aload         19
     409: invokevirtual #125                // Method Day18$Point.getXs:()[Ljava/lang/Integer;
     412: iload         15
     414: aaload
     415: invokevirtual #198                // Method java/lang/Integer.intValue:()I
     418: istore        19
     420: iload         18
     422: iload         19
     424: if_icmple     382
     427: iload         19
     429: istore        18
     431: goto          382
     434: iload         18
     436: nop
     437: invokestatic  #71                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     440: aload         23
     442: swap
     443: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     448: pop
     449: goto          294
     452: aload         11
     454: checkcast     #77                 // class java/util/List
     457: nop
     458: astore        7
     460: aload         6
     462: checkcast     #24                 // class java/lang/Iterable
     465: astore        9
     467: iconst_0
     468: istore        10
     470: aload         9
     472: astore        11
     474: new           #26                 // class java/util/ArrayList
     477: dup
     478: aload         9
     480: bipush        10
     482: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     485: invokespecial #35                 // Method java/util/ArrayList."<init>":(I)V
     488: checkcast     #37                 // class java/util/Collection
     491: astore        12
     493: iconst_0
     494: istore        13
     496: aload         11
     498: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     503: astore        14
     505: aload         14
     507: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     512: ifeq          560
     515: aload         14
     517: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     522: astore        15
     524: aload         12
     526: aload         15
     528: checkcast     #128                // class java/lang/Number
     531: invokevirtual #132                // Method java/lang/Number.intValue:()I
     534: istore        16
     536: astore        24
     538: iconst_0
     539: istore        17
     541: iload         16
     543: iconst_1
     544: iadd
     545: invokestatic  #71                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     548: aload         24
     550: swap
     551: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     556: pop
     557: goto          505
     560: aload         12
     562: checkcast     #77                 // class java/util/List
     565: nop
     566: checkcast     #37                 // class java/util/Collection
     569: astore        9
     571: nop
     572: iconst_0
     573: istore        10
     575: aload         9
     577: astore        11
     579: aload         11
     581: iconst_0
     582: anewarray     #63                 // class java/lang/Integer
     585: invokeinterface #81,  2           // InterfaceMethod java/util/Collection.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
     590: checkcast     #83                 // class "[Ljava/lang/Integer;"
     593: astore        25
     595: new           #85                 // class Day18$Point
     598: dup
     599: aload         25
     601: invokespecial #88                 // Method Day18$Point."<init>":([Ljava/lang/Integer;)V
     604: astore        8
     606: aload         7
     608: checkcast     #24                 // class java/lang/Iterable
     611: astore        10
     613: iconst_0
     614: istore        11
     616: aload         10
     618: astore        12
     620: new           #26                 // class java/util/ArrayList
     623: dup
     624: aload         10
     626: bipush        10
     628: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     631: invokespecial #35                 // Method java/util/ArrayList."<init>":(I)V
     634: checkcast     #37                 // class java/util/Collection
     637: astore        13
     639: iconst_0
     640: istore        14
     642: aload         12
     644: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     649: astore        15
     651: aload         15
     653: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     658: ifeq          706
     661: aload         15
     663: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     668: astore        16
     670: aload         13
     672: aload         16
     674: checkcast     #128                // class java/lang/Number
     677: invokevirtual #132                // Method java/lang/Number.intValue:()I
     680: istore        17
     682: astore        24
     684: iconst_0
     685: istore        18
     687: iload         17
     689: iconst_1
     690: isub
     691: invokestatic  #71                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     694: aload         24
     696: swap
     697: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     702: pop
     703: goto          651
     706: aload         13
     708: checkcast     #77                 // class java/util/List
     711: nop
     712: checkcast     #37                 // class java/util/Collection
     715: astore        10
     717: nop
     718: iconst_0
     719: istore        11
     721: aload         10
     723: astore        12
     725: aload         12
     727: iconst_0
     728: anewarray     #63                 // class java/lang/Integer
     731: invokeinterface #81,  2           // InterfaceMethod java/util/Collection.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
     736: checkcast     #83                 // class "[Ljava/lang/Integer;"
     739: astore        26
     741: new           #85                 // class Day18$Point
     744: dup
     745: aload         26
     747: invokespecial #88                 // Method Day18$Point."<init>":([Ljava/lang/Integer;)V
     750: astore        9
     752: new           #200                // class java/util/LinkedHashSet
     755: dup
     756: invokespecial #201                // Method java/util/LinkedHashSet."<init>":()V
     759: checkcast     #152                // class java/util/Set
     762: astore        10
     764: new           #203                // class kotlin/collections/ArrayDeque
     767: dup
     768: aload         9
     770: invokestatic  #206                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     773: checkcast     #37                 // class java/util/Collection
     776: invokespecial #209                // Method kotlin/collections/ArrayDeque."<init>":(Ljava/util/Collection;)V
     779: astore        11
     781: aload         11
     783: checkcast     #37                 // class java/util/Collection
     786: invokeinterface #158,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     791: ifne          798
     794: iconst_1
     795: goto          799
     798: iconst_0
     799: ifeq          997
     802: aload         11
     804: invokevirtual #212                // Method kotlin/collections/ArrayDeque.removeFirst:()Ljava/lang/Object;
     807: checkcast     #85                 // class Day18$Point
     810: astore        12
     812: aload_0
     813: aload         12
     815: invokevirtual #155                // Method getNeighbors:(LDay18$Point;)Ljava/util/Set;
     818: checkcast     #24                 // class java/lang/Iterable
     821: astore        14
     823: iconst_0
     824: istore        15
     826: aload         14
     828: astore        16
     830: new           #26                 // class java/util/ArrayList
     833: dup
     834: invokespecial #126                // Method java/util/ArrayList."<init>":()V
     837: checkcast     #37                 // class java/util/Collection
     840: astore        17
     842: iconst_0
     843: istore        18
     845: aload         16
     847: invokeinterface #41,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     852: astore        19
     854: aload         19
     856: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     861: ifeq          908
     864: aload         19
     866: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     871: astore        20
     873: aload         20
     875: checkcast     #85                 // class Day18$Point
     878: astore        21
     880: iconst_0
     881: istore        22
     883: aload         21
     885: aload         9
     887: aload         8
     889: invokevirtual #216                // Method Day18$Point.isBetween:(LDay18$Point;LDay18$Point;)Z
     892: ifeq          854
     895: aload         17
     897: aload         20
     899: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     904: pop
     905: goto          854
     908: aload         17
     910: checkcast     #77                 // class java/util/List
     913: nop
     914: astore        13
     916: aload         13
     918: invokeinterface #217,  1          // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
     923: astore        14
     925: aload         14
     927: invokeinterface #47,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     932: ifeq          781
     935: aload         14
     937: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     942: checkcast     #85                 // class Day18$Point
     945: astore        15
     947: aload_2
     948: aload         15
     950: invokeinterface #161,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     955: ifeq          965
     958: lload_3
     959: lconst_1
     960: ladd
     961: lstore_3
     962: goto          925
     965: aload         10
     967: aload         15
     969: invokeinterface #161,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     974: ifne          925
     977: aload         10
     979: aload         15
     981: invokeinterface #218,  2          // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     986: pop
     987: aload         11
     989: aload         15
     991: invokevirtual #222                // Method kotlin/collections/ArrayDeque.addLast:(Ljava/lang/Object;)V
     994: goto          925
     997: lload_3
     998: invokestatic  #167                // Method java/lang/String.valueOf:(J)Ljava/lang/String;
    1001: areturn
}

Compiled from "Day18.kt"
public final class Day18Kt {
  public static final void main();
    Code:
       0: new           #8                  // class Day18
       3: dup
       4: invokespecial #11                 // Method Day18."<init>":()V
       7: astore_0
       8: aload_0
       9: invokevirtual #15                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      12: invokevirtual #21                 // Method java/lang/Class.getName:()Ljava/lang/String;
      15: astore_1
      16: aload_1
      17: aload_0
      18: invokestatic  #25                 // Method main$test:(Ljava/lang/String;LDay18;)V
      21: aload_1
      22: aload_0
      23: invokestatic  #28                 // Method main$run:(Ljava/lang/String;LDay18;)V
      26: return

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

  private static final void main$test(java.lang.String, Day18);
    Code:
       0: ldc           #39                 // String 64
       2: astore_2
       3: ldc           #41                 // String 58
       5: astore_3
       6: new           #43                 // class java/lang/StringBuilder
       9: dup
      10: invokespecial #44                 // Method java/lang/StringBuilder."<init>":()V
      13: aload_0
      14: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      17: ldc           #50                 // String _test
      19: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      22: invokevirtual #53                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      25: invokestatic  #59                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
      28: astore        4
      30: ldc           #61                 // String Test part 1
      32: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      35: swap
      36: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      39: aload_1
      40: aload         4
      42: invokevirtual #77                 // Method Day18.part1:(Ljava/util/List;)Ljava/lang/String;
      45: aload_2
      46: invokestatic  #81                 // Method UtilsKt.assert:(Ljava/lang/Object;Ljava/lang/Object;)V
      49: ldc           #83                 // String > Passed
      51: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      54: swap
      55: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      58: ldc           #85                 // String Test part 2
      60: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      63: swap
      64: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      67: aload_1
      68: aload         4
      70: invokevirtual #88                 // Method Day18.part2:(Ljava/util/List;)Ljava/lang/String;
      73: aload_3
      74: invokestatic  #81                 // Method UtilsKt.assert:(Ljava/lang/Object;Ljava/lang/Object;)V
      77: ldc           #83                 // String > Passed
      79: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      82: swap
      83: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      86: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      89: invokevirtual #90                 // Method java/io/PrintStream.println:()V
      92: ldc           #92                 // String =================================
      94: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      97: swap
      98: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     101: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
     104: invokevirtual #90                 // Method java/io/PrintStream.println:()V
     107: return

  private static final void main$run(java.lang.String, Day18);
    Code:
       0: aload_0
       1: invokestatic  #101                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
       4: aload_0
       5: invokestatic  #59                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
       8: astore_2
       9: iconst_0
      10: istore        5
      12: getstatic     #107                // Field kotlin/time/TimeSource$Monotonic.INSTANCE:Lkotlin/time/TimeSource$Monotonic;
      15: astore        6
      17: iconst_0
      18: istore        7
      20: aload         6
      22: invokevirtual #111                // Method kotlin/time/TimeSource$Monotonic."markNow-z9LOYto":()J
      25: lstore        8
      27: iconst_0
      28: istore        10
      30: new           #43                 // class java/lang/StringBuilder
      33: dup
      34: invokespecial #44                 // Method java/lang/StringBuilder."<init>":()V
      37: ldc           #113                // String Part 1:
      39: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      42: aload_1
      43: aload_2
      44: invokevirtual #77                 // Method Day18.part1:(Ljava/util/List;)Ljava/lang/String;
      47: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      50: invokevirtual #53                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      53: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      56: swap
      57: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      60: nop
      61: nop
      62: lload         8
      64: invokestatic  #119                // Method kotlin/time/TimeSource$Monotonic$ValueTimeMark."elapsedNow-UwyO8pc":(J)J
      67: nop
      68: lstore_3
      69: new           #43                 // class java/lang/StringBuilder
      72: dup
      73: invokespecial #44                 // Method java/lang/StringBuilder."<init>":()V
      76: ldc           #121                // String Elapsed:
      78: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      81: lload_3
      82: invokestatic  #127                // Method kotlin/time/Duration."toString-impl":(J)Ljava/lang/String;
      85: invokevirtual #130                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      88: invokevirtual #53                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      91: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
      94: swap
      95: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      98: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
     101: invokevirtual #90                 // Method java/io/PrintStream.println:()V
     104: iconst_0
     105: istore        7
     107: getstatic     #107                // Field kotlin/time/TimeSource$Monotonic.INSTANCE:Lkotlin/time/TimeSource$Monotonic;
     110: astore        8
     112: iconst_0
     113: istore        9
     115: aload         8
     117: invokevirtual #111                // Method kotlin/time/TimeSource$Monotonic."markNow-z9LOYto":()J
     120: lstore        10
     122: iconst_0
     123: istore        12
     125: new           #43                 // class java/lang/StringBuilder
     128: dup
     129: invokespecial #44                 // Method java/lang/StringBuilder."<init>":()V
     132: ldc           #132                // String Part 2:
     134: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     137: aload_1
     138: aload_2
     139: invokevirtual #88                 // Method Day18.part2:(Ljava/util/List;)Ljava/lang/String;
     142: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     145: invokevirtual #53                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     148: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
     151: swap
     152: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     155: nop
     156: nop
     157: lload         10
     159: invokestatic  #119                // Method kotlin/time/TimeSource$Monotonic$ValueTimeMark."elapsedNow-UwyO8pc":(J)J
     162: nop
     163: lstore        5
     165: new           #43                 // class java/lang/StringBuilder
     168: dup
     169: invokespecial #44                 // Method java/lang/StringBuilder."<init>":()V
     172: ldc           #121                // String Elapsed:
     174: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     177: lload         5
     179: invokestatic  #127                // Method kotlin/time/Duration."toString-impl":(J)Ljava/lang/String;
     182: invokevirtual #130                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     185: invokevirtual #53                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     188: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
     191: swap
     192: invokevirtual #73                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     195: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
     198: invokevirtual #90                 // Method java/io/PrintStream.println:()V
     201: return
}