@NotNull
  private static FairDiffIterable compareSmart(@NotNull List<? extends Line> lines1,
                                               @NotNull List<? extends Line> lines2,
                                               @NotNull CancellationChecker indicator) {
    int threshold = ComparisonUtil.getUnimportantLineCharCount();
    if (threshold == 0) return diff(lines1, lines2, indicator);

    Pair<List<Line>, IntList> bigLines1 = getBigLines(lines1, threshold);
    Pair<List<Line>, IntList> bigLines2 = getBigLines(lines2, threshold);

    FairDiffIterable changes = diff(bigLines1.first, bigLines2.first, indicator);
    return new ChangeCorrector.SmartLineChangeCorrector(bigLines1.second, bigLines2.second, lines1, lines2, changes, indicator).build();
  }
@NotNull
  private static FairDiffIterable compareSmart(@NotNull List<? extends Line> lines1,
                                               @NotNull List<? extends Line> lines2,
                                               @NotNull CancellationChecker indicator)