public ExecutableRecord newExecutableRecord(String md5, String enm, String cnm, String arc,
			Date dt, String repo, String path, RowKey id) throws LSHException {
		if (md5.length() != 32) {
			throw new LSHException("MD5 field must be exactly 32 hex characters");
		}
		ExecutableRecord newexe = new ExecutableRecord(md5, enm, cnm, arc, dt, id, repo, path);
		if (!exerec.add(newexe)) {
			ExecutableRecord oldexe = exerec.floor(newexe);
			if (oldexe.compareMetadata(newexe) != 0) {
				throw new LSHException("Duplicate md5 hash, different metadata");
			}
			if ((oldexe.getRowId() != null) && (id != null) && (!oldexe.getRowId().equals(id))) {
				throw new LSHException("Overwriting existing executable id");
			}
			newexe = oldexe;
		}
		return newexe;
	}
Create a new executable record, which should be identified uniquely
identified via its md5sum

@param md5 is the MD5 hash of the executable
@param enm is the name of the executable
@param cnm is the name of the compiler used to build the executable
@param arc is the architecture of the executable
@param dt is the date (of ingest)
@param repo is the repository containing the executable
@param path is the path (within the repo) to the executable
@param id is the database (row) is associated with the executable (may be null)
@return the new ExecutableRecord object
@throws LSHException if attributes are invalid, or the executable 
    already exists with different metadata
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/DescriptionManager.java