void reApplyDuplicateSymbols() {
		SymbolTable originSymTab = originProgram.getSymbolTable();
		SymbolTable resultSymTab = resultProgram.getSymbolTable();
		long[] fromSymbolIDs = conflictSymbolIDMap.getKeys();
		for (long fromSymbolID : fromSymbolIDs) {
			try {
				long toSymbolID = conflictSymbolIDMap.get(fromSymbolID);
				Symbol fromSymbol = originSymTab.getSymbol(fromSymbolID);
				Symbol toSymbol = resultSymTab.getSymbol(toSymbolID);
				try {
					toSymbol.setName(fromSymbol.getName(), fromSymbol.getSource());
					conflictSymbolIDMap.remove(fromSymbolID);
				}
				catch (DuplicateNameException e) {
					continue; // Leaves it in the hashtable
				}
				catch (InvalidInputException e) {
					Msg.error(this, "Unexpected Exception: " + e.getMessage(), e);
					errorMsg.append("InvalidInputException re-applying duplicate symbols: " +
						e.getMessage() + "\n");
				}
			}
			catch (NoValueException e) {
				Msg.error(this, "Unexpected Exception: " + e.getMessage(), e);
				errorMsg.append(
					"NoValueException re-applying duplicate symbols: " + e.getMessage() + "\n");
			}
		}
	}
<CODE>replaceLabels</CODE> replaces all symbols and aliases
in the specified address set from the second program.

@param originAddressSet the addresses to be replaced
The addresses in this address set should be derived from program1.
@param replaceFunction true indicates the function symbol should be replaced
@param monitor the task monitor for notifying the user of this merge's progress
@throws CancelledException if user cancels via the monitor.
Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMerge.java