public static int binarySearchWithDuplicates(List<DataType> data,
			String searchItem, Comparator<Object> comparator) {
		int index = Collections.binarySearch(data, searchItem, comparator);

		// the binary search returns a negative, incremented position if there is no match in the
		// list for the given search
		if (index < 0) {
			index = -index - 1;
		}
		else {
			index = findTrueStartIndex(searchItem, data, index, comparator);
		}
		return index;
	}
Create a copy of the chain of data types that eventually lead to a named
data type.
<p>
Returns a {@link DataType#copy(DataTypeManager) copy()} of the first named data type found
in the pointer / array type chain, and returns an identical chain of pointer / arrays up to
the copied named type.

@param dataType data type to be copied
@param dtm data type manager
@return deep copy of dataType
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java