private void mergeProgramContext(ProgramContext resultContext, ProgramContext originContext,
			Register register, AddressRange addrRange, TaskMonitor monitor)
			throws CancelledException {
		try {
			AddressRangeIterator origValueIter = originContext.getRegisterValueAddressRanges(
				register, addrRange.getMinAddress(), addrRange.getMaxAddress());
			resultContext.remove(addrRange.getMinAddress(), addrRange.getMaxAddress(), register);
			while (origValueIter.hasNext()) {
				monitor.checkCancelled();
				AddressRange valueRange = origValueIter.next();
				RegisterValue value =
					originContext.getRegisterValue(register, valueRange.getMinAddress());
				if (value != null && value.hasAnyValue()) {
					resultContext.setRegisterValue(valueRange.getMinAddress(),
						valueRange.getMaxAddress(), value);
				}
			}
		}
		catch (ContextChangeException e) {
			Msg.error(this, "Unexpected Exception: " + e.getMessage(), e);
		}
	}
Merges all the current conflicts according to the conflictOption.
@param listingPanel the listing merge panel
@param chosenConflictOption the conflict option to use when merging (should be ASK_USER for interactive).
@param monitor the status monitor
@throws CancelledException if the user cancels
@throws MemoryAccessException if bytes can't be merged.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/CodeUnitMerger.java