package day8

class Day8(val input: List<String>) {

    private val transposed = transpose(input)
    val inputInts = input.map { it.toCharArray().map { it.digitToInt() } }
    val transposedInts = transposed.map { it.toCharArray().map { it.digitToInt() } }
    val visibleFromLeft = input.mapIndexed { rowNo, row -> visibleFromStart(rowNo, row) }.flatten().toSet()
    val visibleFromRight = input.mapIndexed { rowNo, row -> visibleFromEnd(rowNo, row) }.flatten().toSet()
    val visibleFromTop = transposed.mapIndexed { rowNo, row -> visibleFromTop(rowNo, row) }.flatten().toSet()
    val visibleFromBottom = transposed.mapIndexed { rowNo, row -> visibleFromBottom(rowNo, row) }.flatten().toSet()

    fun visibleFromStart(rowNo: Int, row: String): Set<Pair<Int, Int>> {
        if (row.isBlank()) return setOf()
        val rowInfo = row.foldIndexed(RowInfo(rowNo, -1, setOf())) { index, rowInfo, char -> rowInfo.add(char, index) }
        return rowInfo.positions.map { Pair(rowNo, it) }.toSet()
    }

    fun visibleFromEnd(rowNo: Int, row: String): Set<Pair<Int, Int>> {
        if (row.isBlank()) return setOf()
        val rowInfo = row.foldRightIndexed(RowInfo(rowNo, -1, setOf())) { index, char, rowInfo -> rowInfo.add(char, index) }
        return rowInfo.positions.map { Pair(rowNo, it) }.toSet()
    }

    fun visibleFromTop(colNo: Int, col: String): Set<Pair<Int, Int>> {
        if (col.isBlank()) return setOf()
        val rowInfo = col.foldIndexed(RowInfo(colNo, -1, setOf())) { index, rowInfo, char -> rowInfo.add(char, index) }
        return rowInfo.positions.map { Pair(it, colNo) }.toSet()
    }

    fun visibleFromBottom(colNo: Int, col: String): Set<Pair<Int, Int>> {
        if (col.isBlank()) return setOf()
        val rowInfo = col.foldRightIndexed(RowInfo(colNo, -1, setOf())) { index, char, rowInfo -> rowInfo.add(char, index) }
        return rowInfo.positions.map { Pair(it, colNo) }.toSet()
    }

    fun part1(): Int {
        val union = visibleFromLeft.union(visibleFromRight).union(visibleFromTop).union(visibleFromBottom)
        println("Union: ${union.sortedWith(compareBy<Pair<Int, Int>> { it.first }.thenBy { it.second })}")
        return union.size
    }

    val pairs = (input.indices).map { column ->
        (transposed.indices).map { row ->
            Pair(row, column)
        }
    }.flatten()

    fun part2(): Int {
        val associateWith = pairs.associateWith { sightLeft(it) * sightRight(it) * sightDown(it) * sightUp(it) }
        val entry = associateWith.maxWith { a, b -> a.value.compareTo(b.value) }
        println("Max pair is ${entry.key} = ${entry.value}")
        return entry.value
    }

    fun calculateScenicScore(pair: Pair<Int, Int>): Int {
        val up = sightUp(pair)
        val left = sightLeft(pair)
        val down = sightDown(pair)
        val right = sightRight(pair)
        println("[up=$up][left=$left][down=$down][right=$right]")
        val sum = up * left * down * right
        println("sum = $sum")
        return sum
    }

    fun sightUp(position: Pair<Int, Int>): Int {
        val height = inputInts[position.first][position.second]
        val consideredTrees = transposedInts[position.second].take(position.first)
        val count = consideredTrees.takeLastWhile { it < height }.count()
        if (count == consideredTrees.count()) return count
        return count + 1
    }

    fun sightDown(position: Pair<Int, Int>): Int {
        val height = inputInts[position.first][position.second]
        val consideredTrees = transposedInts[position.second].drop(position.first + 1)
        val count = consideredTrees.takeWhile { it < height }.count()
        if (count == consideredTrees.count()) return count
        return count + 1
    }

    fun sightRight(position: Pair<Int, Int>): Int {
        val height = inputInts[position.first][position.second]
        val consideredTrees = inputInts[position.first].drop(position.second + 1)
        val count = consideredTrees.takeWhile { it < height }.count()
        if (count == consideredTrees.count()) return count
        return count + 1
    }

    fun sightLeft(position: Pair<Int, Int>): Int {
        val height = inputInts[position.first][position.second]
        val consideredTrees = inputInts[position.first].take(position.second)
        val count = consideredTrees.takeLastWhile { it < height }.count()
        if (count == consideredTrees.count()) return count
        return count + 1
    }
}

data class RowInfo(val rowNo: Int, val highestNumber: Int, val positions: Set<Int>) {
    fun add(input: Char, index: Int): RowInfo {
        val inputDigit = input.digitToInt()
        if (highestNumber == 9 || inputDigit <= highestNumber) return this
        return this.copy(highestNumber = inputDigit, positions = positions + index)
    }
}

private fun transpose(input: List<String>): List<String> {
    val columns = input.first().length - 1
    return (0..columns).map { column -> input.map { string -> string[column] }.joinToString("") }
}

fun main() {
    val testInput = Day8::class.java.getResourceAsStream("/day8_test.txt").bufferedReader().readLines()
    val input = Day8::class.java.getResourceAsStream("/day8_input.txt").bufferedReader().readLines()

    val day8test = Day8(testInput)
    val day8input = Day8(input)
    println("From left: ${day8test.visibleFromLeft}")
    println("From right: ${day8test.visibleFromRight}")
    println("From top: ${day8test.visibleFromTop}")
    println("From bottom: ${day8test.visibleFromBottom}")

    println("Part 1 test result: ${day8test.part1()}")
    println("Part 1 result: ${day8input.part1()}")

    println("Part 2 test result: ${day8test.part2()}")
    println("Part 2 result: ${day8input.part2()}")

//    println(day8test.sightUp(Pair(3,2)))
//    println(day8test.sightLeft(Pair(3,2)))
//    println(day8test.sightDown(Pair(3,2)))
//    println(day8test.sightRight(Pair(3,2)))
//
//    println("1,1=" + day8test.calculateScenicScore(Pair(1,1)))
//    println("1,2=" + day8test.calculateScenicScore(Pair(1,2)))
//    println("3,2=" + day8test.calculateScenicScore(Pair(3,2)))
}

/*
abc
def
ghi
 */

Compiled from "Comparisons.kt"
public final class day8.Day8$part1$$inlined$compareBy$1<T> implements java.util.Comparator {
  public day8.Day8$part1$$inlined$compareBy$1();
    Code:
       0: aload_0
       1: invokespecial #16                 // Method java/lang/Object."<init>":()V
       4: return

  public final int compare(T, T);
    Code:
       0: aload_1
       1: checkcast     #23                 // class kotlin/Pair
       4: astore_3
       5: iconst_0
       6: istore        4
       8: aload_3
       9: invokevirtual #27                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      12: checkcast     #29                 // class java/lang/Comparable
      15: aload_2
      16: checkcast     #23                 // class kotlin/Pair
      19: astore_3
      20: astore        5
      22: iconst_0
      23: istore        4
      25: aload_3
      26: invokevirtual #27                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      29: checkcast     #29                 // class java/lang/Comparable
      32: aload         5
      34: swap
      35: invokestatic  #35                 // Method kotlin/comparisons/ComparisonsKt.compareValues:(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
      38: ireturn
}

Compiled from "Day8.kt"
public final class day8.Day8Kt {
  private static final java.util.List<java.lang.String> transpose(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: invokestatic  #13                 // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
       4: checkcast     #15                 // class java/lang/String
       7: invokevirtual #19                 // Method java/lang/String.length:()I
      10: iconst_1
      11: isub
      12: istore_1
      13: new           #21                 // class kotlin/ranges/IntRange
      16: dup
      17: iconst_0
      18: iload_1
      19: invokespecial #25                 // Method kotlin/ranges/IntRange."<init>":(II)V
      22: checkcast     #27                 // class java/lang/Iterable
      25: astore_2
      26: iconst_0
      27: istore_3
      28: aload_2
      29: astore        4
      31: new           #29                 // class java/util/ArrayList
      34: dup
      35: aload_2
      36: bipush        10
      38: invokestatic  #33                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      41: invokespecial #36                 // Method java/util/ArrayList."<init>":(I)V
      44: checkcast     #38                 // class java/util/Collection
      47: astore        5
      49: iconst_0
      50: istore        6
      52: aload         4
      54: invokeinterface #42,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      59: astore        7
      61: aload         7
      63: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      68: ifeq          228
      71: aload         7
      73: checkcast     #50                 // class kotlin/collections/IntIterator
      76: invokevirtual #53                 // Method kotlin/collections/IntIterator.nextInt:()I
      79: istore        8
      81: aload         5
      83: iload         8
      85: istore        9
      87: astore        21
      89: iconst_0
      90: istore        10
      92: aload_0
      93: checkcast     #27                 // class java/lang/Iterable
      96: astore        11
      98: iconst_0
      99: istore        12
     101: aload         11
     103: astore        13
     105: new           #29                 // class java/util/ArrayList
     108: dup
     109: aload         11
     111: bipush        10
     113: invokestatic  #33                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     116: invokespecial #36                 // Method java/util/ArrayList."<init>":(I)V
     119: checkcast     #38                 // class java/util/Collection
     122: astore        14
     124: iconst_0
     125: istore        15
     127: aload         13
     129: invokeinterface #42,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     134: astore        16
     136: aload         16
     138: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     143: ifeq          191
     146: aload         16
     148: invokeinterface #57,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     153: astore        17
     155: aload         14
     157: aload         17
     159: checkcast     #15                 // class java/lang/String
     162: astore        18
     164: astore        19
     166: iconst_0
     167: istore        20
     169: aload         18
     171: iload         9
     173: invokevirtual #61                 // Method java/lang/String.charAt:(I)C
     176: invokestatic  #67                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     179: aload         19
     181: swap
     182: invokeinterface #71,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     187: pop
     188: goto          136
     191: aload         14
     193: checkcast     #73                 // class java/util/List
     196: nop
     197: checkcast     #27                 // class java/lang/Iterable
     200: ldc           #75                 // String
     202: checkcast     #77                 // class java/lang/CharSequence
     205: aconst_null
     206: aconst_null
     207: iconst_0
     208: aconst_null
     209: aconst_null
     210: bipush        62
     212: aconst_null
     213: invokestatic  #81                 // Method kotlin/collections/CollectionsKt.joinToString$default:(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
     216: aload         21
     218: swap
     219: invokeinterface #71,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     224: pop
     225: goto          61
     228: aload         5
     230: checkcast     #73                 // class java/util/List
     233: nop
     234: areturn

  public static final void main();
    Code:
       0: ldc           #103                // class day8/Day8
       2: ldc           #105                // String /day8_test.txt
       4: invokevirtual #111                // Method java/lang/Class.getResourceAsStream:(Ljava/lang/String;)Ljava/io/InputStream;
       7: dup
       8: ldc           #113                // String getResourceAsStream(...)
      10: invokestatic  #119                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      13: astore_1
      14: getstatic     #125                // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      17: astore_2
      18: new           #127                // class java/io/InputStreamReader
      21: dup
      22: aload_1
      23: aload_2
      24: invokespecial #130                // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
      27: checkcast     #132                // class java/io/Reader
      30: astore_3
      31: sipush        8192
      34: istore        4
      36: aload_3
      37: instanceof    #134                // class java/io/BufferedReader
      40: ifeq          50
      43: aload_3
      44: checkcast     #134                // class java/io/BufferedReader
      47: goto          60
      50: new           #134                // class java/io/BufferedReader
      53: dup
      54: aload_3
      55: iload         4
      57: invokespecial #137                // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;I)V
      60: checkcast     #132                // class java/io/Reader
      63: invokestatic  #143                // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
      66: astore_0
      67: ldc           #103                // class day8/Day8
      69: ldc           #145                // String /day8_input.txt
      71: invokevirtual #111                // Method java/lang/Class.getResourceAsStream:(Ljava/lang/String;)Ljava/io/InputStream;
      74: dup
      75: ldc           #113                // String getResourceAsStream(...)
      77: invokestatic  #119                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      80: astore_2
      81: getstatic     #125                // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      84: astore_3
      85: new           #127                // class java/io/InputStreamReader
      88: dup
      89: aload_2
      90: aload_3
      91: invokespecial #130                // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
      94: checkcast     #132                // class java/io/Reader
      97: astore        4
      99: sipush        8192
     102: istore        5
     104: aload         4
     106: instanceof    #134                // class java/io/BufferedReader
     109: ifeq          120
     112: aload         4
     114: checkcast     #134                // class java/io/BufferedReader
     117: goto          131
     120: new           #134                // class java/io/BufferedReader
     123: dup
     124: aload         4
     126: iload         5
     128: invokespecial #137                // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;I)V
     131: checkcast     #132                // class java/io/Reader
     134: invokestatic  #143                // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
     137: astore_1
     138: new           #103                // class day8/Day8
     141: dup
     142: aload_0
     143: invokespecial #148                // Method day8/Day8."<init>":(Ljava/util/List;)V
     146: astore_2
     147: new           #103                // class day8/Day8
     150: dup
     151: aload_1
     152: invokespecial #148                // Method day8/Day8."<init>":(Ljava/util/List;)V
     155: astore_3
     156: new           #150                // class java/lang/StringBuilder
     159: dup
     160: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     163: ldc           #154                // String From left:
     165: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     168: aload_2
     169: invokevirtual #162                // Method day8/Day8.getVisibleFromLeft:()Ljava/util/Set;
     172: invokevirtual #165                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     175: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     178: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     181: swap
     182: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     185: new           #150                // class java/lang/StringBuilder
     188: dup
     189: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     192: ldc           #183                // String From right:
     194: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     197: aload_2
     198: invokevirtual #186                // Method day8/Day8.getVisibleFromRight:()Ljava/util/Set;
     201: invokevirtual #165                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     204: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     207: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     210: swap
     211: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     214: new           #150                // class java/lang/StringBuilder
     217: dup
     218: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     221: ldc           #188                // String From top:
     223: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     226: aload_2
     227: invokevirtual #191                // Method day8/Day8.getVisibleFromTop:()Ljava/util/Set;
     230: invokevirtual #165                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     233: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     236: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     239: swap
     240: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     243: new           #150                // class java/lang/StringBuilder
     246: dup
     247: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     250: ldc           #193                // String From bottom:
     252: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     255: aload_2
     256: invokevirtual #196                // Method day8/Day8.getVisibleFromBottom:()Ljava/util/Set;
     259: invokevirtual #165                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     262: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     265: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     268: swap
     269: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     272: new           #150                // class java/lang/StringBuilder
     275: dup
     276: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     279: ldc           #198                // String Part 1 test result:
     281: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     284: aload_2
     285: invokevirtual #201                // Method day8/Day8.part1:()I
     288: invokevirtual #204                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     291: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     294: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     297: swap
     298: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     301: new           #150                // class java/lang/StringBuilder
     304: dup
     305: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     308: ldc           #206                // String Part 1 result:
     310: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     313: aload_3
     314: invokevirtual #201                // Method day8/Day8.part1:()I
     317: invokevirtual #204                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     320: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     323: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     326: swap
     327: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     330: new           #150                // class java/lang/StringBuilder
     333: dup
     334: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     337: ldc           #208                // String Part 2 test result:
     339: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     342: aload_2
     343: invokevirtual #211                // Method day8/Day8.part2:()I
     346: invokevirtual #204                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     349: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     352: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     355: swap
     356: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     359: new           #150                // class java/lang/StringBuilder
     362: dup
     363: invokespecial #152                // Method java/lang/StringBuilder."<init>":()V
     366: ldc           #213                // String Part 2 result:
     368: invokevirtual #158                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     371: aload_3
     372: invokevirtual #211                // Method day8/Day8.part2:()I
     375: invokevirtual #204                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     378: invokevirtual #169                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     381: getstatic     #175                // Field java/lang/System.out:Ljava/io/PrintStream;
     384: swap
     385: invokevirtual #181                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     388: return

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

  public static final java.util.List access$transpose(java.util.List);
    Code:
       0: aload_0
       1: invokestatic  #229                // Method transpose:(Ljava/util/List;)Ljava/util/List;
       4: areturn
}

Compiled from "Day8.kt"
public final class day8.Day8 {
  private final java.util.List<java.lang.String> input;

  private final java.util.List<java.lang.String> transposed;

  private final java.util.List<java.util.List<java.lang.Integer>> inputInts;

  private final java.util.List<java.util.List<java.lang.Integer>> transposedInts;

  private final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromLeft;

  private final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromRight;

  private final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromTop;

  private final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromBottom;

  private final java.util.List<kotlin.Pair<java.lang.Integer, java.lang.Integer>> pairs;

  public day8.Day8(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #10                 // String input
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #19                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #22                 // Field input:Ljava/util/List;
      15: aload_0
      16: aload_0
      17: getfield      #22                 // Field input:Ljava/util/List;
      20: invokestatic  #28                 // Method day8/Day8Kt.access$transpose:(Ljava/util/List;)Ljava/util/List;
      23: putfield      #31                 // Field transposed:Ljava/util/List;
      26: aload_0
      27: aload_0
      28: getfield      #22                 // Field input:Ljava/util/List;
      31: checkcast     #33                 // class java/lang/Iterable
      34: astore_2
      35: astore        22
      37: iconst_0
      38: istore_3
      39: aload_2
      40: astore        4
      42: new           #35                 // class java/util/ArrayList
      45: dup
      46: aload_2
      47: bipush        10
      49: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      52: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
      55: checkcast     #46                 // class java/util/Collection
      58: astore        5
      60: iconst_0
      61: istore        6
      63: aload         4
      65: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      70: astore        7
      72: aload         7
      74: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      79: ifeq          219
      82: aload         7
      84: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      89: astore        8
      91: aload         5
      93: aload         8
      95: checkcast     #62                 // class java/lang/String
      98: astore        9
     100: astore        23
     102: iconst_0
     103: istore        10
     105: aload         9
     107: invokevirtual #66                 // Method java/lang/String.toCharArray:()[C
     110: dup
     111: ldc           #68                 // String toCharArray(...)
     113: invokestatic  #71                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
     116: astore        11
     118: nop
     119: iconst_0
     120: istore        12
     122: aload         11
     124: astore        13
     126: new           #35                 // class java/util/ArrayList
     129: dup
     130: aload         11
     132: arraylength
     133: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     136: checkcast     #46                 // class java/util/Collection
     139: astore        14
     141: iconst_0
     142: istore        15
     144: iconst_0
     145: istore        16
     147: aload         13
     149: arraylength
     150: istore        17
     152: iload         16
     154: iload         17
     156: if_icmpge     200
     159: aload         13
     161: iload         16
     163: caload
     164: istore        18
     166: aload         14
     168: iload         18
     170: istore        19
     172: astore        20
     174: iconst_0
     175: istore        21
     177: iload         19
     179: invokestatic  #77                 // Method kotlin/text/CharsKt.digitToInt:(C)I
     182: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     185: aload         20
     187: swap
     188: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     193: pop
     194: iinc          16, 1
     197: goto          152
     200: aload         14
     202: checkcast     #89                 // class java/util/List
     205: nop
     206: nop
     207: aload         23
     209: swap
     210: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     215: pop
     216: goto          72
     219: aload         5
     221: checkcast     #89                 // class java/util/List
     224: nop
     225: aload         22
     227: swap
     228: putfield      #92                 // Field inputInts:Ljava/util/List;
     231: aload_0
     232: aload_0
     233: getfield      #31                 // Field transposed:Ljava/util/List;
     236: checkcast     #33                 // class java/lang/Iterable
     239: astore_2
     240: astore        22
     242: iconst_0
     243: istore_3
     244: aload_2
     245: astore        4
     247: new           #35                 // class java/util/ArrayList
     250: dup
     251: aload_2
     252: bipush        10
     254: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     257: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     260: checkcast     #46                 // class java/util/Collection
     263: astore        5
     265: iconst_0
     266: istore        6
     268: aload         4
     270: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     275: astore        7
     277: aload         7
     279: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     284: ifeq          424
     287: aload         7
     289: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     294: astore        8
     296: aload         5
     298: aload         8
     300: checkcast     #62                 // class java/lang/String
     303: astore        9
     305: astore        23
     307: iconst_0
     308: istore        10
     310: aload         9
     312: invokevirtual #66                 // Method java/lang/String.toCharArray:()[C
     315: dup
     316: ldc           #68                 // String toCharArray(...)
     318: invokestatic  #71                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
     321: astore        11
     323: nop
     324: iconst_0
     325: istore        12
     327: aload         11
     329: astore        13
     331: new           #35                 // class java/util/ArrayList
     334: dup
     335: aload         11
     337: arraylength
     338: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     341: checkcast     #46                 // class java/util/Collection
     344: astore        14
     346: iconst_0
     347: istore        15
     349: iconst_0
     350: istore        16
     352: aload         13
     354: arraylength
     355: istore        17
     357: iload         16
     359: iload         17
     361: if_icmpge     405
     364: aload         13
     366: iload         16
     368: caload
     369: istore        18
     371: aload         14
     373: iload         18
     375: istore        19
     377: astore        20
     379: iconst_0
     380: istore        21
     382: iload         19
     384: invokestatic  #77                 // Method kotlin/text/CharsKt.digitToInt:(C)I
     387: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     390: aload         20
     392: swap
     393: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     398: pop
     399: iinc          16, 1
     402: goto          357
     405: aload         14
     407: checkcast     #89                 // class java/util/List
     410: nop
     411: nop
     412: aload         23
     414: swap
     415: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     420: pop
     421: goto          277
     424: aload         5
     426: checkcast     #89                 // class java/util/List
     429: nop
     430: aload         22
     432: swap
     433: putfield      #95                 // Field transposedInts:Ljava/util/List;
     436: aload_0
     437: aload_0
     438: getfield      #22                 // Field input:Ljava/util/List;
     441: checkcast     #33                 // class java/lang/Iterable
     444: astore_2
     445: astore        22
     447: iconst_0
     448: istore_3
     449: aload_2
     450: astore        4
     452: new           #35                 // class java/util/ArrayList
     455: dup
     456: aload_2
     457: bipush        10
     459: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     462: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     465: checkcast     #46                 // class java/util/Collection
     468: astore        5
     470: iconst_0
     471: istore        6
     473: iconst_0
     474: istore        7
     476: aload         4
     478: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     483: astore        8
     485: aload         8
     487: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     492: ifeq          557
     495: aload         8
     497: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     502: astore        9
     504: aload         5
     506: iload         7
     508: iinc          7, 1
     511: istore        10
     513: iload         10
     515: ifge          521
     518: invokestatic  #98                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     521: iload         10
     523: aload         9
     525: checkcast     #62                 // class java/lang/String
     528: astore        11
     530: istore        12
     532: astore        23
     534: iconst_0
     535: istore        13
     537: aload_0
     538: iload         12
     540: aload         11
     542: invokevirtual #102                // Method visibleFromStart:(ILjava/lang/String;)Ljava/util/Set;
     545: aload         23
     547: swap
     548: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     553: pop
     554: goto          485
     557: aload         5
     559: checkcast     #89                 // class java/util/List
     562: nop
     563: aload         22
     565: swap
     566: checkcast     #33                 // class java/lang/Iterable
     569: invokestatic  #106                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
     572: checkcast     #33                 // class java/lang/Iterable
     575: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     578: putfield      #114                // Field visibleFromLeft:Ljava/util/Set;
     581: aload_0
     582: aload_0
     583: getfield      #22                 // Field input:Ljava/util/List;
     586: checkcast     #33                 // class java/lang/Iterable
     589: astore_2
     590: astore        22
     592: iconst_0
     593: istore_3
     594: aload_2
     595: astore        4
     597: new           #35                 // class java/util/ArrayList
     600: dup
     601: aload_2
     602: bipush        10
     604: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     607: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     610: checkcast     #46                 // class java/util/Collection
     613: astore        5
     615: iconst_0
     616: istore        6
     618: iconst_0
     619: istore        7
     621: aload         4
     623: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     628: astore        8
     630: aload         8
     632: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     637: ifeq          702
     640: aload         8
     642: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     647: astore        9
     649: aload         5
     651: iload         7
     653: iinc          7, 1
     656: istore        10
     658: iload         10
     660: ifge          666
     663: invokestatic  #98                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     666: iload         10
     668: aload         9
     670: checkcast     #62                 // class java/lang/String
     673: astore        11
     675: istore        12
     677: astore        23
     679: iconst_0
     680: istore        13
     682: aload_0
     683: iload         12
     685: aload         11
     687: invokevirtual #117                // Method visibleFromEnd:(ILjava/lang/String;)Ljava/util/Set;
     690: aload         23
     692: swap
     693: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     698: pop
     699: goto          630
     702: aload         5
     704: checkcast     #89                 // class java/util/List
     707: nop
     708: aload         22
     710: swap
     711: checkcast     #33                 // class java/lang/Iterable
     714: invokestatic  #106                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
     717: checkcast     #33                 // class java/lang/Iterable
     720: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     723: putfield      #120                // Field visibleFromRight:Ljava/util/Set;
     726: aload_0
     727: aload_0
     728: getfield      #31                 // Field transposed:Ljava/util/List;
     731: checkcast     #33                 // class java/lang/Iterable
     734: astore_2
     735: astore        22
     737: iconst_0
     738: istore_3
     739: aload_2
     740: astore        4
     742: new           #35                 // class java/util/ArrayList
     745: dup
     746: aload_2
     747: bipush        10
     749: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     752: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     755: checkcast     #46                 // class java/util/Collection
     758: astore        5
     760: iconst_0
     761: istore        6
     763: iconst_0
     764: istore        7
     766: aload         4
     768: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     773: astore        8
     775: aload         8
     777: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     782: ifeq          847
     785: aload         8
     787: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     792: astore        9
     794: aload         5
     796: iload         7
     798: iinc          7, 1
     801: istore        10
     803: iload         10
     805: ifge          811
     808: invokestatic  #98                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     811: iload         10
     813: aload         9
     815: checkcast     #62                 // class java/lang/String
     818: astore        11
     820: istore        12
     822: astore        23
     824: iconst_0
     825: istore        13
     827: aload_0
     828: iload         12
     830: aload         11
     832: invokevirtual #123                // Method visibleFromTop:(ILjava/lang/String;)Ljava/util/Set;
     835: aload         23
     837: swap
     838: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     843: pop
     844: goto          775
     847: aload         5
     849: checkcast     #89                 // class java/util/List
     852: nop
     853: aload         22
     855: swap
     856: checkcast     #33                 // class java/lang/Iterable
     859: invokestatic  #106                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
     862: checkcast     #33                 // class java/lang/Iterable
     865: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     868: putfield      #125                // Field visibleFromTop:Ljava/util/Set;
     871: aload_0
     872: aload_0
     873: getfield      #31                 // Field transposed:Ljava/util/List;
     876: checkcast     #33                 // class java/lang/Iterable
     879: astore_2
     880: astore        22
     882: iconst_0
     883: istore_3
     884: aload_2
     885: astore        4
     887: new           #35                 // class java/util/ArrayList
     890: dup
     891: aload_2
     892: bipush        10
     894: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     897: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     900: checkcast     #46                 // class java/util/Collection
     903: astore        5
     905: iconst_0
     906: istore        6
     908: iconst_0
     909: istore        7
     911: aload         4
     913: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     918: astore        8
     920: aload         8
     922: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     927: ifeq          992
     930: aload         8
     932: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     937: astore        9
     939: aload         5
     941: iload         7
     943: iinc          7, 1
     946: istore        10
     948: iload         10
     950: ifge          956
     953: invokestatic  #98                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     956: iload         10
     958: aload         9
     960: checkcast     #62                 // class java/lang/String
     963: astore        11
     965: istore        12
     967: astore        23
     969: iconst_0
     970: istore        13
     972: aload_0
     973: iload         12
     975: aload         11
     977: invokevirtual #128                // Method visibleFromBottom:(ILjava/lang/String;)Ljava/util/Set;
     980: aload         23
     982: swap
     983: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     988: pop
     989: goto          920
     992: aload         5
     994: checkcast     #89                 // class java/util/List
     997: nop
     998: aload         22
    1000: swap
    1001: checkcast     #33                 // class java/lang/Iterable
    1004: invokestatic  #106                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
    1007: checkcast     #33                 // class java/lang/Iterable
    1010: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
    1013: putfield      #130                // Field visibleFromBottom:Ljava/util/Set;
    1016: aload_0
    1017: aload_0
    1018: getfield      #22                 // Field input:Ljava/util/List;
    1021: checkcast     #46                 // class java/util/Collection
    1024: invokestatic  #134                // Method kotlin/collections/CollectionsKt.getIndices:(Ljava/util/Collection;)Lkotlin/ranges/IntRange;
    1027: checkcast     #33                 // class java/lang/Iterable
    1030: astore_2
    1031: astore        22
    1033: iconst_0
    1034: istore_3
    1035: aload_2
    1036: astore        4
    1038: new           #35                 // class java/util/ArrayList
    1041: dup
    1042: aload_2
    1043: bipush        10
    1045: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
    1048: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
    1051: checkcast     #46                 // class java/util/Collection
    1054: astore        5
    1056: iconst_0
    1057: istore        6
    1059: aload         4
    1061: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1066: astore        7
    1068: aload         7
    1070: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1075: ifeq          1231
    1078: aload         7
    1080: checkcast     #136                // class kotlin/collections/IntIterator
    1083: invokevirtual #140                // Method kotlin/collections/IntIterator.nextInt:()I
    1086: istore        8
    1088: aload         5
    1090: iload         8
    1092: istore        9
    1094: astore        23
    1096: iconst_0
    1097: istore        10
    1099: aload_0
    1100: getfield      #31                 // Field transposed:Ljava/util/List;
    1103: checkcast     #46                 // class java/util/Collection
    1106: invokestatic  #134                // Method kotlin/collections/CollectionsKt.getIndices:(Ljava/util/Collection;)Lkotlin/ranges/IntRange;
    1109: checkcast     #33                 // class java/lang/Iterable
    1112: astore        11
    1114: iconst_0
    1115: istore        12
    1117: aload         11
    1119: astore        13
    1121: new           #35                 // class java/util/ArrayList
    1124: dup
    1125: aload         11
    1127: bipush        10
    1129: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
    1132: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
    1135: checkcast     #46                 // class java/util/Collection
    1138: astore        14
    1140: iconst_0
    1141: istore        15
    1143: aload         13
    1145: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1150: astore        16
    1152: aload         16
    1154: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1159: ifeq          1212
    1162: aload         16
    1164: checkcast     #136                // class kotlin/collections/IntIterator
    1167: invokevirtual #140                // Method kotlin/collections/IntIterator.nextInt:()I
    1170: istore        17
    1172: aload         14
    1174: iload         17
    1176: istore        18
    1178: astore        19
    1180: iconst_0
    1181: istore        20
    1183: new           #142                // class kotlin/Pair
    1186: dup
    1187: iload         18
    1189: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1192: iload         9
    1194: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1197: invokespecial #145                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
    1200: aload         19
    1202: swap
    1203: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1208: pop
    1209: goto          1152
    1212: aload         14
    1214: checkcast     #89                 // class java/util/List
    1217: nop
    1218: nop
    1219: aload         23
    1221: swap
    1222: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1227: pop
    1228: goto          1068
    1231: aload         5
    1233: checkcast     #89                 // class java/util/List
    1236: nop
    1237: aload         22
    1239: swap
    1240: checkcast     #33                 // class java/lang/Iterable
    1243: invokestatic  #106                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
    1246: putfield      #148                // Field pairs:Ljava/util/List;
    1249: return

  public final java.util.List<java.lang.String> getInput();
    Code:
       0: aload_0
       1: getfield      #22                 // Field input:Ljava/util/List;
       4: areturn

  public final java.util.List<java.util.List<java.lang.Integer>> getInputInts();
    Code:
       0: aload_0
       1: getfield      #92                 // Field inputInts:Ljava/util/List;
       4: areturn

  public final java.util.List<java.util.List<java.lang.Integer>> getTransposedInts();
    Code:
       0: aload_0
       1: getfield      #95                 // Field transposedInts:Ljava/util/List;
       4: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> getVisibleFromLeft();
    Code:
       0: aload_0
       1: getfield      #114                // Field visibleFromLeft:Ljava/util/Set;
       4: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> getVisibleFromRight();
    Code:
       0: aload_0
       1: getfield      #120                // Field visibleFromRight:Ljava/util/Set;
       4: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> getVisibleFromTop();
    Code:
       0: aload_0
       1: getfield      #125                // Field visibleFromTop:Ljava/util/Set;
       4: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> getVisibleFromBottom();
    Code:
       0: aload_0
       1: getfield      #130                // Field visibleFromBottom:Ljava/util/Set;
       4: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromStart(int, java.lang.String);
    Code:
       0: aload_2
       1: ldc           #197                // String row
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: checkcast     #199                // class java/lang/CharSequence
      10: invokestatic  #205                // Method kotlin/text/StringsKt.isBlank:(Ljava/lang/CharSequence;)Z
      13: ifeq          20
      16: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      19: areturn
      20: aload_2
      21: checkcast     #199                // class java/lang/CharSequence
      24: astore        4
      26: new           #212                // class day8/RowInfo
      29: dup
      30: iload_1
      31: iconst_m1
      32: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      35: invokespecial #215                // Method day8/RowInfo."<init>":(IILjava/util/Set;)V
      38: astore        5
      40: iconst_0
      41: istore        6
      43: iconst_0
      44: istore        7
      46: aload         5
      48: astore        8
      50: iconst_0
      51: istore        9
      53: iload         9
      55: aload         4
      57: invokeinterface #218,  1          // InterfaceMethod java/lang/CharSequence.length:()I
      62: if_icmpge     111
      65: aload         4
      67: iload         9
      69: invokeinterface #222,  2          // InterfaceMethod java/lang/CharSequence.charAt:(I)C
      74: istore        10
      76: iload         7
      78: iinc          7, 1
      81: aload         8
      83: iload         10
      85: istore        11
      87: astore        12
      89: istore        13
      91: iconst_0
      92: istore        14
      94: aload         12
      96: iload         11
      98: iload         13
     100: invokevirtual #225                // Method day8/RowInfo.add:(CI)Lday8/RowInfo;
     103: astore        8
     105: iinc          9, 1
     108: goto          53
     111: aload         8
     113: astore_3
     114: aload_3
     115: invokevirtual #228                // Method day8/RowInfo.getPositions:()Ljava/util/Set;
     118: checkcast     #33                 // class java/lang/Iterable
     121: astore        4
     123: iconst_0
     124: istore        5
     126: aload         4
     128: astore        6
     130: new           #35                 // class java/util/ArrayList
     133: dup
     134: aload         4
     136: bipush        10
     138: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     141: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     144: checkcast     #46                 // class java/util/Collection
     147: astore        7
     149: iconst_0
     150: istore        8
     152: aload         6
     154: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     159: astore        9
     161: aload         9
     163: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     168: ifeq          225
     171: aload         9
     173: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     178: astore        10
     180: aload         7
     182: aload         10
     184: checkcast     #230                // class java/lang/Number
     187: invokevirtual #233                // Method java/lang/Number.intValue:()I
     190: istore        11
     192: astore        15
     194: iconst_0
     195: istore        12
     197: new           #142                // class kotlin/Pair
     200: dup
     201: iload_1
     202: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     205: iload         11
     207: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     210: invokespecial #145                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     213: aload         15
     215: swap
     216: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     221: pop
     222: goto          161
     225: aload         7
     227: checkcast     #89                 // class java/util/List
     230: nop
     231: checkcast     #33                 // class java/lang/Iterable
     234: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     237: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromEnd(int, java.lang.String);
    Code:
       0: aload_2
       1: ldc           #197                // String row
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: checkcast     #199                // class java/lang/CharSequence
      10: invokestatic  #205                // Method kotlin/text/StringsKt.isBlank:(Ljava/lang/CharSequence;)Z
      13: ifeq          20
      16: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      19: areturn
      20: aload_2
      21: checkcast     #199                // class java/lang/CharSequence
      24: astore        4
      26: new           #212                // class day8/RowInfo
      29: dup
      30: iload_1
      31: iconst_m1
      32: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      35: invokespecial #215                // Method day8/RowInfo."<init>":(IILjava/util/Set;)V
      38: astore        5
      40: iconst_0
      41: istore        6
      43: aload         4
      45: invokestatic  #250                // Method kotlin/text/StringsKt.getLastIndex:(Ljava/lang/CharSequence;)I
      48: istore        7
      50: aload         5
      52: astore        8
      54: iload         7
      56: iflt          98
      59: iload         7
      61: aload         4
      63: iload         7
      65: invokeinterface #222,  2          // InterfaceMethod java/lang/CharSequence.charAt:(I)C
      70: aload         8
      72: astore        9
      74: istore        10
      76: istore        11
      78: iconst_0
      79: istore        12
      81: aload         9
      83: iload         10
      85: iload         11
      87: invokevirtual #225                // Method day8/RowInfo.add:(CI)Lday8/RowInfo;
      90: astore        8
      92: iinc          7, -1
      95: goto          54
      98: aload         8
     100: astore_3
     101: aload_3
     102: invokevirtual #228                // Method day8/RowInfo.getPositions:()Ljava/util/Set;
     105: checkcast     #33                 // class java/lang/Iterable
     108: astore        4
     110: iconst_0
     111: istore        5
     113: aload         4
     115: astore        6
     117: new           #35                 // class java/util/ArrayList
     120: dup
     121: aload         4
     123: bipush        10
     125: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     128: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     131: checkcast     #46                 // class java/util/Collection
     134: astore        7
     136: iconst_0
     137: istore        8
     139: aload         6
     141: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     146: astore        9
     148: aload         9
     150: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     155: ifeq          212
     158: aload         9
     160: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     165: astore        10
     167: aload         7
     169: aload         10
     171: checkcast     #230                // class java/lang/Number
     174: invokevirtual #233                // Method java/lang/Number.intValue:()I
     177: istore        11
     179: astore        13
     181: iconst_0
     182: istore        12
     184: new           #142                // class kotlin/Pair
     187: dup
     188: iload_1
     189: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     192: iload         11
     194: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     197: invokespecial #145                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     200: aload         13
     202: swap
     203: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     208: pop
     209: goto          148
     212: aload         7
     214: checkcast     #89                 // class java/util/List
     217: nop
     218: checkcast     #33                 // class java/lang/Iterable
     221: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     224: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromTop(int, java.lang.String);
    Code:
       0: aload_2
       1: ldc_w         #256                // String col
       4: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_2
       8: checkcast     #199                // class java/lang/CharSequence
      11: invokestatic  #205                // Method kotlin/text/StringsKt.isBlank:(Ljava/lang/CharSequence;)Z
      14: ifeq          21
      17: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      20: areturn
      21: aload_2
      22: checkcast     #199                // class java/lang/CharSequence
      25: astore        4
      27: new           #212                // class day8/RowInfo
      30: dup
      31: iload_1
      32: iconst_m1
      33: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      36: invokespecial #215                // Method day8/RowInfo."<init>":(IILjava/util/Set;)V
      39: astore        5
      41: iconst_0
      42: istore        6
      44: iconst_0
      45: istore        7
      47: aload         5
      49: astore        8
      51: iconst_0
      52: istore        9
      54: iload         9
      56: aload         4
      58: invokeinterface #218,  1          // InterfaceMethod java/lang/CharSequence.length:()I
      63: if_icmpge     112
      66: aload         4
      68: iload         9
      70: invokeinterface #222,  2          // InterfaceMethod java/lang/CharSequence.charAt:(I)C
      75: istore        10
      77: iload         7
      79: iinc          7, 1
      82: aload         8
      84: iload         10
      86: istore        11
      88: astore        12
      90: istore        13
      92: iconst_0
      93: istore        14
      95: aload         12
      97: iload         11
      99: iload         13
     101: invokevirtual #225                // Method day8/RowInfo.add:(CI)Lday8/RowInfo;
     104: astore        8
     106: iinc          9, 1
     109: goto          54
     112: aload         8
     114: astore_3
     115: aload_3
     116: invokevirtual #228                // Method day8/RowInfo.getPositions:()Ljava/util/Set;
     119: checkcast     #33                 // class java/lang/Iterable
     122: astore        4
     124: iconst_0
     125: istore        5
     127: aload         4
     129: astore        6
     131: new           #35                 // class java/util/ArrayList
     134: dup
     135: aload         4
     137: bipush        10
     139: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     142: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     145: checkcast     #46                 // class java/util/Collection
     148: astore        7
     150: iconst_0
     151: istore        8
     153: aload         6
     155: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     160: astore        9
     162: aload         9
     164: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     169: ifeq          226
     172: aload         9
     174: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     179: astore        10
     181: aload         7
     183: aload         10
     185: checkcast     #230                // class java/lang/Number
     188: invokevirtual #233                // Method java/lang/Number.intValue:()I
     191: istore        11
     193: astore        15
     195: iconst_0
     196: istore        12
     198: new           #142                // class kotlin/Pair
     201: dup
     202: iload         11
     204: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     207: iload_1
     208: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     211: invokespecial #145                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     214: aload         15
     216: swap
     217: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     222: pop
     223: goto          162
     226: aload         7
     228: checkcast     #89                 // class java/util/List
     231: nop
     232: checkcast     #33                 // class java/lang/Iterable
     235: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     238: areturn

  public final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> visibleFromBottom(int, java.lang.String);
    Code:
       0: aload_2
       1: ldc_w         #256                // String col
       4: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_2
       8: checkcast     #199                // class java/lang/CharSequence
      11: invokestatic  #205                // Method kotlin/text/StringsKt.isBlank:(Ljava/lang/CharSequence;)Z
      14: ifeq          21
      17: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      20: areturn
      21: aload_2
      22: checkcast     #199                // class java/lang/CharSequence
      25: astore        4
      27: new           #212                // class day8/RowInfo
      30: dup
      31: iload_1
      32: iconst_m1
      33: invokestatic  #210                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      36: invokespecial #215                // Method day8/RowInfo."<init>":(IILjava/util/Set;)V
      39: astore        5
      41: iconst_0
      42: istore        6
      44: aload         4
      46: invokestatic  #250                // Method kotlin/text/StringsKt.getLastIndex:(Ljava/lang/CharSequence;)I
      49: istore        7
      51: aload         5
      53: astore        8
      55: iload         7
      57: iflt          99
      60: iload         7
      62: aload         4
      64: iload         7
      66: invokeinterface #222,  2          // InterfaceMethod java/lang/CharSequence.charAt:(I)C
      71: aload         8
      73: astore        9
      75: istore        10
      77: istore        11
      79: iconst_0
      80: istore        12
      82: aload         9
      84: iload         10
      86: iload         11
      88: invokevirtual #225                // Method day8/RowInfo.add:(CI)Lday8/RowInfo;
      91: astore        8
      93: iinc          7, -1
      96: goto          55
      99: aload         8
     101: astore_3
     102: aload_3
     103: invokevirtual #228                // Method day8/RowInfo.getPositions:()Ljava/util/Set;
     106: checkcast     #33                 // class java/lang/Iterable
     109: astore        4
     111: iconst_0
     112: istore        5
     114: aload         4
     116: astore        6
     118: new           #35                 // class java/util/ArrayList
     121: dup
     122: aload         4
     124: bipush        10
     126: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     129: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     132: checkcast     #46                 // class java/util/Collection
     135: astore        7
     137: iconst_0
     138: istore        8
     140: aload         6
     142: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     147: astore        9
     149: aload         9
     151: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     156: ifeq          213
     159: aload         9
     161: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     166: astore        10
     168: aload         7
     170: aload         10
     172: checkcast     #230                // class java/lang/Number
     175: invokevirtual #233                // Method java/lang/Number.intValue:()I
     178: istore        11
     180: astore        13
     182: iconst_0
     183: istore        12
     185: new           #142                // class kotlin/Pair
     188: dup
     189: iload         11
     191: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     194: iload_1
     195: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     198: invokespecial #145                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     201: aload         13
     203: swap
     204: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     209: pop
     210: goto          149
     213: aload         7
     215: checkcast     #89                 // class java/util/List
     218: nop
     219: checkcast     #33                 // class java/lang/Iterable
     222: invokestatic  #110                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     225: areturn

  public final int part1();
    Code:
       0: aload_0
       1: getfield      #114                // Field visibleFromLeft:Ljava/util/Set;
       4: checkcast     #33                 // class java/lang/Iterable
       7: aload_0
       8: getfield      #120                // Field visibleFromRight:Ljava/util/Set;
      11: checkcast     #33                 // class java/lang/Iterable
      14: invokestatic  #266                // Method kotlin/collections/CollectionsKt.union:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
      17: checkcast     #33                 // class java/lang/Iterable
      20: aload_0
      21: getfield      #125                // Field visibleFromTop:Ljava/util/Set;
      24: checkcast     #33                 // class java/lang/Iterable
      27: invokestatic  #266                // Method kotlin/collections/CollectionsKt.union:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
      30: checkcast     #33                 // class java/lang/Iterable
      33: aload_0
      34: getfield      #130                // Field visibleFromBottom:Ljava/util/Set;
      37: checkcast     #33                 // class java/lang/Iterable
      40: invokestatic  #266                // Method kotlin/collections/CollectionsKt.union:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
      43: astore_1
      44: new           #268                // class java/lang/StringBuilder
      47: dup
      48: invokespecial #269                // Method java/lang/StringBuilder."<init>":()V
      51: ldc_w         #271                // String Union:
      54: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      57: aload_1
      58: checkcast     #33                 // class java/lang/Iterable
      61: new           #277                // class day8/Day8$part1$$inlined$compareBy$1
      64: dup
      65: invokespecial #278                // Method day8/Day8$part1$$inlined$compareBy$1."<init>":()V
      68: checkcast     #280                // class java/util/Comparator
      71: astore_2
      72: new           #282                // class day8/Day8$part1$$inlined$thenBy$1
      75: dup
      76: aload_2
      77: invokespecial #285                // Method day8/Day8$part1$$inlined$thenBy$1."<init>":(Ljava/util/Comparator;)V
      80: checkcast     #280                // class java/util/Comparator
      83: invokestatic  #289                // Method kotlin/collections/CollectionsKt.sortedWith:(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;
      86: invokevirtual #292                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      89: invokevirtual #296                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      92: getstatic     #302                // Field java/lang/System.out:Ljava/io/PrintStream;
      95: swap
      96: invokevirtual #308                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      99: aload_1
     100: invokeinterface #313,  1          // InterfaceMethod java/util/Set.size:()I
     105: ireturn

  public final java.util.List<kotlin.Pair<java.lang.Integer, java.lang.Integer>> getPairs();
    Code:
       0: aload_0
       1: getfield      #148                // Field pairs:Ljava/util/List;
       4: areturn

  public final int part2();
    Code:
       0: aload_0
       1: getfield      #148                // Field pairs:Ljava/util/List;
       4: checkcast     #33                 // class java/lang/Iterable
       7: astore_2
       8: iconst_0
       9: istore_3
      10: new           #318                // class java/util/LinkedHashMap
      13: dup
      14: aload_2
      15: bipush        10
      17: invokestatic  #41                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      20: invokestatic  #324                // Method kotlin/collections/MapsKt.mapCapacity:(I)I
      23: bipush        16
      25: invokestatic  #330                // Method kotlin/ranges/RangesKt.coerceAtLeast:(II)I
      28: invokespecial #331                // Method java/util/LinkedHashMap."<init>":(I)V
      31: astore        4
      33: aload_2
      34: astore        5
      36: iconst_0
      37: istore        6
      39: aload         5
      41: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      46: astore        7
      48: aload         7
      50: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      55: ifeq          135
      58: aload         7
      60: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      65: astore        8
      67: aload         4
      69: checkcast     #333                // class java/util/Map
      72: aload         8
      74: aload         8
      76: checkcast     #142                // class kotlin/Pair
      79: astore        9
      81: astore        12
      83: astore        11
      85: iconst_0
      86: istore        10
      88: aload_0
      89: aload         9
      91: invokevirtual #337                // Method sightLeft:(Lkotlin/Pair;)I
      94: aload_0
      95: aload         9
      97: invokevirtual #340                // Method sightRight:(Lkotlin/Pair;)I
     100: imul
     101: aload_0
     102: aload         9
     104: invokevirtual #343                // Method sightDown:(Lkotlin/Pair;)I
     107: imul
     108: aload_0
     109: aload         9
     111: invokevirtual #346                // Method sightUp:(Lkotlin/Pair;)I
     114: imul
     115: invokestatic  #83                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     118: astore        13
     120: aload         11
     122: aload         12
     124: aload         13
     126: invokeinterface #350,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     131: pop
     132: goto          48
     135: aload         4
     137: checkcast     #333                // class java/util/Map
     140: nop
     141: astore_1
     142: aload_1
     143: astore_3
     144: invokedynamic #369,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function2;
     149: invokedynamic #380,  0            // InvokeDynamic #1:compare:(Lkotlin/jvm/functions/Function2;)Ljava/util/Comparator;
     154: astore        4
     156: aload_3
     157: invokeinterface #383,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     162: checkcast     #33                 // class java/lang/Iterable
     165: aload         4
     167: invokestatic  #387                // Method kotlin/collections/CollectionsKt.maxWithOrThrow:(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/lang/Object;
     170: checkcast     #389                // class java/util/Map$Entry
     173: astore_2
     174: new           #268                // class java/lang/StringBuilder
     177: dup
     178: invokespecial #269                // Method java/lang/StringBuilder."<init>":()V
     181: ldc_w         #391                // String Max pair is
     184: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     187: aload_2
     188: invokeinterface #394,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     193: invokevirtual #292                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     196: ldc_w         #396                // String  =
     199: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     202: aload_2
     203: invokeinterface #399,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     208: checkcast     #230                // class java/lang/Number
     211: invokevirtual #233                // Method java/lang/Number.intValue:()I
     214: invokevirtual #402                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     217: invokevirtual #296                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     220: getstatic     #302                // Field java/lang/System.out:Ljava/io/PrintStream;
     223: swap
     224: invokevirtual #308                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     227: aload_2
     228: invokeinterface #399,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     233: checkcast     #230                // class java/lang/Number
     236: invokevirtual #233                // Method java/lang/Number.intValue:()I
     239: ireturn

  public final int calculateScenicScore(kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc_w         #419                // String pair
       4: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: aload_1
       9: invokevirtual #346                // Method sightUp:(Lkotlin/Pair;)I
      12: istore_2
      13: aload_0
      14: aload_1
      15: invokevirtual #337                // Method sightLeft:(Lkotlin/Pair;)I
      18: istore_3
      19: aload_0
      20: aload_1
      21: invokevirtual #343                // Method sightDown:(Lkotlin/Pair;)I
      24: istore        4
      26: aload_0
      27: aload_1
      28: invokevirtual #340                // Method sightRight:(Lkotlin/Pair;)I
      31: istore        5
      33: new           #268                // class java/lang/StringBuilder
      36: dup
      37: invokespecial #269                // Method java/lang/StringBuilder."<init>":()V
      40: ldc_w         #421                // String [up=
      43: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      46: iload_2
      47: invokevirtual #402                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      50: ldc_w         #423                // String ][left=
      53: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      56: iload_3
      57: invokevirtual #402                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      60: ldc_w         #425                // String ][down=
      63: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      66: iload         4
      68: invokevirtual #402                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      71: ldc_w         #427                // String ][right=
      74: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      77: iload         5
      79: invokevirtual #402                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      82: bipush        93
      84: invokevirtual #430                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      87: invokevirtual #296                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      90: getstatic     #302                // Field java/lang/System.out:Ljava/io/PrintStream;
      93: swap
      94: invokevirtual #308                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      97: iload_2
      98: iload_3
      99: imul
     100: iload         4
     102: imul
     103: iload         5
     105: imul
     106: istore        6
     108: new           #268                // class java/lang/StringBuilder
     111: dup
     112: invokespecial #269                // Method java/lang/StringBuilder."<init>":()V
     115: ldc_w         #432                // String sum =
     118: invokevirtual #275                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     121: iload         6
     123: invokevirtual #402                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     126: invokevirtual #296                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     129: getstatic     #302                // Field java/lang/System.out:Ljava/io/PrintStream;
     132: swap
     133: invokevirtual #308                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     136: iload         6
     138: ireturn

  public final int sightUp(kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc_w         #439                // String position
       4: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: getfield      #92                 // Field inputInts:Ljava/util/List;
      11: aload_1
      12: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      15: checkcast     #230                // class java/lang/Number
      18: invokevirtual #233                // Method java/lang/Number.intValue:()I
      21: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      26: checkcast     #89                 // class java/util/List
      29: aload_1
      30: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      33: checkcast     #230                // class java/lang/Number
      36: invokevirtual #233                // Method java/lang/Number.intValue:()I
      39: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      44: checkcast     #230                // class java/lang/Number
      47: invokevirtual #233                // Method java/lang/Number.intValue:()I
      50: istore_2
      51: aload_0
      52: getfield      #95                 // Field transposedInts:Ljava/util/List;
      55: aload_1
      56: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      59: checkcast     #230                // class java/lang/Number
      62: invokevirtual #233                // Method java/lang/Number.intValue:()I
      65: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      70: checkcast     #33                 // class java/lang/Iterable
      73: aload_1
      74: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      77: checkcast     #230                // class java/lang/Number
      80: invokevirtual #233                // Method java/lang/Number.intValue:()I
      83: invokestatic  #453                // Method kotlin/collections/CollectionsKt.take:(Ljava/lang/Iterable;I)Ljava/util/List;
      86: astore_3
      87: aload_3
      88: astore        5
      90: iconst_0
      91: istore        6
      93: aload         5
      95: invokeinterface #456,  1          // InterfaceMethod java/util/List.isEmpty:()Z
     100: ifeq          109
     103: invokestatic  #459                // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
     106: goto          264
     109: aload         5
     111: aload         5
     113: invokeinterface #460,  1          // InterfaceMethod java/util/List.size:()I
     118: invokeinterface #464,  2          // InterfaceMethod java/util/List.listIterator:(I)Ljava/util/ListIterator;
     123: astore        7
     125: aload         7
     127: invokeinterface #469,  1          // InterfaceMethod java/util/ListIterator.hasPrevious:()Z
     132: ifeq          256
     135: aload         7
     137: invokeinterface #472,  1          // InterfaceMethod java/util/ListIterator.previous:()Ljava/lang/Object;
     142: checkcast     #230                // class java/lang/Number
     145: invokevirtual #233                // Method java/lang/Number.intValue:()I
     148: istore        8
     150: iconst_0
     151: istore        9
     153: iload         8
     155: iload_2
     156: if_icmpge     163
     159: iconst_1
     160: goto          164
     163: iconst_0
     164: ifne          125
     167: aload         7
     169: invokeinterface #473,  1          // InterfaceMethod java/util/ListIterator.next:()Ljava/lang/Object;
     174: pop
     175: aload         5
     177: invokeinterface #460,  1          // InterfaceMethod java/util/List.size:()I
     182: aload         7
     184: invokeinterface #476,  1          // InterfaceMethod java/util/ListIterator.nextIndex:()I
     189: isub
     190: istore        10
     192: iload         10
     194: ifne          203
     197: invokestatic  #459                // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
     200: goto          264
     203: new           #35                 // class java/util/ArrayList
     206: dup
     207: iload         10
     209: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     212: astore        11
     214: aload         11
     216: astore        12
     218: iconst_0
     219: istore        13
     221: aload         7
     223: invokeinterface #477,  1          // InterfaceMethod java/util/ListIterator.hasNext:()Z
     228: ifeq          247
     231: aload         12
     233: aload         7
     235: invokeinterface #473,  1          // InterfaceMethod java/util/ListIterator.next:()Ljava/lang/Object;
     240: invokevirtual #478                // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
     243: pop
     244: goto          221
     247: nop
     248: aload         11
     250: checkcast     #89                 // class java/util/List
     253: goto          264
     256: aload         5
     258: checkcast     #33                 // class java/lang/Iterable
     261: invokestatic  #481                // Method kotlin/collections/CollectionsKt.toList:(Ljava/lang/Iterable;)Ljava/util/List;
     264: checkcast     #46                 // class java/util/Collection
     267: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     272: istore        4
     274: iload         4
     276: aload_3
     277: checkcast     #46                 // class java/util/Collection
     280: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     285: if_icmpne     291
     288: iload         4
     290: ireturn
     291: iload         4
     293: iconst_1
     294: iadd
     295: ireturn

  public final int sightDown(kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc_w         #439                // String position
       4: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: getfield      #92                 // Field inputInts:Ljava/util/List;
      11: aload_1
      12: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      15: checkcast     #230                // class java/lang/Number
      18: invokevirtual #233                // Method java/lang/Number.intValue:()I
      21: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      26: checkcast     #89                 // class java/util/List
      29: aload_1
      30: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      33: checkcast     #230                // class java/lang/Number
      36: invokevirtual #233                // Method java/lang/Number.intValue:()I
      39: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      44: checkcast     #230                // class java/lang/Number
      47: invokevirtual #233                // Method java/lang/Number.intValue:()I
      50: istore_2
      51: aload_0
      52: getfield      #95                 // Field transposedInts:Ljava/util/List;
      55: aload_1
      56: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      59: checkcast     #230                // class java/lang/Number
      62: invokevirtual #233                // Method java/lang/Number.intValue:()I
      65: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      70: checkcast     #33                 // class java/lang/Iterable
      73: aload_1
      74: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      77: checkcast     #230                // class java/lang/Number
      80: invokevirtual #233                // Method java/lang/Number.intValue:()I
      83: iconst_1
      84: iadd
      85: invokestatic  #497                // Method kotlin/collections/CollectionsKt.drop:(Ljava/lang/Iterable;I)Ljava/util/List;
      88: astore_3
      89: aload_3
      90: checkcast     #33                 // class java/lang/Iterable
      93: astore        5
      95: iconst_0
      96: istore        6
      98: new           #35                 // class java/util/ArrayList
     101: dup
     102: invokespecial #498                // Method java/util/ArrayList."<init>":()V
     105: astore        7
     107: aload         5
     109: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     114: astore        8
     116: aload         8
     118: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     123: ifeq          176
     126: aload         8
     128: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     133: astore        9
     135: aload         9
     137: checkcast     #230                // class java/lang/Number
     140: invokevirtual #233                // Method java/lang/Number.intValue:()I
     143: istore        10
     145: iconst_0
     146: istore        11
     148: iload         10
     150: iload_2
     151: if_icmpge     158
     154: iconst_1
     155: goto          159
     158: iconst_0
     159: ifne          165
     162: goto          176
     165: aload         7
     167: aload         9
     169: invokevirtual #478                // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
     172: pop
     173: goto          116
     176: aload         7
     178: checkcast     #89                 // class java/util/List
     181: checkcast     #46                 // class java/util/Collection
     184: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     189: istore        4
     191: iload         4
     193: aload_3
     194: checkcast     #46                 // class java/util/Collection
     197: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     202: if_icmpne     208
     205: iload         4
     207: ireturn
     208: iload         4
     210: iconst_1
     211: iadd
     212: ireturn

  public final int sightRight(kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc_w         #439                // String position
       4: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: getfield      #92                 // Field inputInts:Ljava/util/List;
      11: aload_1
      12: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      15: checkcast     #230                // class java/lang/Number
      18: invokevirtual #233                // Method java/lang/Number.intValue:()I
      21: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      26: checkcast     #89                 // class java/util/List
      29: aload_1
      30: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      33: checkcast     #230                // class java/lang/Number
      36: invokevirtual #233                // Method java/lang/Number.intValue:()I
      39: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      44: checkcast     #230                // class java/lang/Number
      47: invokevirtual #233                // Method java/lang/Number.intValue:()I
      50: istore_2
      51: aload_0
      52: getfield      #92                 // Field inputInts:Ljava/util/List;
      55: aload_1
      56: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      59: checkcast     #230                // class java/lang/Number
      62: invokevirtual #233                // Method java/lang/Number.intValue:()I
      65: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      70: checkcast     #33                 // class java/lang/Iterable
      73: aload_1
      74: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      77: checkcast     #230                // class java/lang/Number
      80: invokevirtual #233                // Method java/lang/Number.intValue:()I
      83: iconst_1
      84: iadd
      85: invokestatic  #497                // Method kotlin/collections/CollectionsKt.drop:(Ljava/lang/Iterable;I)Ljava/util/List;
      88: astore_3
      89: aload_3
      90: checkcast     #33                 // class java/lang/Iterable
      93: astore        5
      95: iconst_0
      96: istore        6
      98: new           #35                 // class java/util/ArrayList
     101: dup
     102: invokespecial #498                // Method java/util/ArrayList."<init>":()V
     105: astore        7
     107: aload         5
     109: invokeinterface #50,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     114: astore        8
     116: aload         8
     118: invokeinterface #56,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     123: ifeq          176
     126: aload         8
     128: invokeinterface #60,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     133: astore        9
     135: aload         9
     137: checkcast     #230                // class java/lang/Number
     140: invokevirtual #233                // Method java/lang/Number.intValue:()I
     143: istore        10
     145: iconst_0
     146: istore        11
     148: iload         10
     150: iload_2
     151: if_icmpge     158
     154: iconst_1
     155: goto          159
     158: iconst_0
     159: ifne          165
     162: goto          176
     165: aload         7
     167: aload         9
     169: invokevirtual #478                // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
     172: pop
     173: goto          116
     176: aload         7
     178: checkcast     #89                 // class java/util/List
     181: checkcast     #46                 // class java/util/Collection
     184: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     189: istore        4
     191: iload         4
     193: aload_3
     194: checkcast     #46                 // class java/util/Collection
     197: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     202: if_icmpne     208
     205: iload         4
     207: ireturn
     208: iload         4
     210: iconst_1
     211: iadd
     212: ireturn

  public final int sightLeft(kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc_w         #439                // String position
       4: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: getfield      #92                 // Field inputInts:Ljava/util/List;
      11: aload_1
      12: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      15: checkcast     #230                // class java/lang/Number
      18: invokevirtual #233                // Method java/lang/Number.intValue:()I
      21: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      26: checkcast     #89                 // class java/util/List
      29: aload_1
      30: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      33: checkcast     #230                // class java/lang/Number
      36: invokevirtual #233                // Method java/lang/Number.intValue:()I
      39: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      44: checkcast     #230                // class java/lang/Number
      47: invokevirtual #233                // Method java/lang/Number.intValue:()I
      50: istore_2
      51: aload_0
      52: getfield      #92                 // Field inputInts:Ljava/util/List;
      55: aload_1
      56: invokevirtual #442                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      59: checkcast     #230                // class java/lang/Number
      62: invokevirtual #233                // Method java/lang/Number.intValue:()I
      65: invokeinterface #446,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      70: checkcast     #33                 // class java/lang/Iterable
      73: aload_1
      74: invokevirtual #449                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      77: checkcast     #230                // class java/lang/Number
      80: invokevirtual #233                // Method java/lang/Number.intValue:()I
      83: invokestatic  #453                // Method kotlin/collections/CollectionsKt.take:(Ljava/lang/Iterable;I)Ljava/util/List;
      86: astore_3
      87: aload_3
      88: astore        5
      90: iconst_0
      91: istore        6
      93: aload         5
      95: invokeinterface #456,  1          // InterfaceMethod java/util/List.isEmpty:()Z
     100: ifeq          109
     103: invokestatic  #459                // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
     106: goto          264
     109: aload         5
     111: aload         5
     113: invokeinterface #460,  1          // InterfaceMethod java/util/List.size:()I
     118: invokeinterface #464,  2          // InterfaceMethod java/util/List.listIterator:(I)Ljava/util/ListIterator;
     123: astore        7
     125: aload         7
     127: invokeinterface #469,  1          // InterfaceMethod java/util/ListIterator.hasPrevious:()Z
     132: ifeq          256
     135: aload         7
     137: invokeinterface #472,  1          // InterfaceMethod java/util/ListIterator.previous:()Ljava/lang/Object;
     142: checkcast     #230                // class java/lang/Number
     145: invokevirtual #233                // Method java/lang/Number.intValue:()I
     148: istore        8
     150: iconst_0
     151: istore        9
     153: iload         8
     155: iload_2
     156: if_icmpge     163
     159: iconst_1
     160: goto          164
     163: iconst_0
     164: ifne          125
     167: aload         7
     169: invokeinterface #473,  1          // InterfaceMethod java/util/ListIterator.next:()Ljava/lang/Object;
     174: pop
     175: aload         5
     177: invokeinterface #460,  1          // InterfaceMethod java/util/List.size:()I
     182: aload         7
     184: invokeinterface #476,  1          // InterfaceMethod java/util/ListIterator.nextIndex:()I
     189: isub
     190: istore        10
     192: iload         10
     194: ifne          203
     197: invokestatic  #459                // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
     200: goto          264
     203: new           #35                 // class java/util/ArrayList
     206: dup
     207: iload         10
     209: invokespecial #44                 // Method java/util/ArrayList."<init>":(I)V
     212: astore        11
     214: aload         11
     216: astore        12
     218: iconst_0
     219: istore        13
     221: aload         7
     223: invokeinterface #477,  1          // InterfaceMethod java/util/ListIterator.hasNext:()Z
     228: ifeq          247
     231: aload         12
     233: aload         7
     235: invokeinterface #473,  1          // InterfaceMethod java/util/ListIterator.next:()Ljava/lang/Object;
     240: invokevirtual #478                // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
     243: pop
     244: goto          221
     247: nop
     248: aload         11
     250: checkcast     #89                 // class java/util/List
     253: goto          264
     256: aload         5
     258: checkcast     #33                 // class java/lang/Iterable
     261: invokestatic  #481                // Method kotlin/collections/CollectionsKt.toList:(Ljava/lang/Iterable;)Ljava/util/List;
     264: checkcast     #46                 // class java/util/Collection
     267: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     272: istore        4
     274: iload         4
     276: aload_3
     277: checkcast     #46                 // class java/util/Collection
     280: invokeinterface #482,  1          // InterfaceMethod java/util/Collection.size:()I
     285: if_icmpne     291
     288: iload         4
     290: ireturn
     291: iload         4
     293: iconst_1
     294: iadd
     295: ireturn

  private static final int part2$lambda$21(java.util.Map$Entry, java.util.Map$Entry);
    Code:
       0: aload_0
       1: invokeinterface #399,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
       6: checkcast     #230                // class java/lang/Number
       9: invokevirtual #233                // Method java/lang/Number.intValue:()I
      12: aload_1
      13: invokeinterface #399,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
      18: checkcast     #230                // class java/lang/Number
      21: invokevirtual #233                // Method java/lang/Number.intValue:()I
      24: invokestatic  #507                // Method kotlin/jvm/internal/Intrinsics.compare:(II)I
      27: ireturn

  private static final int part2$lambda$22(kotlin.jvm.functions.Function2, java.lang.Object, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokeinterface #513,  3          // InterfaceMethod kotlin/jvm/functions/Function2.invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       8: checkcast     #230                // class java/lang/Number
      11: invokevirtual #233                // Method java/lang/Number.intValue:()I
      14: ireturn
}

Compiled from "Comparisons.kt"
public final class day8.Day8$part1$$inlined$thenBy$1<T> implements java.util.Comparator {
  final java.util.Comparator $this_thenBy;

  public day8.Day8$part1$$inlined$thenBy$1(java.util.Comparator);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #18                 // Field $this_thenBy:Ljava/util/Comparator;
       5: aload_0
       6: invokespecial #21                 // Method java/lang/Object."<init>":()V
       9: return

  public final int compare(T, T);
    Code:
       0: aload_0
       1: getfield      #18                 // Field $this_thenBy:Ljava/util/Comparator;
       4: aload_1
       5: aload_2
       6: invokeinterface #29,  3           // InterfaceMethod java/util/Comparator.compare:(Ljava/lang/Object;Ljava/lang/Object;)I
      11: istore_3
      12: iload_3
      13: ifeq          20
      16: iload_3
      17: goto          62
      20: aload_1
      21: checkcast     #31                 // class kotlin/Pair
      24: astore        4
      26: iconst_0
      27: istore        5
      29: aload         4
      31: invokevirtual #35                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      34: checkcast     #37                 // class java/lang/Comparable
      37: aload_2
      38: checkcast     #31                 // class kotlin/Pair
      41: astore        4
      43: astore        6
      45: iconst_0
      46: istore        5
      48: aload         4
      50: invokevirtual #35                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      53: checkcast     #37                 // class java/lang/Comparable
      56: aload         6
      58: swap
      59: invokestatic  #43                 // Method kotlin/comparisons/ComparisonsKt.compareValues:(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
      62: ireturn
}