@Nullable
  public static <T> T getBase(final FilePathMerger<T> merger, final String path) {
    final boolean caseSensitive = SystemInfo.isFileSystemCaseSensitive;
    final String[] parts = path.replace("\\", "/").split("/");
    for (int i = parts.length - 1; i >=0; --i) {
      final String part = parts[i];
      if ("".equals(part) || ".".equals(part)) {
        continue;
      } else if ("..".equals(part)) {
        if (! merger.up()) return null;
        continue;
      }
      final String vfName = merger.getCurrentName();
      if (vfName == null) return null;
      if ((caseSensitive && vfName.equals(part)) || ((! caseSensitive) && vfName.equalsIgnoreCase(part))) {
        if (! merger.up()) return null;
      } else {
        return null;
      }
    }
    return merger.getResult();
  }
@Nullable
  public static <T> T getBase(final FilePathMerger<T> merger, final String path)