@Contract(pure=true)
  public static <T> T @NotNull [] reverseArray(T @NotNull [] array) {
    T[] newArray = array.clone();
    for (int i = 0; i < array.length; i++) {
      newArray[array.length - i - 1] = array[i];
    }
    return newArray;
  }
@Contract(pure=true)
  public static <T> T @NotNull [] reverseArray(T @NotNull [] array)