@Override
	protected void validateModelSpecificInfo() throws InvalidDataTypeException {

		Program program = getProgram();

		// Num1 is dword at SIGNATURE_OFFSET.
		// No additional validation for this yet.

		// Num2 is dword at ATTRIBUTES_OFFSET.
		// No additional validation for this yet.

		// Next four bytes after 2 dwords should be number of RTTI1 pointers in RTTI2.
		int rtti1Count = getRtti1Count();
		if (rtti1Count < 1 || rtti1Count > MAX_RTTI_1_COUNT) { // For now assume we shouldn't be seeing more than 1000 pointers in RTTI2.
			throw new InvalidDataTypeException(getName() + " data type at " + getAddress() +
				" doesn't have a valid " + Rtti1Model.DATA_TYPE_NAME + " count.");
		}

		boolean validateReferredToData = validationOptions.shouldValidateReferredToData();

		// Last component should refer to RTTI2.
		Address rtti2Address = getRtti2Address();
		if (rtti2Address == null) {
			throw new InvalidDataTypeException(getName() + " data type at " + getAddress() +
				" doesn't refer to a valid location for the " + Rtti2Model.DATA_TYPE_NAME + ".");
		}
		rtti2Model = new Rtti2Model(program, rtti1Count, rtti2Address, validationOptions);
		if (validateReferredToData) {
			rtti2Model.validate();
		}
		else if (!rtti2Model.isLoadedAndInitializedAddress()) {
			throw new InvalidDataTypeException("Data referencing " + rtti2Model.getName() +
				" data type isn't a loaded and initialized address " + rtti2Address + ".");
		}
	}
Creates the model for the RTTI3 data type.
@param program the program
@param rtti3Address the address in the program for the RTTI3 data
types.
@param validationOptions options indicating how to validate the data type at the indicated 
address.
Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/Rtti3Model.java