@Override
	public AbstractMsType getRandomAccessRecord(int recordNumber) {
		if (recordNumber < 0 || recordNumber - typeIndexMin > offLenRecords.size()) {
			// This should not happen, but we have seen it and cannot yet explain it.
			// So, for now, we are creating and returning a new BadMsType.
			PdbLog.logBadTypeRecordIndex(this, recordNumber);
			BadMsType badType = new BadMsType(pdb, 0);
			badType.setRecordNumber(RecordNumber.make(recordCategory, recordNumber));
			return badType;
		}
		PrimitiveMsType primitive = getPrimitiveRecord(recordNumber);
		if (primitive != null) {
			return primitive;
		}

		RecordNumber rn = RecordNumber.make(recordCategory, recordNumber);
		OffLen offLen = offLenRecords.get(recordNumber - typeIndexMin);

		try {
			PdbByteReader recordReader =
				pdb.getReaderForStreamNumber(streamNumber, offLen.offset(), offLen.length());
			recordReader.markAlign(2);
			return TypeParser.parseRecord(pdb, recordReader, rn);
		}
		catch (PdbException | IOException | CancelledException e) {
			BadMsType badType = new BadMsType(pdb, 0);
			badType.setRecordNumber(RecordNumber.make(recordCategory, recordNumber));
			return badType;
		}
	}
Retrieves the {@link AbstractMsType} record indicated by the recordNumber
@param recordNumber record number to look up
@return {@link AbstractMsType} pertaining to the record number
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/TypeProgramInterface.java