void replaceSymbols(Address address, LongLongHashtable conflictSymbolIDMap, TaskMonitor monitor)
			throws CancelledException, DuplicateNameException, InvalidInputException {

		removeUniqueToSymbols(address, monitor);
		replaceFunctionSymbol(address, address, conflictSymbolIDMap, monitor);
		addFromSymbols(address, true, conflictSymbolIDMap, monitor);

		replacePrimary(address, conflictSymbolIDMap);

		// Remove this address as an entry point if its not one in program2.
		if (toSymbolTable.isExternalEntryPoint(address) &&
			!fromSymbolTable.isExternalEntryPoint(address)) {
			toSymbolTable.removeExternalEntryPoint(address);
		}
		else if (fromSymbolTable.isExternalEntryPoint(address) &&
			!toSymbolTable.isExternalEntryPoint(address)) {
			toSymbolTable.addExternalEntryPoint(address);
		}
	}
<code>replaceSymbols</code> will replace the symbols at the indicated address
in the destination program with those from the source program. If the same symbol exists
in the source and destination programs, this method will simply allow it to remain in the
destination program. For a symbol to be the same, it must have the same name and the same
parent namespace path. The primary symbol will be get set to the symbol that was primary in
the source program.

@param address the program address where the symbols are being replaced.
This address should be derived from the "to" program.
@param conflictSymbolIDMap maps the symbol IDs in the "from" program to the symbol IDs
in the "to" program for any symbols (and their associated objects) that were created
with conflict names.
(key = "from" program's symbol ID; value = "to" program's symbol ID)
@param monitor the task monitor for updating user progress and allowing cancelling.

@return a map of symbols that were created as conflicts during the replace. These map symbols
in the source program to a symbol with another name due to a duplicate symbol problem.
(key = "from" program's symbol; value = "to" program's symbol)

@throws CancelledException if the task monitor is cancelled.
@throws DuplicateNameException if the name space can't be resolved due
to a name conflict that can't be dealt with.
@throws InvalidInputException
the indicated address.
Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolMerge.java