@Contract(pure = true)
  public static @Unmodifiable @NotNull <T> List<T> copyList(@NotNull List<? extends T> list) {
    if (list == Collections.emptyList()) {
      return Collections.emptyList();
    }
    if (list.size() == 1) {
      return new SmartList<>(list.get(0));
    }
    if (list.isEmpty()) {
      return new SmartList<>();
    }
    return new ArrayList<>(list);
  }
@Contract(pure = true)
  public static @Unmodifiable @NotNull <T> List<T> copyList(@NotNull List<? extends T> list)