static boolean createSymbolFromDemangledType(Program program, Address rttiAddress,
			TypeDescriptorModel typeDescriptorModel, String rttiSuffix) {

		rttiSuffix = SymbolUtilities.replaceInvalidChars(rttiSuffix, true);

		// Get the namespace for this RTTI's type descriptor.
		Namespace classNamespace = typeDescriptorModel.getDescriptorAsNamespace();

		SymbolTable symbolTable = program.getSymbolTable();

		// See if the symbol already exists for the RTTI data
		Symbol matchingSymbol = symbolTable.getSymbol(rttiSuffix, rttiAddress, classNamespace);
		if (matchingSymbol != null) {
			return false;
		}

		// check for similar symbol
		DemangledObject matchingDemangledObject = null;
		SymbolIterator symbols = symbolTable.getSymbolsAsIterator(rttiAddress);
		for (Symbol symbol : symbols) {
			String name = symbol.getName();

			// if mangled get the matching demangled object if there is one and save for after loop
			// in case symbols are not demangled yet
			DemangledObject demangledObject = DemanglerUtil.demangle(name);
			if (demangledObject != null && demangledObject.getName().contains(rttiSuffix)) {
				matchingDemangledObject = demangledObject;
				continue;
			}

			// Similar symbol already exists - more checking/fixing needed
			if (name.contains(rttiSuffix)) {

				// check for differing namespace to correct pdb in rare cases
				Namespace currentNamespace = symbol.getParentNamespace();
				if (!currentNamespace.equals(classNamespace)) {
					Msg.warn(program, "Removed incorrect pdb symbol: " + symbol.getName(true));
					symbol.delete();
					continue;
				}
				// if symbol contains the matching string and ticks, remove the ticks
				if (replaceSymbolWithNoTicks(symbol)) {
					return true;
				}
			}
		}

		// if it gets here then there were no demangled symbols that contained the rttisuffix
		// indicating that the mangled matching symbol has not been demangled yet and needs to be
		// demangled
		if (matchingDemangledObject != null) {

			String name = matchingDemangledObject.getName();
			if (name.contains(rttiSuffix)) {

				try {
					Symbol symbol = symbolTable.createLabel(rttiAddress, name, classNamespace,
						SourceType.IMPORTED);
					// Set the symbol to be primary so that the demangler 
					// won't demangle again
					symbol.setPrimary();
					if (replaceSymbolWithNoTicks(symbol)) {
						return true;
					}

				}
				catch (InvalidInputException e) {
					//fall through and make a symbol using the rttiSuffix string even though
					// it might really be one with extra information
				}

			}
		}
		// if code gets here then no pdb info so have to make the symbol here
		try {
			Symbol symbol = symbolTable.createLabel(rttiAddress, rttiSuffix, classNamespace,
				SourceType.IMPORTED);
			symbol.setPrimary();
			return true;
		}
		catch (InvalidInputException e) {
			Msg.error(RttiUtil.class,
				"Unable to create label for " + rttiSuffix + " at " + rttiAddress + ".", e);
			return false;
		}
	}
Function that will create a symbol based on the <code>rttiSuffix</code>, which is in the 
class or namespace that is indicated by the <code>demangledType</code> string.

@param program the program where the symbol is being created
@param rttiAddress Address of the RTTI datatype 
@param typeDescriptorModel the model for the type descriptor structure
@param rttiSuffix suffix name indicating which type of RTTI structure
@return true if a symbol was created, false otherwise
Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java