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

		// Now that the final code units are established,
		// merge the remaining listing at the address level in address order.
		// Each of the following mergers are address based listing mergers.
		displayInitialPhaseMessage(ADDRESS_BASED_PHASE,
			"Merge of Equate, User Defined Property, Reference,Function Tags, Bookmark & Comment changes");

		AbstractListingMerger[] mergers = new AbstractListingMerger[] { equateMerger,
			userPropertyMerger, referenceMerger, bookmarkMerger, commentMerger, functionTagMerger };
		autoMerge(mergers, monitor);

		mergeManager.showProgressIcon(false);

		mergeConflicts(mergers, monitor);

		mergeManager.showProgressIcon(true);
		removeBottomComponent();
		mergeManager.setCompleted(ADDRESS_BASED_PHASE);
	}
Performs autoMerge of each remaining address based program item followed by merge of
their conflicts in address order.
@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