private boolean validateComponents(Program program, Address startAddress,
			DataValidationOptions validationOptions) {

		boolean validateReferredToData = validationOptions.shouldValidateReferredToData();
		Memory memory = program.getMemory();

		// First component is either a direct reference or an image base offset.
		Address rtti0Address = getReferencedAddress(program, startAddress);
		if (rtti0Address == null ||
			(validateReferredToData && !rtti0.isValid(program, rtti0Address, validationOptions))) {
			return false;
		}
		// Middle bytes are 5 dword numeric values.
		try {
			// numBases should be >= 0 
			int numBases = memory.getInt(startAddress.add(NUM_CONTAINED_BASES_OFFSET));
			if (numBases < 0) {
				return false;
			}
			// member displacement should be >= 0 
			int mDisp = memory.getInt(startAddress.add(PMD_OFFSET + M_DISP_OFFSET));
			if (mDisp < 0) {
				return false;
			}
			// vbtable displacement should be >= -1
			int pDisp = memory.getInt(startAddress.add(PMD_OFFSET + P_DISP_OFFSET));
			if (pDisp < -1) {
				return false;
			}
			// displacement within vbtable should be >= 0 
			int vDisp = memory.getInt(startAddress.add(PMD_OFFSET + V_DISP_OFFSET));
			if (vDisp < 0) {
				return false;
			}
			// attributes can be any bitmask number so don't check it
//			int attributes = memory.getInt(startAddress.add(ATTRIBUTES_OFFSET));
		}
		catch (MemoryAccessException e) {
			return false;
		}
		catch (AddressOutOfBoundsException e) {
			return false;
		}
		// Last component is either a direct reference or an image base offset.
		Address rtti3Address = getReferencedAddress(program, startAddress.add(RTTI_3_OFFSET));
		// Make sure we don't follow flow or validation will get stuck in infinite loop.
		DataValidationOptions dontFollowOptions = new DataValidationOptions(validationOptions);
		dontFollowOptions.setValidateReferredToData(false);
		if (rtti3Address == null ||
			(validateReferredToData && !rtti3.isValid(program, rtti3Address, dontFollowOptions))) {
			return false;
		}
		return true;
	}
Gets the address of the RTTI 0 or null if one isn't indicated.
@param program the program  containing the address
@param rtti1Address the address for the RTTI 1 that refers to the RTTI 0
@return the address of the RTTI 0 or null.
Ghidra/Features/Base/src/main/java/ghidra/app/util/datatype/microsoft/RTTI1DataType.java