public static FunctionBitPatternInfo fromXml(Element e) {
		String preBytes = e.getAttributeValue("preBytes");
		String firstBytes = e.getAttributeValue("firstBytes");
		String address = e.getAttributeValue("address");

		List<String> returnBytes = new ArrayList<>();
		Element returnBytesListEle = e.getChild("returnBytesList");
		if (returnBytesListEle != null) {
			for (Element rbEle : XmlUtilities.getChildren(returnBytesListEle, "returnBytes")) {
				returnBytes.add(rbEle.getAttributeValue("value"));
			}
		}

		InstructionSequence firstInst = InstructionSequence.fromXml(e.getChild("firstInst"));
		InstructionSequence preInst = InstructionSequence.fromXml(e.getChild("preInst"));

		List<InstructionSequence> returnInst = new ArrayList<>();
		Element returnInstListEle = e.getChild("returnInstList");
		if (returnInstListEle != null) {
			for (Element isEle : XmlUtilities.getChildren(returnInstListEle,
				InstructionSequence.XML_ELEMENT_NAME)) {
				returnInst.add(InstructionSequence.fromXml(isEle));
			}
		}

		List<ContextRegisterInfo> contextRegisters = new ArrayList<>();
		Element contextRegistersListEle = e.getChild("contextRegistersList");
		if ( contextRegistersListEle != null ) {
			for (Element criElement : XmlUtilities.getChildren(contextRegistersListEle,
				ContextRegisterInfo.XML_ELEMENT_NAME)) {
				contextRegisters.add(ContextRegisterInfo.fromXml(criElement));
			}
		}
		
		FunctionBitPatternInfo result = new FunctionBitPatternInfo();
		result.setPreBytes(preBytes);
		result.setFirstBytes(firstBytes);
		result.setAddress(address);
		result.setReturnBytes(returnBytes);
		result.setFirstInst(firstInst);
		result.setPreInst(preInst);
		result.setReturnInst(returnInst);
		result.setContextRegisters(contextRegisters);

		return result;
	}
Converts a XML element into a FunctionBitPatternInfo object.

@param e xml {@link Element} to convert
@return new {@link FunctionBitPatternInfo} object, never null
Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/FunctionBitPatternInfo.java