public static void showLoadLibrariesDialog(Program program, PluginTool tool,
			ProgramManager manager, TaskMonitor monitor) {

		Objects.requireNonNull(monitor);

		// Don't allow Load Libraries while "things are happening" to the program
		if (!program.canLock()) {
			Msg.showWarn(null, null, LoadLibrariesOptionsDialog.TITLE,
				"Cannot Load Libraries while program is locked.  Please wait or stop running tasks.");
			return;
		}

		try {
			ByteProvider provider = getProvider(program);
			LoadSpec loadSpec = getLoadSpec(provider, program);
			AddressFactory addressFactory =
				loadSpec.getLanguageCompilerSpec().getLanguage().getAddressFactory();
			SystemUtilities.runSwingLater(() -> {
				OptionsDialog dialog = new LoadLibrariesOptionsDialog(provider, program, tool,
					loadSpec, () -> addressFactory);
				tool.showDialog(dialog);
			});
		}
		catch (LanguageNotFoundException e) {
			Msg.showError(null, null, LoadLibrariesOptionsDialog.TITLE, "Language not found.", e);
		}
	}
Displays the appropriate import dialog for the specified {@link FSRL file}.
<p>
If the file is a container of other files, a batch import dialog will be used,
otherwise the normal single file import dialog will be shown.]
<p>
If you are not in a monitored task, then call 
{@link #showImportDialog(PluginTool, ProgramManager, FSRL, DomainFolder, String)}.

@param tool {@link PluginTool} will be used as the parent tool for dialogs
@param programManager optional {@link ProgramManager} instance to use to open imported 
			binaries with, or null
@param fsrl {@link FSRL} of the file to import
@param destinationFolder {@link DomainFolder} destination folder where the imported file
			will default to.  (the user will be able to choose a different location)
@param suggestedPath optional string path that will automatically be pre-pended
			to the destination filename
@param monitor the task monitor to use for monitoring; cannot be null
Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterUtilities.java