private void mergeFunctions(TaskMonitor monitor)
			throws ProgramConflictException, MemoryAccessException, CancelledException {

		displayInitialPhaseMessage(FUNCTIONS_PHASE, "Merge of Function changes");

		ListingMerger[] mergers = new ListingMerger[] { functionMerger };
		autoMerge(mergers, monitor);

		mergeManager.showProgressIcon(false);

		mergeConflicts(mergers, monitor);
		functionMerger.mergeThunks(mergePanel, conflictOption, monitor);

		mergeManager.showProgressIcon(true);
		removeBottomComponent();
		mergeManager.setCompleted(FUNCTIONS_PHASE);

		functionMerger.dispose();
	}
Performs autoMerge of functions followed by merge of function conflicts.
@param monitor the task monitor for canceling the merge
@throws ProgramConflictException if programs can't be compared using Diff.
@throws MemoryAccessException if bytes can't be merged.
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ListingMergeManager.java