Program: 47120
Project: 47120
Buggy source:
/** 
 * Returns the filename after being "prettified", which involves attempting to strip away certain things like information about the quality, resolution, codecs, release groups, fansubbers, etc., replacing periods with spaces, and various other things to produce a more "pretty" and standardized filename.
 * @param f The filename
 * @param file The file to possibly be used by the InfoDb
 * @return The prettified filename
 */
public static String getFileNamePrettified(String f,File file){
  String fileNameWithoutExtension;
  String formattedName="String_Node_Str";
  String formattedNameTemp;
  String searchFormattedName;
  String edition="String_Node_Str";
  boolean isEpisodeToLookup=false;
  boolean isTVSeriesToLookup=false;
  boolean isMovieToLookup=false;
  boolean isMovieWithoutYear=false;
  fileNameWithoutExtension=getFileNameWithoutExtension(f);
  formattedName=fileNameWithoutExtension;
  searchFormattedName="String_Node_Str";
  if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isMovieToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=removeFilenameEndMetadata(formattedName);
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isMovieToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isMovieToLookup=true;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches(COMMON_FILE_ENDS_MATCH)) {
    isMovieToLookup=true;
    isMovieWithoutYear=true;
    formattedName=removeFilenameEndMetadata(formattedName);
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=removeGroupNameFromBeginning(formattedName,fileNameWithoutExtension);
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.substring(formattedName.length() - 3).matches("String_Node_Str")) {
      isEpisodeToLookup=true;
      searchFormattedName=formattedName.substring(0,formattedName.length() - 2) + "String_Node_Str" + formattedName.substring(formattedName.length() - 2);
    }
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=removeGroupNameFromBeginning(formattedName,fileNameWithoutExtension);
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.substring(formattedName.length() - 3).matches("String_Node_Str")) {
      isEpisodeToLookup=true;
      searchFormattedName=formattedName.substring(0,formattedName.length() - 2) + "String_Node_Str" + formattedName.substring(formattedName.length() - 2);
    }
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
  formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
  if (file != null && (isTVSeriesToLookup || isMovieToLookup)) {
    InfoDb.InfoDbData info=PMS.get().infoDb().get(file);
    if (info == null) {
      PMS.get().infoDbAdd(file,searchFormattedName);
    }
 else     if (isTVSeriesToLookup) {
      int showNameIndex=indexOf(Pattern.compile("String_Node_Str"),formattedName);
      if (StringUtils.isNotEmpty(info.title) && showNameIndex != -1) {
        String titleFromFilename=formattedName.substring(0,showNameIndex);
        double similarity=org.apache.commons.lang3.StringUtils.getJaroWinklerDistance(titleFromFilename,info.title);
        if (similarity > 0.9) {
          formattedName=info.title + formattedName.substring(showNameIndex);
          if (isEpisodeToLookup) {
            if (StringUtils.isNotEmpty(info.ep_name)) {
              formattedName+="String_Node_Str" + info.ep_name;
            }
          }
        }
        LOGGER.trace("String_Node_Str" + info.title + "String_Node_Str"+ titleFromFilename+ "String_Node_Str"+ similarity);
      }
    }
 else     if (isMovieToLookup && StringUtils.isNotEmpty(info.title) && StringUtils.isNotEmpty(info.year)) {
      if (isMovieWithoutYear) {
        double similarity=org.apache.commons.lang3.StringUtils.getJaroWinklerDistance(formattedName,info.title);
        if (similarity > 0.9) {
          formattedName=info.title + "String_Node_Str" + info.year+ "String_Node_Str";
        }
        LOGGER.trace("String_Node_Str" + info.title + "String_Node_Str"+ formattedName+ "String_Node_Str"+ similarity);
      }
 else {
        int yearIndex=indexOf(Pattern.compile("String_Node_Str"),formattedName);
        String titleFromFilename=formattedName.substring(0,yearIndex);
        double similarity=org.apache.commons.lang3.StringUtils.getJaroWinklerDistance(titleFromFilename,info.title);
        if (similarity > 0.9) {
          formattedName=info.title + "String_Node_Str" + info.year+ "String_Node_Str";
        }
        LOGGER.trace("String_Node_Str" + info.title + "String_Node_Str"+ titleFromFilename+ "String_Node_Str"+ similarity);
      }
    }
  }
  if (!edition.isEmpty()) {
    formattedName=formattedName.trim();
    String substr=formattedName.substring(Math.max(0,formattedName.length() - 2));
    if ("String_Node_Str".equals(substr)) {
      formattedName=formattedName.substring(0,formattedName.length() - 2);
    }
    formattedName+="String_Node_Str" + edition;
  }
  return formattedName;
}

Fixed version (ground truth):
/** 
 * Returns the filename after being "prettified", which involves attempting to strip away certain things like information about the quality, resolution, codecs, release groups, fansubbers, etc., replacing periods with spaces, and various other things to produce a more "pretty" and standardized filename.
 * @param f The filename
 * @param file The file to possibly be used by the InfoDb
 * @return The prettified filename
 */
public static String getFileNamePrettified(String f,File file){
  String fileNameWithoutExtension;
  String formattedName="String_Node_Str";
  String formattedNameTemp;
  String searchFormattedName;
  String edition="String_Node_Str";
  boolean isEpisodeToLookup=false;
  boolean isTVSeriesToLookup=false;
  boolean isMovieToLookup=false;
  boolean isMovieWithoutYear=false;
  fileNameWithoutExtension=getFileNameWithoutExtension(f);
  formattedName=fileNameWithoutExtension;
  searchFormattedName="String_Node_Str";
  if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS + "String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str" + COMMON_FILE_ENDS_CASE_SENSITIVE + "String_Node_Str","String_Node_Str");
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedNameTemp=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.equals(formattedNameTemp)) {
      isEpisodeToLookup=true;
    }
    formattedName=formattedNameTemp;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCaseParts(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isMovieToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=removeFilenameEndMetadata(formattedName);
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isMovieToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isMovieToLookup=true;
    formattedName=removeFilenameEndMetadata(formattedName);
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches(COMMON_FILE_ENDS_MATCH)) {
    isMovieToLookup=true;
    isMovieWithoutYear=true;
    formattedName=removeFilenameEndMetadata(formattedName);
    FormattedNameAndEdition result=removeAndSaveEditionToBeAddedLater(formattedName);
    formattedName=result.formattedName;
    if (result.edition != null) {
      edition=result.edition;
    }
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=removeGroupNameFromBeginning(formattedName,fileNameWithoutExtension);
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.substring(formattedName.length() - 3).matches("String_Node_Str")) {
      isEpisodeToLookup=true;
      searchFormattedName=formattedName.substring(0,formattedName.length() - 2) + "String_Node_Str" + formattedName.substring(formattedName.length() - 2);
    }
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
 else   if (formattedName.matches("String_Node_Str")) {
    isTVSeriesToLookup=true;
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
    formattedName=removeGroupNameFromBeginning(formattedName,fileNameWithoutExtension);
    if (PMS.getConfiguration().isUseInfoFromIMDb() && formattedName.substring(formattedName.length() - 3).matches("String_Node_Str")) {
      isEpisodeToLookup=true;
      searchFormattedName=formattedName.substring(0,formattedName.length() - 2) + "String_Node_Str" + formattedName.substring(formattedName.length() - 2);
    }
    formattedName=convertFormattedNameToTitleCase(formattedName);
  }
  formattedName=formattedName.replaceAll("String_Node_Str","String_Node_Str");
  if (file != null && (isTVSeriesToLookup || isMovieToLookup)) {
    InfoDb.InfoDbData info=PMS.get().infoDb().get(file);
    if (info == null) {
      PMS.get().infoDbAdd(file,StringUtil.hasValue(searchFormattedName) ? searchFormattedName : formattedName);
    }
 else     if (isTVSeriesToLookup) {
      int showNameIndex=indexOf(Pattern.compile("String_Node_Str"),formattedName);
      if (StringUtils.isNotEmpty(info.title) && showNameIndex != -1) {
        String titleFromFilename=formattedName.substring(0,showNameIndex);
        double similarity=org.apache.commons.lang3.StringUtils.getJaroWinklerDistance(titleFromFilename,info.title);
        if (similarity > 0.9) {
          formattedName=info.title + formattedName.substring(showNameIndex);
          if (isEpisodeToLookup) {
            if (StringUtils.isNotEmpty(info.ep_name)) {
              formattedName+="String_Node_Str" + info.ep_name;
            }
          }
        }
        LOGGER.trace("String_Node_Str" + info.title + "String_Node_Str"+ titleFromFilename+ "String_Node_Str"+ similarity);
      }
    }
 else     if (isMovieToLookup && StringUtils.isNotEmpty(info.title) && StringUtils.isNotEmpty(info.year)) {
      if (isMovieWithoutYear) {
        double similarity=org.apache.commons.lang3.StringUtils.getJaroWinklerDistance(formattedName,info.title);
        if (similarity > 0.9) {
          formattedName=info.title + "String_Node_Str" + info.year+ "String_Node_Str";
        }
        LOGGER.trace("String_Node_Str" + info.title + "String_Node_Str"+ formattedName+ "String_Node_Str"+ similarity);
      }
 else {
        int yearIndex=indexOf(Pattern.compile("String_Node_Str"),formattedName);
        String titleFromFilename=formattedName.substring(0,yearIndex);
        double similarity=org.apache.commons.lang3.StringUtils.getJaroWinklerDistance(titleFromFilename,info.title);
        if (similarity > 0.9) {
          formattedName=info.title + "String_Node_Str" + info.year+ "String_Node_Str";
        }
        LOGGER.trace("String_Node_Str" + info.title + "String_Node_Str"+ titleFromFilename+ "String_Node_Str"+ similarity);
      }
    }
  }
  if (!edition.isEmpty()) {
    formattedName=formattedName.trim();
    String substr=formattedName.substring(Math.max(0,formattedName.length() - 2));
    if ("String_Node_Str".equals(substr)) {
      formattedName=formattedName.substring(0,formattedName.length() - 2);
    }
    formattedName+="String_Node_Str" + edition;
  }
  return formattedName;
}