//# 19 errors, 1,915 messages
//#
/*
    //#DCCPlugin.java:1:1: class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#DCCPlugin.java:1:1: method: com.dmdirc.addons.dcc.DCCPlugin$2.com.dmdirc.addons.dcc.DCCPlugin$2__static_init
    //#DCCPlugin.java:1:1: class: com.dmdirc.addons.dcc.DCCPlugin$1
    //#DCCPlugin.java:1:1: method: com.dmdirc.addons.dcc.DCCPlugin$1.com.dmdirc.addons.dcc.DCCPlugin$1__static_init
    //#DCCPlugin.java:1:1: class: com.dmdirc.addons.dcc.DCCPlugin
    //#DCCPlugin.java:1:1: method: com.dmdirc.addons.dcc.DCCPlugin.com.dmdirc.addons.dcc.DCCPlugin__static_init
    //#DCCPlugin.java:1:1: class: com.dmdirc.addons.dcc.DCCPlugin$3
    //#DCCPlugin.java:1:1: method: com.dmdirc.addons.dcc.DCCPlugin$3.com.dmdirc.addons.dcc.DCCPlugin$3__static_init
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc.addons.dcc;

import com.dmdirc.Main;
import com.dmdirc.Server;
import com.dmdirc.actions.ActionManager;
import com.dmdirc.actions.CoreActionType;
import com.dmdirc.actions.interfaces.ActionType;
import com.dmdirc.addons.dcc.kde.KFileChooser;
import com.dmdirc.addons.dcc.actions.DCCActions;
import com.dmdirc.addons.ui_swing.components.frames.TextFrame;
import com.dmdirc.addons.ui_swing.components.text.TextLabel;
import com.dmdirc.commandparser.CommandManager;
import com.dmdirc.config.Identity;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.config.prefs.PreferencesCategory;
import com.dmdirc.config.prefs.PreferencesManager;
import com.dmdirc.config.prefs.PreferencesSetting;
import com.dmdirc.config.prefs.PreferencesType;
import com.dmdirc.interfaces.ActionListener;
import com.dmdirc.logger.ErrorLevel;
import com.dmdirc.logger.Logger;
import com.dmdirc.parser.irc.ClientInfo;
import com.dmdirc.parser.irc.IRCParser;
import com.dmdirc.plugins.Plugin;
import com.dmdirc.ui.WindowManager;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.net.InetAddress;
import java.net.UnknownHostException;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 * This plugin adds DCC to dmdirc.
 *
 * @author Shane 'Dataforce' McCormack
 */
public final class DCCPlugin extends Plugin implements ActionListener {

	/** The DCCCommand we created. */
	private DCCCommand command;

	/** Our DCC Container window. */
	private DCCFrame container;

	/** Child Frames. */
	private final List<DCCFrame> childFrames = new ArrayList<DCCFrame>();

	/**
	 * Creates a new instance of the DCC Plugin.
	 */
	public DCCPlugin() {
		super();
    //#DCCPlugin.java:80: method: void com.dmdirc.addons.dcc.DCCPlugin.com.dmdirc.addons.dcc.DCCPlugin()
    //#DCCPlugin.java:80: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.plugins.Plugin()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void com.dmdirc.addons.dcc.DCCPlugin()
    //#    unanalyzed callee: void com.dmdirc.plugins.Plugin()
    //#input(void com.dmdirc.addons.dcc.DCCPlugin()): this
    //#output(void com.dmdirc.addons.dcc.DCCPlugin()): new ArrayList(DCCPlugin#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCPlugin()): this.childFrames
    //#new obj(void com.dmdirc.addons.dcc.DCCPlugin()): new ArrayList(DCCPlugin#1)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin()): this.childFrames == &new ArrayList(DCCPlugin#1)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin()): new ArrayList(DCCPlugin#1) num objects == 1
	}
    //#DCCPlugin.java:81: end of method: void com.dmdirc.addons.dcc.DCCPlugin.com.dmdirc.addons.dcc.DCCPlugin()

	/**
	 * Ask a question, if the answer is the answer required, then recall handleProcessEvent.
	 *
	 * @param question Question to ask
	 * @param title Title of question dialog
	 * @param desiredAnswer Answer required
	 * @param type Actiontype to pass back
	 * @param format StringBuffer to pass back
	 * @param arguments arguments to pass back
	 */
	public void askQuestion(final String question, final String title, final int desiredAnswer, final ActionType type, final StringBuffer format, final Object... arguments) {
		// New thread to ask the question in to stop us locking the UI
		final Thread questionThread = new Thread(new Runnable() {
    //#DCCPlugin.java:95: method: void com.dmdirc.addons.dcc.DCCPlugin$1.com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): Param_2
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): Param_3
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): Param_4
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): Param_5
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): Param_6
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): Param_7
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.this$0
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$arguments
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$desiredAnswer
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$format
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$question
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$title
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$type
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$arguments == Param_7
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): init'ed(this.val$arguments)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$desiredAnswer == Param_4
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): init'ed(this.val$desiredAnswer)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$format == Param_6
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): init'ed(this.val$format)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$question == Param_2
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): init'ed(this.val$question)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$title == Param_3
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): init'ed(this.val$title)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): this.val$type == Param_5
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])): init'ed(this.val$type)
    //#DCCPlugin.java:95: end of method: void com.dmdirc.addons.dcc.DCCPlugin$1.com.dmdirc.addons.dcc.DCCPlugin$1(DCCPlugin, String, String, int, ActionType, StringBuffer, Object[])
    //#DCCPlugin.java:95: method: void com.dmdirc.addons.dcc.DCCPlugin.askQuestion(String, String, int, ActionType, StringBuffer, Object[])
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): "QuestionThread: "._tainted
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): arguments
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): desiredAnswer
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): format
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): question
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): this
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): title
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): title._tainted
    //#input(void askQuestion(String, String, int, ActionType, StringBuffer, Object[])): type
			/** {@inheritDoc} */
			@Override
			public void run() {
				int result = JOptionPane.showConfirmDialog(null, question, title, JOptionPane.YES_NO_OPTION);
    //#DCCPlugin.java:99: method: void com.dmdirc.addons.dcc.DCCPlugin$1.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.val$arguments
    //#input(void run()): this.val$desiredAnswer
    //#input(void run()): this.val$format
    //#input(void run()): this.val$question
    //#input(void run()): this.val$title
    //#input(void run()): this.val$type
    //#pre[2] (void run()): (soft) this.this$0 != null
				if (result == desiredAnswer) {
					handleProcessEvent(type, format, true, arguments);
    //#DCCPlugin.java:101: Warning: call too complex - analysis skipped
    //#    call on void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$1
    //#    method: void run()
    //#    unanalyzed callee: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
				}
			}
    //#DCCPlugin.java:103: end of method: void com.dmdirc.addons.dcc.DCCPlugin$1.run()
		}, "QuestionThread: "+title);
		// Start the thread
		questionThread.start();
	}
    //#DCCPlugin.java:107: end of method: void com.dmdirc.addons.dcc.DCCPlugin.askQuestion(String, String, int, ActionType, StringBuffer, Object[])

	/**
	 * Ask the location to save a file, then start the download.
	 *
	 * @param nickname Person this dcc is from.
	 * @param send The DCCSend to save for.
	 * @param parser The parser this send was received on
	 * @param reverse Is this a reverse dcc?
	 * @param sendFilename The name of the file which is being received
	 * @param token Token used in reverse dcc.
	 */
	public void saveFile(final String nickname, final DCCSend send, final IRCParser parser, final boolean reverse, final String sendFilename, final String token) {
		// New thread to ask the user where to save in to stop us locking the UI
		final Thread dccThread = new Thread(new Runnable() {
    //#DCCPlugin.java:121: method: void com.dmdirc.addons.dcc.DCCPlugin$2.com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): Param_2
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): Param_3
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): Param_4
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): Param_5
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): Param_6
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): Param_7
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.this$0
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$nickname
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$parser
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$reverse
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$send
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$sendFilename
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$token
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$nickname == Param_4
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): init'ed(this.val$nickname)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$parser == Param_5
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): init'ed(this.val$parser)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$reverse == Param_6
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): init'ed(this.val$reverse)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$send == Param_3
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): init'ed(this.val$send)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$sendFilename == Param_2
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): init'ed(this.val$sendFilename)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): this.val$token == Param_7
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)): init'ed(this.val$token)
    //#DCCPlugin.java:121: end of method: void com.dmdirc.addons.dcc.DCCPlugin$2.com.dmdirc.addons.dcc.DCCPlugin$2(DCCPlugin, String, DCCSend, String, IRCParser, bool, String)
    //#DCCPlugin.java:121: method: void com.dmdirc.addons.dcc.DCCPlugin.saveFile(String, DCCSend, IRCParser, bool, String, String)
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): "saveFileThread: "._tainted
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): nickname
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): parser
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): reverse
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): send
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): sendFilename
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): sendFilename._tainted
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): this
    //#input(void saveFile(String, DCCSend, IRCParser, bool, String, String)): token
			/** {@inheritDoc} */
			@Override
			public void run() {
				final JFileChooser jc = KFileChooser.getFileChooser(DCCPlugin.this, IdentityManager.getGlobalConfig().getOption(getDomain(), "receive.savelocation"));
    //#DCCPlugin.java:125: method: void com.dmdirc.addons.dcc.DCCPlugin$2.run()
    //#DCCPlugin.java:125: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:125: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:125: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#input(void run()): " "._tainted
    //#input(void run()): " 0 "._tainted
    //#input(void run()): " As - DMDirc"._tainted
    //#input(void run()): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void run()): "*Receive: "._tainted
    //#input(void run()): "."._tainted
    //#input(void run()): "127.0.0.1"._tainted
    //#input(void run()): ":"._tainted
    //#input(void run()): "From: "._tainted
    //#input(void run()): "No available sockets in range "._tainted
    //#input(void run()): "RESUME "._tainted
    //#input(void run()): "Receive: "._tainted
    //#input(void run()): "Recieving: "._tainted
    //#input(void run()): "SEND "._tainted
    //#input(void run()): "Save "._tainted
    //#input(void run()): "Sending: "._tainted
    //#input(void run()): "To: "._tainted
    //#input(void run()): "saveFileThread: "._tainted
    //#input(void run()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void run()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Main.controller
    //#input(void run()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCC]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.connect()V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen()V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen(II)V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketClosed()V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketOpened()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.connect()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen(II)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketClosed()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketOpened()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatInterface]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend$TransferType.RECEIVE
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.SENDS
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.connect()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileName()Ljava/lang/String;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileSize()J
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getPort()I
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getShortFileName()Ljava/lang/String;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getType()Lcom/dmdirc/addons/dcc/DCCSend$TransferType;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen(II)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileName(Ljava/lang/String;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setHandler(Lcom/dmdirc/addons/dcc/DCCSendInterface;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setToken(Ljava/lang/String;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketClosed()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketOpened()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendInterface]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getContentPane()Ljava/awt/Container;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/kde/KDialogProcess.hasKDialog
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.childFrames
    //#input(void run()): this.this$0.container
    //#input(void run()): this.this$0.container.__Tag
    //#input(void run()): this.val$nickname
    //#input(void run()): this.val$nickname._tainted
    //#input(void run()): this.val$parser
    //#input(void run()): this.val$reverse
    //#input(void run()): this.val$send
    //#input(void run()): this.val$send.__Tag
    //#input(void run()): this.val$send.address
    //#input(void run()): this.val$send.filename
    //#input(void run()): this.val$send.handler.__Tag
    //#input(void run()): this.val$send.listen
    //#input(void run()): this.val$send.port
    //#input(void run()): this.val$send.serverSocket
    //#input(void run()): this.val$send.serverSocketSem
    //#input(void run()): this.val$send.size
    //#input(void run()): this.val$send.transferType
    //#input(void run()): this.val$sendFilename
    //#input(void run()): this.val$sendFilename._tainted
    //#input(void run()): this.val$token
    //#input(void run()): this.val$token._tainted
    //#output(void run()): new BufferedReader(socketOpened#2) num objects
    //#output(void run()): new DCCPlugin$3(createContainer#1) num objects
    //#output(void run()): new DCCPlugin$3(createContainer#1).__Tag
    //#output(void run()): new DCCPlugin$3(createContainer#1).changer
    //#output(void run()): new DCCPlugin$3(createContainer#1).config
    //#output(void run()): new DCCPlugin$3(createContainer#1).icon
    //#output(void run()): new DCCPlugin$3(createContainer#1).listeners
    //#output(void run()): new DCCPlugin$3(createContainer#1).myWindow
    //#output(void run()): new DCCPlugin$3(createContainer#1).notification
    //#output(void run()): new DCCPlugin$3(createContainer#1).plugin
    //#output(void run()): new DCCPlugin$3(createContainer#1).this$0
    //#output(void run()): new DCCPlugin$3(createContainer#1).title
    //#output(void run()): new DCCPlugin$3(createContainer#1).windowClosing
    //#output(void run()): new DataInputStream(setFileName#2) num objects
    //#output(void run()): new DataInputStream(socketOpened#5) num objects
    //#output(void run()): new DataOutputStream(socketOpened#2) num objects
    //#output(void run()): new DataOutputStream(socketOpened#4) num objects
    //#output(void run()): new File(setFileName#1) num objects
    //#output(void run()): new File(socketOpened#1) num objects
    //#output(void run()): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void run()): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void run()): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void run()): new ListenerList(FrameContainer#1) num objects
    //#output(void run()): new ListenerList(FrameContainer#1).__Lock
    //#output(void run()): new PrintWriter(socketOpened#1) num objects
    //#output(void run()): new ServerSocket(listen#1*) num objects
    //#output(void run()): new Socket(connect#1) num objects
    //#output(void run()): new Thread(connect#2) num objects
    //#output(void run()): this.this$0.container
    //#output(void run()): this.val$send.address
    //#output(void run()): this.val$send.fileIn
    //#output(void run()): this.val$send.fileOut
    //#output(void run()): this.val$send.filename
    //#output(void run()): this.val$send.handler
    //#output(void run()): this.val$send.handler.timeStarted
    //#output(void run()): this.val$send.in
    //#output(void run()): this.val$send.listen
    //#output(void run()): this.val$send.myThread
    //#output(void run()): this.val$send.out
    //#output(void run()): this.val$send.port
    //#output(void run()): this.val$send.serverSocket
    //#output(void run()): this.val$send.socket
    //#output(void run()): this.val$send.token
    //#output(void run()): this.val$send.transferFile
    //#new obj(void run()): new BufferedReader(socketOpened#2)
    //#new obj(void run()): new DCCPlugin$3(createContainer#1)
    //#new obj(void run()): new DataInputStream(setFileName#2)
    //#new obj(void run()): new DataInputStream(socketOpened#5)
    //#new obj(void run()): new DataOutputStream(socketOpened#2)
    //#new obj(void run()): new DataOutputStream(socketOpened#4)
    //#new obj(void run()): new File(setFileName#1)
    //#new obj(void run()): new File(socketOpened#1)
    //#new obj(void run()): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void run()): new ListenerList(FrameContainer#1)
    //#new obj(void run()): new PrintWriter(socketOpened#1)
    //#new obj(void run()): new ServerSocket(listen#1*)
    //#new obj(void run()): new Socket(connect#1)
    //#new obj(void run()): new Thread(connect#2)
    //#pre[8] (void run()): init'ed(this.val$send.filename)
    //#pre[23] (void run()): this.this$0 != null
    //#pre[32] (void run()): this.val$send != null
    //#pre[36] (void run()): this.val$send.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[2] (void run()): (soft) com/dmdirc/Main.controller != null
    //#pre[4] (void run()): (soft) init'ed(this.container)
    //#pre[5] (void run()): (soft) init'ed(this.val$send.address)
    //#pre[13] (void run()): (soft) init'ed(this.val$send.listen)
    //#pre[17] (void run()): (soft) init'ed(this.val$send.port)
    //#pre[18] (void run()): (soft) this.val$send.serverSocket != null
    //#pre[25] (void run()): (soft) this.childFrames != null
    //#pre[30] (void run()): (soft) this.val$parser != null
    //#pre[50] (void run()): (soft) this.val$send.serverSocketSem != null
    //#pre[51] (void run()): (soft) init'ed(this.val$send.size)
    //#pre[53] (void run()): (soft) init'ed(this.val$send.transferType)
    //#pre[56] (void run()): (soft) this.val$token != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@125 != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@131 != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@141 != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@149 != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@161 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@137 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@139 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@140 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@162 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@164 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@176 != null
    //#post(void run()): init'ed(this.container)
    //#post(void run()): this.val$send.address == One-of{old this.val$send.address, 0}
    //#post(void run()): init'ed(this.val$send.address)
    //#post(void run()): this.val$send.fileIn == One-of{old this.val$send.fileIn, &new DataInputStream(setFileName#2), null}
    //#post(void run()): possibly_updated(this.val$send.fileOut)
    //#post(void run()): init'ed(this.val$send.filename)
    //#post(void run()): possibly_updated(this.val$send.handler)
    //#post(void run()): this.val$send.handler.timeStarted == old this.val$send.handler.timeStarted
    //#post(void run()): possibly_updated(this.val$send.in)
    //#post(void run()): init'ed(this.val$send.listen)
    //#post(void run()): this.val$send.myThread == One-of{old this.val$send.myThread, &new Thread(connect#2)}
    //#post(void run()): possibly_updated(this.val$send.out)
    //#post(void run()): init'ed(this.val$send.port)
    //#post(void run()): this.val$send.serverSocket == One-of{old this.val$send.serverSocket, &new ServerSocket(listen#1*)}
    //#post(void run()): this.val$send.serverSocket != null
    //#post(void run()): this.val$send.socket == One-of{old this.val$send.socket, &new Socket(connect#1)}
    //#post(void run()): this.val$send.token == One-of{old this.val$send.token, this.val$token}
    //#post(void run()): possibly_updated(this.val$send.transferFile)
    //#post(void run()): new BufferedReader(socketOpened#2) num objects == 0
    //#post(void run()): new DCCPlugin$3(createContainer#1) num objects <= 1
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).__Tag)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).changer)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).config)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).icon)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).listeners)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).myWindow)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).notification)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).plugin)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).this$0)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).title)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).windowClosing)
    //#post(void run()): new DataInputStream(setFileName#2) num objects <= 1
    //#post(void run()): new DataInputStream(socketOpened#5) num objects <= 1
    //#post(void run()): new DataInputStream(socketOpened#5) num objects == 0
    //#post(void run()): new DataOutputStream(socketOpened#2) num objects <= 1
    //#post(void run()): new DataOutputStream(socketOpened#2) num objects == 0
    //#post(void run()): new DataOutputStream(socketOpened#4) num objects <= 1
    //#post(void run()): new DataOutputStream(socketOpened#4) num objects == 0
    //#post(void run()): new File(setFileName#1) num objects <= 1
    //#post(void run()): new File(socketOpened#1) num objects <= 1
    //#post(void run()): new File(socketOpened#1) num objects == 0
    //#post(void run()): new FrameContainer$IconChanger(FrameContainer#2) num objects <= 1
    //#post(void run()): init'ed(new FrameContainer$IconChanger(FrameContainer#2).__Tag)
    //#post(void run()): init'ed(new FrameContainer$IconChanger(FrameContainer#2).this$0)
    //#post(void run()): new ListenerList(FrameContainer#1) num objects <= 1
    //#post(void run()): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#post(void run()): new PrintWriter(socketOpened#1) num objects == 0
    //#post(void run()): new ServerSocket(listen#1*) num objects <= 1
    //#post(void run()): new Socket(connect#1) num objects <= 1
    //#post(void run()): new Socket(connect#1) num objects == 0
    //#post(void run()): new Thread(connect#2) num objects <= 1
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin:getDomain
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JFileChooser
    //#unanalyzed(void run()): Effects-of-calling:connect
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:java.io.File
    //#unanalyzed(void run()): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void run()): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataInputStream
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setValue
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addNonCriticalCallback
    //#unanalyzed(void run()): Effects-of-calling:getContentPane
    //#unanalyzed(void run()): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Container:setLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setMinimum
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setMaximum
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setStringPainted
    //#unanalyzed(void run()): Effects-of-calling:java.io.File:getName
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin$3
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:getText
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setText
    //#unanalyzed(void run()): Effects-of-calling:getFrame
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void run()): Effects-of-calling:listen
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMyself
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getHost
    //#unanalyzed(void run()): Effects-of-calling:java.net.InetAddress:getByName
    //#unanalyzed(void run()): Effects-of-calling:java.net.InetAddress:getHostAddress
    //#unanalyzed(void run()): Effects-of-calling:java.net.InetAddress:getLocalHost
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(void run()): Effects-of-calling:socketClosed
    //#unanalyzed(void run()): Effects-of-calling:java.net.Socket:getOutputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.PrintWriter
    //#unanalyzed(void run()): Effects-of-calling:java.net.Socket:getInputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(void run()): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(void run()): Effects-of-calling:socketOpened
    //#unanalyzed(void run()): Effects-of-calling:java.net.ServerSocket:getLocalPort
    //#unanalyzed(void run()): Effects-of-calling:java.net.Socket
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void run()): Effects-of-calling:java.util.concurrent.Semaphore:acquireUninterruptibly
    //#unanalyzed(void run()): Effects-of-calling:java.net.ServerSocket
    //#unanalyzed(void run()): Effects-of-calling:java.util.concurrent.Semaphore:release
    //#unanalyzed(void run()): Effects-of-calling:java.io.IOException
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void run()): Effects-of-calling:getType
    //#unanalyzed(void run()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void run()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void run()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void run()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void run()): Effects-of-calling:trigger
    //#unanalyzed(void run()): Effects-of-calling:getArity
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void run()): Effects-of-calling:addLine
    //#unanalyzed(void run()): Effects-of-calling:setIcon
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataInputStream:close
    //#unanalyzed(void run()): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataOutputStream
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void run()): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void run()): Effects-of-calling:isWindowClosing
    //#test_vector(void run()): this.val$reverse: {0}, {1}
    //#test_vector(void run()): this.val$send.size: {-9_223_372_036_854_775_808..-1}, {0..18_446_744_073_709_551_615}
    //#test_vector(void run()): com.dmdirc.config.ConfigManager:getOptionBool(...)@131: {0}, {1}
    //#test_vector(void run()): com.dmdirc.config.ConfigManager:getOptionBool(...)@141: {0}, {1}
    //#test_vector(void run()): com.dmdirc.config.ConfigManager:getOptionBool(...)@149: {0}, {1}
    //#test_vector(void run()): com.dmdirc.config.ConfigManager:getOptionBool(...)@161: {0}, {1}
    //#test_vector(void run()): java.io.File:exists(...)@139: {0}, {1}
    //#test_vector(void run()): java.lang.String:isEmpty(...)@157: {1}, {0}
				jc.setDialogTitle("Save "+sendFilename+" As - DMDirc");
				jc.setFileSelectionMode(JFileChooser.FILES_ONLY);
				jc.setMultiSelectionEnabled(false);
				jc.setSelectedFile(new File(send.getFileName()));
				int result;
				if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "receive.autoaccept")) {
    //#DCCPlugin.java:131: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:131: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:131: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
					result = JFileChooser.APPROVE_OPTION;
				} else {
					result = jc.showSaveDialog((JFrame)Main.getUI().getMainWindow());
    //#DCCPlugin.java:134: Warning: method not available - call not analyzed
    //#    call on MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
				}
				if (result == JFileChooser.APPROVE_OPTION) {
					send.setFileName(jc.getSelectedFile().getPath());
					boolean resume = false;
					if (jc.getSelectedFile().exists()) {
						if (send.getFileSize() > -1 && send.getFileSize() <= jc.getSelectedFile().length()) {
							if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "receive.autoaccept")) {
    //#DCCPlugin.java:141: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:141: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:141: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
								return;
							} else {
								JOptionPane.showMessageDialog((JFrame)Main.getUI().getMainWindow(), "This file has already been completed, or is longer than the file you are receiving.\nPlease choose a different file.", "Problem with selected file", JOptionPane.ERROR_MESSAGE);
    //#DCCPlugin.java:144: Warning: method not available - call not analyzed
    //#    call on MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
								saveFile(nickname, send, parser, reverse, sendFilename, token);
								return;
							}
						} else {
							if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "receive.autoaccept")) {
    //#DCCPlugin.java:149: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:149: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:149: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
								resume = true;
							} else {
								result = JOptionPane.showConfirmDialog((JFrame)Main.getUI().getMainWindow(), "This file exists already, do you want to resume an exisiting download?", "Resume Download?", JOptionPane.YES_NO_OPTION);
    //#DCCPlugin.java:152: Warning: method not available - call not analyzed
    //#    call on MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
								resume = (result == JOptionPane.YES_OPTION);
							}
						}
					}
					if (reverse && !token.isEmpty()) {
						new DCCSendWindow(DCCPlugin.this, send, "*Receive: "+nickname, nickname, null);
						send.setToken(token);
						if (resume) {
							if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "receive.reverse.sendtoken")) {
    //#DCCPlugin.java:161: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:161: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:161: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
								parser.sendCTCP(nickname, "DCC", "RESUME "+sendFilename+" 0 "+jc.getSelectedFile().length()+" "+token);
    //#DCCPlugin.java:162: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
							} else {
								parser.sendCTCP(nickname, "DCC", "RESUME "+sendFilename+" 0 "+jc.getSelectedFile().length());
    //#DCCPlugin.java:164: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
							}
						} else {
							if (listen(send)) {
								parser.sendCTCP(nickname, "DCC", "SEND "+sendFilename+" "+DCC.ipToLong(getListenIP(parser))+" "+send.getPort()+" "+send.getFileSize()+" "+token);
    //#DCCPlugin.java:168: ?precondition failure
    //#    com/dmdirc/addons/dcc/DCC.ipToLong: ip != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    basic block: bb_24
    //#    assertion: getListenIP(...) != null
    //#    callee: long com/dmdirc/addons/dcc/DCC.ipToLong(String)
    //#    callee assertion: ip != null
    //#    callee file: DCC.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 308
    //#    VN: getListenIP(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCPlugin.java:168: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
							} else {
								// Listen failed.
							}
						}
					} else {
						new DCCSendWindow(DCCPlugin.this, send, "Receive: "+nickname, nickname, null);
						if (resume) {
							parser.sendCTCP(nickname, "DCC", "RESUME "+sendFilename+" "+send.getPort()+" "+jc.getSelectedFile().length());
    //#DCCPlugin.java:176: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
						} else {
							send.connect();
						}
					}
				}
			}
    //#DCCPlugin.java:182: end of method: void com.dmdirc.addons.dcc.DCCPlugin$2.run()
		}, "saveFileThread: "+sendFilename);
		// Start the thread
		dccThread.start();
	}
    //#DCCPlugin.java:186: end of method: void com.dmdirc.addons.dcc.DCCPlugin.saveFile(String, DCCSend, IRCParser, bool, String, String)

	/**
	 * Process an event of the specified type.
	 *
	 * @param type The type of the event to process
	 * @param format Format of messages that are about to be sent. (May be null)
	 * @param arguments The arguments for the event
	 */
	@Override
	public void processEvent(final ActionType type, final StringBuffer format, final Object... arguments) {
		handleProcessEvent(type, format, false, arguments);
    //#DCCPlugin.java:197: method: void com.dmdirc.addons.dcc.DCCPlugin.processEvent(ActionType, StringBuffer, Object[])
    //#DCCPlugin.java:197: Warning: call too complex - analysis skipped
    //#    call on void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#input(void processEvent(ActionType, StringBuffer, Object[])): arguments
    //#input(void processEvent(ActionType, StringBuffer, Object[])): format
    //#input(void processEvent(ActionType, StringBuffer, Object[])): this
    //#input(void processEvent(ActionType, StringBuffer, Object[])): type
	}
    //#DCCPlugin.java:198: end of method: void com.dmdirc.addons.dcc.DCCPlugin.processEvent(ActionType, StringBuffer, Object[])

	/**
	 * Make the given DCC start listening.
	 * This will either call dcc.listen() or dcc.listen(startPort, endPort)
	 * depending on config.
	 *
	 * @param dcc DCC to start listening.
	 * @return True if Socket was opened.
	 */
	protected boolean listen(final DCC dcc) {
	
		final boolean usePortRange = IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "firewall.ports.usePortRange");
    //#DCCPlugin.java:210: method: bool com.dmdirc.addons.dcc.DCCPlugin.listen(DCC)
    //#DCCPlugin.java:210: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:210: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:210: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#DCCPlugin.java:210: Warning: suspicious precondition
    //#    The precondition for dcc.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    suspicious precondition index: [7]
    //#    Attribs:  Soft
    //#input(bool listen(DCC)): "."._tainted
    //#input(bool listen(DCC)): ":"._tainted
    //#input(bool listen(DCC)): "No available sockets in range "._tainted
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCC]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[others]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.connect()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen(II)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketClosed()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketOpened()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.connect()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen(II)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketClosed()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketOpened()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatInterface]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[others]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend$TransferType.RECEIVE
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.SENDS
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.connect()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen(II)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketClosed()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketOpened()V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendInterface]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[others]
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(bool listen(DCC)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(bool listen(DCC)): dcc
    //#input(bool listen(DCC)): dcc.__Tag
    //#input(bool listen(DCC)): dcc.address
    //#input(bool listen(DCC)): dcc.handler.__Tag
    //#input(bool listen(DCC)): dcc.port
    //#input(bool listen(DCC)): dcc.serverSocket
    //#input(bool listen(DCC)): dcc.serverSocketSem
    //#input(bool listen(DCC)): this
    //#output(bool listen(DCC)): dcc.address
    //#output(bool listen(DCC)): dcc.fileOut
    //#output(bool listen(DCC)): dcc.handler.timeStarted
    //#output(bool listen(DCC)): dcc.in
    //#output(bool listen(DCC)): dcc.listen
    //#output(bool listen(DCC)): dcc.myThread
    //#output(bool listen(DCC)): dcc.out
    //#output(bool listen(DCC)): dcc.port
    //#output(bool listen(DCC)): dcc.serverSocket
    //#output(bool listen(DCC)): dcc.socket
    //#output(bool listen(DCC)): dcc.transferFile
    //#output(bool listen(DCC)): new BufferedReader(socketOpened#2) num objects
    //#output(bool listen(DCC)): new DataInputStream(socketOpened#5) num objects
    //#output(bool listen(DCC)): new DataOutputStream(socketOpened#2) num objects
    //#output(bool listen(DCC)): new DataOutputStream(socketOpened#4) num objects
    //#output(bool listen(DCC)): new File(socketOpened#1) num objects
    //#output(bool listen(DCC)): new PrintWriter(socketOpened#1) num objects
    //#output(bool listen(DCC)): new ServerSocket(listen#1*) num objects
    //#output(bool listen(DCC)): new Socket(connect#1) num objects
    //#output(bool listen(DCC)): new Thread(connect#2) num objects
    //#output(bool listen(DCC)): return_value
    //#new obj(bool listen(DCC)): new BufferedReader(socketOpened#2)
    //#new obj(bool listen(DCC)): new DataInputStream(socketOpened#5)
    //#new obj(bool listen(DCC)): new DataOutputStream(socketOpened#2)
    //#new obj(bool listen(DCC)): new DataOutputStream(socketOpened#4)
    //#new obj(bool listen(DCC)): new File(socketOpened#1)
    //#new obj(bool listen(DCC)): new PrintWriter(socketOpened#1)
    //#new obj(bool listen(DCC)): new ServerSocket(listen#1*)
    //#new obj(bool listen(DCC)): new Socket(connect#1)
    //#new obj(bool listen(DCC)): new Thread(connect#2)
    //#pre[3] (bool listen(DCC)): (soft) dcc != null
    //#pre[7] (bool listen(DCC)): (soft) dcc.__Tag in {com/dmdirc/addons/dcc/DCC, com/dmdirc/addons/dcc/DCCChat, com/dmdirc/addons/dcc/DCCSend}
    //#pre[23] (bool listen(DCC)): (soft) dcc.serverSocketSem != null
    //#pre[27] (bool listen(DCC)): (soft) init'ed(dcc.address)
    //#pre[36] (bool listen(DCC)): (soft) init'ed(dcc.port)
    //#pre[37] (bool listen(DCC)): (soft) dcc.serverSocket != null
    //#presumption(bool listen(DCC)): com.dmdirc.config.ConfigManager:getOptionInt(...)@211 <= 4_294_967_294
    //#presumption(bool listen(DCC)): com.dmdirc.config.ConfigManager:getOptionInt(...)@212 <= 4_294_967_294
    //#presumption(bool listen(DCC)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@210 != null
    //#presumption(bool listen(DCC)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@211 != null
    //#presumption(bool listen(DCC)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@212 != null
    //#post(bool listen(DCC)): dcc.address == One-of{old dcc.address, 0}
    //#post(bool listen(DCC)): init'ed(dcc.address)
    //#post(bool listen(DCC)): possibly_updated(dcc.fileOut)
    //#post(bool listen(DCC)): dcc.handler.timeStarted == old dcc.handler.timeStarted
    //#post(bool listen(DCC)): possibly_updated(dcc.in)
    //#post(bool listen(DCC)): possibly_updated(dcc.listen)
    //#post(bool listen(DCC)): dcc.myThread == One-of{old dcc.myThread, &new Thread(connect#2)}
    //#post(bool listen(DCC)): possibly_updated(dcc.out)
    //#post(bool listen(DCC)): init'ed(dcc.port)
    //#post(bool listen(DCC)): dcc.serverSocket == One-of{old dcc.serverSocket, &new ServerSocket(listen#1*)}
    //#post(bool listen(DCC)): dcc.serverSocket != null
    //#post(bool listen(DCC)): dcc.socket == old dcc.socket
    //#post(bool listen(DCC)): possibly_updated(dcc.transferFile)
    //#post(bool listen(DCC)): init'ed(return_value)
    //#post(bool listen(DCC)): new BufferedReader(socketOpened#2) num objects == 0
    //#post(bool listen(DCC)): new DataInputStream(socketOpened#5) num objects == 0
    //#post(bool listen(DCC)): new DataOutputStream(socketOpened#2) num objects == 0
    //#post(bool listen(DCC)): new DataOutputStream(socketOpened#4) num objects == 0
    //#post(bool listen(DCC)): new File(socketOpened#1) num objects == 0
    //#post(bool listen(DCC)): new PrintWriter(socketOpened#1) num objects == 0
    //#post(bool listen(DCC)): new ServerSocket(listen#1*) num objects <= 1
    //#post(bool listen(DCC)): new Socket(connect#1) num objects == 0
    //#post(bool listen(DCC)): new Thread(connect#2) num objects <= 1
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:getType
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:connect
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:trigger
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:getArity
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.util.concurrent.Semaphore:acquireUninterruptibly
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.net.ServerSocket
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.util.concurrent.Semaphore:release
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.IOException
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:socketClosed
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.net.Socket:getOutputStream
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.PrintWriter
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.net.Socket:getInputStream
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:socketOpened
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.net.ServerSocket:getLocalPort
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.net.Socket
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.Thread
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.File
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.DataInputStream
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:addLine
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:setIcon
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.DataInputStream:close
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.io.DataOutputStream
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.String:format
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:javax.swing.JProgressBar:setValue
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(bool listen(DCC)): Effects-of-calling:isWindowClosing
    //#test_vector(bool listen(DCC)): com.dmdirc.config.ConfigManager:getOptionBool(...)@210: {0}, {1}
		final int startPort  = IdentityManager.getGlobalConfig().getOptionInt(getDomain(), "firewall.ports.startPort");
    //#DCCPlugin.java:211: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:211: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:211: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
		final int endPort  = IdentityManager.getGlobalConfig().getOptionInt(getDomain(), "firewall.ports.endPort");
    //#DCCPlugin.java:212: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:212: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:212: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: bool listen(DCC)
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)

		try {
			if (usePortRange) {
				dcc.listen(startPort, endPort);
			} else {
				dcc.listen();
			}
			return true;
		} catch (IOException ioe) {
			return false;
    //#DCCPlugin.java:222: end of method: bool com.dmdirc.addons.dcc.DCCPlugin.listen(DCC)
		}
	}

	/**
	 * Process an event of the specified type.
	 *
	 * @param type The type of the event to process
	 * @param format Format of messages that are about to be sent. (May be null)
	 * @param dontAsk Don't ask any questions, assume yes.
	 * @param arguments The arguments for the event
	 */
	public void handleProcessEvent(final ActionType type, final StringBuffer format, final boolean dontAsk, final Object... arguments) {
		if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "receive.autoaccept") && !dontAsk) {
    //#DCCPlugin.java:235: method: void com.dmdirc.addons.dcc.DCCPlugin.handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#DCCPlugin.java:235: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:235: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:235: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): " "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): " on "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): " would like to send you a file over DCC.&#10;&#10;File: "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): " would like to start a DCC Chat with you.&#10;&#10;Do you want to continue?"._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): """._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): ""._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "&#10;&#10;Do you want to continue?"._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "."._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): ":"._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "ACCEPT "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "Chat: "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "DCC Chat Request"._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "DCC Send Request"._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "No available sockets in range "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "QuestionThread: "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "SEND "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "User "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): "saveFileThread: "._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): arguments
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): arguments.length
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): arguments[0].__Tag
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): arguments[2]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): arguments[3]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): arguments[3]._tainted
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#1).__Tag
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#1).type
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#10).__Tag
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#10).type
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#1).__Tag
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#28).__Tag
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Server.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Server.__Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/Server.__Dispatch_Table.toString()Ljava/lang/String;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/ActionManager.listeners
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/CoreActionType.SERVER_CTCP
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCC]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.connect()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen(II)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketClosed()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketOpened()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.connect()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.getHost()Ljava/lang/String;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.getPort()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen(II)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.setAddress(JI)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.setHandler(Lcom/dmdirc/addons/dcc/DCCChatInterface;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketClosed()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketOpened()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatInterface]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend$TransferType.RECEIVE
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.SENDS
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.connect()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileName()Ljava/lang/String;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileSize()J
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getHost()Ljava/lang/String;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getPort()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getToken()Ljava/lang/String;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen(II)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setAddress(JI)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileName(Ljava/lang/String;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileSize(J)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileStart(I)I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setTurbo(Z)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketClosed()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketOpened()V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendInterface]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[others]
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/actions/DCCActions.DCC_CHAT_REQUEST
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/actions/DCCActions.DCC_SEND_REQUEST
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): dontAsk
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): format
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): java.io.File.separatorChar
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): this
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): this.childFrames
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): this.container.__Tag
    //#input(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): type
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com/dmdirc/ServerManager.me
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ArrayList(ServerManager#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new BufferedReader(socketOpened#2) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).__Tag
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).changer
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).config
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).icon
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).listeners
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).myWindow
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).notification
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).plugin
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).this$0
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).title
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1).windowClosing
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataInputStream(setFileName#2) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataInputStream(socketOpened#5) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataOutputStream(socketOpened#2) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataOutputStream(socketOpened#4) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new File(setFileName#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new File(socketOpened#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ListenerList(FrameContainer#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ListenerList(FrameContainer#1).__Lock
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new PrintWriter(socketOpened#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerManager(getServerManager#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerManager(getServerManager#1).__Tag
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerManager(getServerManager#1).servers
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerSocket(listen#1*) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new Socket(connect#1) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new Thread(connect#2) num objects
    //#output(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): this.container
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ArrayList(ServerManager#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new BufferedReader(socketOpened#2)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataInputStream(setFileName#2)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataInputStream(socketOpened#5)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataOutputStream(socketOpened#2)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataOutputStream(socketOpened#4)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new File(setFileName#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new File(socketOpened#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ListenerList(FrameContainer#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new PrintWriter(socketOpened#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerManager(getServerManager#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerSocket(listen#1*)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new Socket(connect#1)
    //#new obj(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new Thread(connect#2)
    //#pre[1] (void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): (soft) arguments != null
    //#pre[2] (void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): (soft) arguments.length >= 4
    //#pre[8] (void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): (soft) arguments[2] != null
    //#pre[9] (void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): (soft) arguments[3] != null
    //#presumption(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@235 != null
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): possibly_updated(com/dmdirc/ServerManager.me)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): possibly_updated(this.container)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ArrayList(ServerManager#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new BufferedReader(socketOpened#2) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DCCPlugin$3(createContainer#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).__Tag)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).changer)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).config)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).icon)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).listeners)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).myWindow)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).notification)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).plugin)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).this$0)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).title)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new DCCPlugin$3(createContainer#1).windowClosing)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataInputStream(setFileName#2) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataInputStream(socketOpened#5) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataOutputStream(socketOpened#2) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new DataOutputStream(socketOpened#4) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new File(setFileName#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new File(socketOpened#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new FrameContainer$IconChanger(FrameContainer#2) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new FrameContainer$IconChanger(FrameContainer#2).__Tag)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new FrameContainer$IconChanger(FrameContainer#2).this$0)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ListenerList(FrameContainer#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new PrintWriter(socketOpened#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerManager(getServerManager#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): possibly_updated(new ServerManager(getServerManager#1).__Tag)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): possibly_updated(new ServerManager(getServerManager#1).servers)
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new ServerSocket(listen#1*) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new Socket(connect#1) num objects == 0
    //#post(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): new Thread(connect#2) num objects == 0
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin:getDomain
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getType
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin$3
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:getText
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setText
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getFrame
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.List:add
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:listen
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:connect
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:trigger
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getArity
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:triggerActions
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.concurrent.Semaphore:acquireUninterruptibly
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.net.ServerSocket
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.concurrent.Semaphore:release
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.IOException
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:socketClosed
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.net.Socket:getOutputStream
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.PrintWriter
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.net.Socket:getInputStream
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:socketOpened
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.net.ServerSocket:getLocalPort
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.net.Socket
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.dcc.DCC
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getUI
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getInputWindow
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:setTitle
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.List:size
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:readTerm
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:parseStack
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getServer
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getState
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:get
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:getArgTypes
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:test
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:evaluate
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.List:get
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.concurrent.Semaphore
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.File
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.DataInputStream
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.DataInputStream:skipBytes
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:addLine
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:setIcon
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.DataInputStream:close
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.io.DataOutputStream
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:javax.swing.JProgressBar:setValue
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): Effects-of-calling:isWindowClosing
    //#test_vector(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): dontAsk: {1}, {0}
    //#test_vector(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): com.dmdirc.config.ConfigManager:getOptionBool(...)@235: {0}, {1}
    //#test_vector(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): java.lang.String:equalsIgnoreCase(...)@243: {0}, {1}
    //#test_vector(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): java.lang.String:equalsIgnoreCase(...)@244: {0}, {1}
    //#test_vector(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): java.lang.String:equalsIgnoreCase(...)@260: {0}, {1}
    //#test_vector(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): java.lang.String:equalsIgnoreCase(...)@340: {1}, {0}
    //#test_vector(void handleProcessEvent(ActionType, StringBuffer, bool, Object[])): java.lang.String:equalsIgnoreCase(...)@340: {0}, {1}
			handleProcessEvent(type, format, true, arguments);
    //#DCCPlugin.java:236: Warning: call too complex - analysis skipped
    //#    call on void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    unanalyzed callee: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
			return;
		}

		if (type == CoreActionType.SERVER_CTCP) {
			final String ctcpType = (String)arguments[2];
			final String[] ctcpData = ((String)arguments[3]).split(" ");
			if (ctcpType.equalsIgnoreCase("DCC")) {
				if (ctcpData[0].equalsIgnoreCase("chat") && ctcpData.length > 3) {
    //#DCCPlugin.java:244: ?use of default init
    //#    init'ed(ctcpData.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_6
    //#    assertion: init'ed(ctcpData.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#DCCPlugin.java:244: ?use of default init
    //#    init'ed(ctcpData[0])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_6
    //#    assertion: init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#DCCPlugin.java:244: ?null dereference
    //#    not_init'ed(ctcpData[0])
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_6
    //#    assertion: not_init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCPlugin.java:244: ?use of default init
    //#    init'ed(ctcpData.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_7
    //#    assertion: init'ed(ctcpData.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#DCCPlugin.java:244: Warning: test always goes same way
    //#    Test predetermined because ctcpData.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    from bb: bb_7
    //#    live edge: bb_7-->bb_15
    //#    tested vn: undefined - 3
    //#    tested vn values: {-3}
					final String nickname = ((ClientInfo)arguments[1]).getNickname();
    //#DCCPlugin.java:245: Warning: dead code
    //#    Dead code here because ctcpData.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_8
					if (dontAsk) {
						final DCCChat chat = new DCCChat();
    //#DCCPlugin.java:247: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_9
						try {
							chat.setAddress(Long.parseLong(ctcpData[2]), Integer.parseInt(ctcpData[3]));
    //#DCCPlugin.java:249: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_10
						} catch (NumberFormatException nfe) { return; }
						final String myNickname = ((Server)arguments[0]).getParser().getMyNickname();
    //#DCCPlugin.java:251: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_12
    //#DCCPlugin.java:251: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_115
						final DCCFrame f = new DCCChatWindow(this, chat, "Chat: "+nickname, myNickname, nickname);
						f.getFrame().addLine("DCCChatStarting", nickname, chat.getHost(), chat.getPort());
						chat.connect();
					} else {
						ActionManager.processEvent(DCCActions.DCC_CHAT_REQUEST, null, ((Server)arguments[0]), nickname);
    //#DCCPlugin.java:256: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_13
    //#DCCPlugin.java:256: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_127
						askQuestion("User "+nickname+" on "+((Server)arguments[0]).toString()+" would like to start a DCC Chat with you.\n\nDo you want to continue?", "DCC Chat Request", JOptionPane.YES_OPTION, type, format, arguments);
    //#DCCPlugin.java:257: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_121
						return;
					}
				} else if (ctcpData[0].equalsIgnoreCase("send") && ctcpData.length > 3) {
    //#DCCPlugin.java:260: ?use of default init
    //#    init'ed(ctcpData.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_15
    //#    assertion: init'ed(ctcpData.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#DCCPlugin.java:260: ?use of default init
    //#    init'ed(ctcpData[0])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_15
    //#    assertion: init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#DCCPlugin.java:260: ?null dereference
    //#    not_init'ed(ctcpData[0])
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_15
    //#    assertion: not_init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCPlugin.java:260: ?use of default init
    //#    init'ed(ctcpData.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_16
    //#    assertion: init'ed(ctcpData.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#DCCPlugin.java:260: Warning: test always goes same way
    //#    Test predetermined because ctcpData.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    from bb: bb_16
    //#    live edge: bb_16-->bb_67
    //#    tested vn: undefined - 3
    //#    tested vn values: {-3}
    //#DCCPlugin.java:260: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_14
					final String nickname = ((ClientInfo)arguments[1]).getNickname();
    //#DCCPlugin.java:261: Warning: dead code
    //#    Dead code here because ctcpData.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_17
					final String filename;
					String tmpFilename;
					// Clients tend to put files with spaces in the name in "" so lets look for that.
					final StringBuilder filenameBits = new StringBuilder();
					int i;
					final boolean quoted = ctcpData[1].startsWith("\"");
					if (quoted) {
						for (i = 1; i < ctcpData.length; i++) {
    //#DCCPlugin.java:269: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_18
    //#DCCPlugin.java:269: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_19
							String bit = ctcpData[i];
    //#DCCPlugin.java:270: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_20
							if (i == 1) { bit = bit.substring(1); }
    //#DCCPlugin.java:271: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_21
							if (bit.endsWith("\"")) {
    //#DCCPlugin.java:272: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_22
								filenameBits.append(" "+bit.substring(0, bit.length()-1));
    //#DCCPlugin.java:273: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_23
								break;
							} else {
								filenameBits.append(" "+bit);
    //#DCCPlugin.java:276: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_24
							}
						}
						tmpFilename = filenameBits.toString().trim();
    //#DCCPlugin.java:279: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_25
					} else {
						tmpFilename = ctcpData[1];
    //#DCCPlugin.java:281: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_26
						i = 1;
					}
					
					// Try to remove path names if sent.
					// Change file separatorChar from other OSs first
					if (File.separatorChar == '/') {
    //#DCCPlugin.java:287: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_27
						tmpFilename = tmpFilename.replace('\\', File.separatorChar);
    //#DCCPlugin.java:288: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_28
					} else {
						tmpFilename = tmpFilename.replace('/', File.separatorChar);
    //#DCCPlugin.java:290: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_29
					}
					// Then get just the name of the file.
					filename = (new File(tmpFilename)).getName();
    //#DCCPlugin.java:293: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_30
					
					final String ip = ctcpData[++i];
					final String port = ctcpData[++i];
					long size;
					if (ctcpData.length+1 > i) {
						try {
							size = Integer.parseInt(ctcpData[++i]);
    //#DCCPlugin.java:300: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_31
    //#DCCPlugin.java:300: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_32
						} catch (NumberFormatException nfe) { size = -1; }
					} else { size = -1; }
    //#DCCPlugin.java:302: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_34
					final String token = (ctcpData.length-1 > i && !ctcpData[i + 1].equals("T")) ? ctcpData[++i] : "";
    //#DCCPlugin.java:303: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_35
    //#DCCPlugin.java:303: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_36
    //#DCCPlugin.java:303: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_37
    //#DCCPlugin.java:303: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_39
					
					// Ignore incorrect ports, or non-numeric IP/Port
					try {
						int portInt = Integer.parseInt(port);
    //#DCCPlugin.java:307: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_40
						if (portInt > 65535 || portInt < 0) { return; }
    //#DCCPlugin.java:308: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_41
    //#DCCPlugin.java:308: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_42
						Long.parseLong(ip);
    //#DCCPlugin.java:309: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_43
    //#DCCPlugin.java:309: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_44
					} catch (NumberFormatException nfe) { return; }
					
					DCCSend send = DCCSend.findByToken(token);
    //#DCCPlugin.java:312: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_46
					
					if (send == null && !dontAsk) {
    //#DCCPlugin.java:314: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_47
						if (!token.isEmpty() && !port.equals("0")) {
    //#DCCPlugin.java:315: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_48
    //#DCCPlugin.java:315: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_49
							// This is a reverse DCC Send that we no longer care about.
							return;
    //#DCCPlugin.java:317: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_50
						} else {
							ActionManager.processEvent(DCCActions.DCC_SEND_REQUEST, null, ((Server)arguments[0]), nickname, filename);
    //#DCCPlugin.java:319: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_51
    //#DCCPlugin.java:319: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_125
							askQuestion("User "+nickname+" on "+((Server)arguments[0]).toString()+" would like to send you a file over DCC.\n\nFile: "+filename+"\n\nDo you want to continue?", "DCC Send Request", JOptionPane.YES_OPTION, type, format, arguments);
    //#DCCPlugin.java:320: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_119
							return;
						}
					} else {
						final boolean newSend = send == null;
    //#DCCPlugin.java:324: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_52
    //#DCCPlugin.java:324: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_55
						if (newSend) {
							send = new DCCSend(IdentityManager.getGlobalConfig().getOptionInt(getDomain(), "send.blocksize"));
    //#DCCPlugin.java:326: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_56
							send.setTurbo(IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "send.forceturbo"));
						}
						try {
							send.setAddress(Long.parseLong(ip), Integer.parseInt(port));
    //#DCCPlugin.java:330: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_57
    //#DCCPlugin.java:330: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_58
						} catch (NumberFormatException nfe) { return; }
						if (newSend) {
    //#DCCPlugin.java:332: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_60
							send.setFileName(filename);
    //#DCCPlugin.java:333: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_61
							send.setFileSize(size);
							saveFile(nickname, send, ((Server)arguments[0]).getParser(), "0".equals(port), (quoted) ? "\""+filename+"\"" : filename, token);
    //#DCCPlugin.java:335: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_123
    //#DCCPlugin.java:335: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_62
    //#DCCPlugin.java:335: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_64
						} else {
							send.connect();
    //#DCCPlugin.java:337: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_65
						}
					}
				} else if ((ctcpData[0].equalsIgnoreCase("resume") || ctcpData[0].equalsIgnoreCase("accept")) && ctcpData.length > 2) {
    //#DCCPlugin.java:340: ?use of default init
    //#    init'ed(ctcpData.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_67
    //#    assertion: init'ed(ctcpData.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#DCCPlugin.java:340: ?use of default init
    //#    init'ed(ctcpData[0])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_67
    //#    assertion: init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#DCCPlugin.java:340: ?null dereference
    //#    not_init'ed(ctcpData[0])
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_67
    //#    assertion: not_init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCPlugin.java:340: ?use of default init
    //#    init'ed(ctcpData.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_68
    //#    assertion: init'ed(ctcpData.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#DCCPlugin.java:340: ?use of default init
    //#    init'ed(ctcpData[0])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_68
    //#    assertion: init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#DCCPlugin.java:340: ?null dereference
    //#    not_init'ed(ctcpData[0])
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_68
    //#    assertion: not_init'ed(ctcpData[0])
    //#    VN: undefined
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCPlugin.java:340: ?use of default init
    //#    init'ed(ctcpData.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    basic block: bb_69
    //#    assertion: init'ed(ctcpData.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#DCCPlugin.java:340: Warning: test always goes same way
    //#    Test predetermined because ctcpData.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    from bb: bb_69
    //#    live edge: bb_69-->bb_112
    //#    tested vn: undefined - 2
    //#    tested vn values: {-2}
    //#DCCPlugin.java:340: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_66

					final String filename;
					// Clients tend to put files with spaces in the name in "" so lets look for that.
					final StringBuilder filenameBits = new StringBuilder();
    //#DCCPlugin.java:344: Warning: dead code
    //#    Dead code here because ctcpData.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_70
					int i;
					final boolean quoted = ctcpData[1].startsWith("\"");
					if (quoted) {
						for (i = 1; i < ctcpData.length; i++) {
    //#DCCPlugin.java:348: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_71
    //#DCCPlugin.java:348: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_72
							String bit = ctcpData[i];
    //#DCCPlugin.java:349: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_73
							if (i == 1) { bit = bit.substring(1); }
    //#DCCPlugin.java:350: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_74
							if (bit.endsWith("\"")) {
    //#DCCPlugin.java:351: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_75
								filenameBits.append(" "+bit.substring(0, bit.length()-1));
    //#DCCPlugin.java:352: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_76
								break;
							} else {
								filenameBits.append(" "+bit);
    //#DCCPlugin.java:355: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_77
							}
						}
						filename = filenameBits.toString().trim();
    //#DCCPlugin.java:358: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_78
					} else {
						filename = ctcpData[1];
    //#DCCPlugin.java:360: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_79
						i = 1;
					}

					try {
						final int port = Integer.parseInt(ctcpData[++i]);
    //#DCCPlugin.java:365: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_80
    //#DCCPlugin.java:365: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_81
						final int position = Integer.parseInt(ctcpData[++i]);
						final String token = (ctcpData.length-1 > i) ? " "+ctcpData[++i] : "";
    //#DCCPlugin.java:367: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_82
    //#DCCPlugin.java:367: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_84

						// Now look for a dcc that matches.
						for (DCCSend send : DCCSend.getSends()) {
    //#DCCPlugin.java:370: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_85
    //#DCCPlugin.java:370: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_86
    //#DCCPlugin.java:370: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_113
							if (send.port == port && (new File(send.getFileName())).getName().equalsIgnoreCase(filename)) {
    //#DCCPlugin.java:371: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_87
								if ((!token.isEmpty() && !send.getToken().isEmpty()) && (!token.equals(send.getToken()))) {
    //#DCCPlugin.java:372: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_88
    //#DCCPlugin.java:372: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_89
    //#DCCPlugin.java:372: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_90
									continue;
    //#DCCPlugin.java:373: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_91
								}
								final IRCParser parser = ((Server)arguments[0]).getParser();
    //#DCCPlugin.java:375: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_92
    //#DCCPlugin.java:375: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_117
								final String nickname = ((ClientInfo)arguments[1]).getNickname();
								if (ctcpData[0].equalsIgnoreCase("resume")) {
									parser.sendCTCP(nickname, "DCC", "ACCEPT "+((quoted) ? "\""+filename+"\"" : filename)+" "+port+" "+send.setFileStart(position)+token);
    //#DCCPlugin.java:378: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_93
    //#DCCPlugin.java:378: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_94
    //#DCCPlugin.java:378: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_96
								} else {
									send.setFileStart(position);
    //#DCCPlugin.java:380: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_97
									if (port == 0) {
										// Reverse dcc
										if (listen(send)) {
    //#DCCPlugin.java:383: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_98
											if (send.getToken().isEmpty()) {
    //#DCCPlugin.java:384: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_99
												parser.sendCTCP(nickname, "DCC", "SEND "+((quoted) ? "\""+filename+"\"" : filename)+" "+DCC.ipToLong(send.getHost())+" "+send.getPort()+" "+send.getFileSize());
    //#DCCPlugin.java:385: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_100
    //#DCCPlugin.java:385: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_101
    //#DCCPlugin.java:385: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_103
											} else {
												parser.sendCTCP(nickname, "DCC", "SEND "+((quoted) ? "\""+filename+"\"" : filename)+" "+DCC.ipToLong(send.getHost())+" "+send.getPort()+" "+send.getFileSize()+" "+send.getToken());
    //#DCCPlugin.java:387: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_104
    //#DCCPlugin.java:387: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_105
    //#DCCPlugin.java:387: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_107
											}
										} else {
											// Listen failed.
										}
									} else {
										send.connect();
    //#DCCPlugin.java:393: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_108
									}
								}
							}
    //#DCCPlugin.java:396: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void handleProcessEvent(ActionType, StringBuffer, bool, Object[])
    //#    dead bb: bb_109
						}
					} catch (NumberFormatException nfe) { }
				}
			}
		}
	}
    //#DCCPlugin.java:402: end of method: void com.dmdirc.addons.dcc.DCCPlugin.handleProcessEvent(ActionType, StringBuffer, bool, Object[])

	/**
	 * Create the container window.
	 */
	protected void createContainer() {
		container = new DCCFrame(this, "DCCs", "dcc"){};
    //#DCCPlugin.java:408: method: void com.dmdirc.addons.dcc.DCCPlugin.createContainer()
    //#input(void createContainer()): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void createContainer()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void createContainer()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void createContainer()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void createContainer()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void createContainer()): this
    //#input(void createContainer()): this.container.__Tag
    //#input(void createContainer()): this.container.myWindow
    //#output(void createContainer()): new DCCPlugin$3(createContainer#1) num objects
    //#output(void createContainer()): this.container.__Tag
    //#output(void createContainer()): this.container.changer
    //#output(void createContainer()): this.container.config
    //#output(void createContainer()): this.container.icon
    //#output(void createContainer()): this.container.listeners
    //#output(void createContainer()): this.container.myWindow
    //#output(void createContainer()): this.container.notification
    //#output(void createContainer()): this.container.plugin
    //#output(void createContainer()): this.container.this$0
    //#output(void createContainer()): this.container.title
    //#output(void createContainer()): this.container.windowClosing
    //#output(void createContainer()): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void createContainer()): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void createContainer()): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void createContainer()): new ListenerList(FrameContainer#1) num objects
    //#output(void createContainer()): new ListenerList(FrameContainer#1).__Lock
    //#output(void createContainer()): this.container
    //#new obj(void createContainer()): new DCCPlugin$3(createContainer#1)
    //#new obj(void createContainer()): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void createContainer()): new ListenerList(FrameContainer#1)
    //#presumption(void createContainer()): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@411 != null
    //#presumption(void createContainer()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@138 != null
    //#presumption(void createContainer()): init'ed(com/dmdirc/FrameContainer.java.awt.Color.BLACK)
    //#post(void createContainer()): this.container == &new DCCPlugin$3(createContainer#1)
    //#post(void createContainer()): new FrameContainer$IconChanger(FrameContainer#2).this$0 == &new DCCPlugin$3(createContainer#1)
    //#post(void createContainer()): new DCCPlugin$3(createContainer#1) num objects == 1
    //#post(void createContainer()): new FrameContainer$IconChanger(FrameContainer#2) num objects == 1
    //#post(void createContainer()): new ListenerList(FrameContainer#1) num objects == 1
    //#post(void createContainer()): this.container.__Tag == com/dmdirc/addons/dcc/DCCPlugin$3
    //#post(void createContainer()): this.container.changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void createContainer()): this.container.config != null
    //#post(void createContainer()): this.container.icon == &"dcc"
    //#post(void createContainer()): this.container.listeners == &new ListenerList(FrameContainer#1)
    //#post(void createContainer()): this.container.myWindow != null
    //#post(void createContainer()): this.container.notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void createContainer()): init'ed(this.container.notification)
    //#post(void createContainer()): this.container.plugin == this
    //#post(void createContainer()): this.container.plugin != null
    //#post(void createContainer()): this.container.this$0 == this.container.plugin
    //#post(void createContainer()): this.container.title == &"DCCs"
    //#post(void createContainer()): this.container.windowClosing == 0
    //#post(void createContainer()): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void createContainer()): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void createContainer()): Effects-of-calling:getFrame
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void createContainer()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void createContainer()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void createContainer()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void createContainer()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void createContainer()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#DCCPlugin.java:408: method: void com.dmdirc.addons.dcc.DCCPlugin$3.com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)
    //#DCCPlugin.java:408: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin$3
    //#    method: void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)
    //#    suspicious precondition index: [2]
    //#    Attribs:  Soft
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): x0
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): x1
    //#input(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): x2
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.__Tag
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.changer
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.config
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.icon
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.listeners
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.myWindow
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.notification
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.plugin
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.this$0
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.title
    //#output(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.windowClosing
    //#new obj(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new ListenerList(FrameContainer#1)
    //#pre[2] (void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): (soft) this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#presumption(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@138 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(com/dmdirc/FrameContainer.java.awt.Color.BLACK)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.__Tag == old this.__Tag
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.config != null
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.icon == x2
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(this.icon)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(this.myWindow)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(this.notification)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.plugin == x0
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(this.plugin)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.title == x1
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(this.title)
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): this.windowClosing == 0
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new ListenerList(FrameContainer#1) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == this
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0 != null
    //#post(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:getFrame
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#DCCPlugin.java:408: end of method: void com.dmdirc.addons.dcc.DCCPlugin$3.com.dmdirc.addons.dcc.DCCPlugin$3(DCCPlugin, DCCPlugin, String, String)
		final TextLabel label = new TextLabel("This is a placeholder window to group DCCs together.");
    //#DCCPlugin.java:409: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.text.TextLabel(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void createContainer()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.text.TextLabel(String)
		label.setText(label.getText()+"\n\nClosing this window will close all the active DCCs");
    //#DCCPlugin.java:410: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.components.text.TextLabel:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void createContainer()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.components.text.TextLabel:getText()
    //#DCCPlugin.java:410: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.text.TextLabel:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void createContainer()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.text.TextLabel:setText(String)
		((TextFrame)container.getFrame()).getContentPane().add(label);
    //#DCCPlugin.java:411: ?null dereference
    //#    getFrame(...) != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void createContainer()
    //#    basic block: Entry_BB_1
    //#    assertion: getFrame(...) != null
    //#    VN: this.myWindow
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCPlugin.java:411: Warning: method not available - call not analyzed
    //#    call on Container com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void createContainer()
    //#    unanalyzed callee: Container com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane()
		WindowManager.addWindow(container.getFrame());
    //#DCCPlugin.java:412: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:addWindow(Window)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void createContainer()
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:addWindow(Window)
        container.getFrame().open();
    //#DCCPlugin.java:413: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:open()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void createContainer()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:open()
	}
    //#DCCPlugin.java:414: end of method: void com.dmdirc.addons.dcc.DCCPlugin.createContainer()

	/**
	 * Add a window to the container window.
	 *
	 * @param window Window to remove
	 */
	protected synchronized void addWindow(final DCCFrame window) {
		if (window == container) { return; }
    //#DCCPlugin.java:422: method: void com.dmdirc.addons.dcc.DCCPlugin.addWindow(DCCFrame)
    //#DCCPlugin.java:422: Warning: suspicious precondition
    //#    The precondition for this.container.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void addWindow(DCCFrame)
    //#    suspicious precondition index: [7]
    //#    Attribs:  Soft
    //#DCCPlugin.java:422: Warning: suspicious precondition
    //#    The precondition for window.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void addWindow(DCCFrame)
    //#    suspicious precondition index: [11]
    //#    Attribs:  Soft
    //#input(void addWindow(DCCFrame)): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void addWindow(DCCFrame)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void addWindow(DCCFrame)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void addWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addWindow(DCCFrame)): this
    //#input(void addWindow(DCCFrame)): this.childFrames
    //#input(void addWindow(DCCFrame)): this.container
    //#input(void addWindow(DCCFrame)): this.container.__Tag
    //#input(void addWindow(DCCFrame)): this.container.myWindow
    //#input(void addWindow(DCCFrame)): window
    //#input(void addWindow(DCCFrame)): window.__Tag
    //#input(void addWindow(DCCFrame)): window.myWindow
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1) num objects
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).__Tag
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).changer
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).config
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).icon
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).listeners
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).myWindow
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).notification
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).plugin
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).this$0
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).title
    //#output(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).windowClosing
    //#output(void addWindow(DCCFrame)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void addWindow(DCCFrame)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void addWindow(DCCFrame)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void addWindow(DCCFrame)): new ListenerList(FrameContainer#1) num objects
    //#output(void addWindow(DCCFrame)): new ListenerList(FrameContainer#1).__Lock
    //#output(void addWindow(DCCFrame)): this.container
    //#new obj(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1)
    //#new obj(void addWindow(DCCFrame)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void addWindow(DCCFrame)): new ListenerList(FrameContainer#1)
    //#pre[3] (void addWindow(DCCFrame)): init'ed(this.container)
    //#pre[6] (void addWindow(DCCFrame)): (soft) this.childFrames != null
    //#pre[7] (void addWindow(DCCFrame)): (soft) this.container.__Tag in {com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[8] (void addWindow(DCCFrame)): (soft) init'ed(this.container.myWindow)
    //#pre[9] (void addWindow(DCCFrame)): (soft) window != null
    //#pre[11] (void addWindow(DCCFrame)): (soft) window.__Tag in {com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[12] (void addWindow(DCCFrame)): (soft) window.myWindow != null
    //#post(void addWindow(DCCFrame)): this.container == One-of{old this.container, &new DCCPlugin$3(createContainer#1)}
    //#post(void addWindow(DCCFrame)): this.container != null
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1) num objects <= 1
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).__Tag == com/dmdirc/addons/dcc/DCCPlugin$3
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).config != null
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).icon == &"dcc"
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).listeners == &new ListenerList(FrameContainer#1)
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).myWindow != null
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void addWindow(DCCFrame)): init'ed(new DCCPlugin$3(createContainer#1).notification)
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).plugin == this
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).plugin != null
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).this$0 == this
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).this$0 != null
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).title == &"DCCs"
    //#post(void addWindow(DCCFrame)): new DCCPlugin$3(createContainer#1).windowClosing == 0
    //#post(void addWindow(DCCFrame)): new FrameContainer$IconChanger(FrameContainer#2) num objects <= 1
    //#post(void addWindow(DCCFrame)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void addWindow(DCCFrame)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == &new DCCPlugin$3(createContainer#1)
    //#post(void addWindow(DCCFrame)): new ListenerList(FrameContainer#1) num objects <= 1
    //#post(void addWindow(DCCFrame)): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin$3
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:getText
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setText
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:getFrame
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void addWindow(DCCFrame)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#test_vector(void addWindow(DCCFrame)): this.container: Inverse{null}, Addr_Set{null}
    //#test_vector(void addWindow(DCCFrame)): window == this.container: {0}, {1}
		if (container == null) { createContainer(); }

		WindowManager.addWindow(container.getFrame(), window.getFrame());
    //#DCCPlugin.java:425: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:addWindow(Window, Window)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void addWindow(DCCFrame)
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:addWindow(Window, Window)
		childFrames.add(window);
        window.getFrame().open();
    //#DCCPlugin.java:427: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:open()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void addWindow(DCCFrame)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:open()
	}
    //#DCCPlugin.java:428: end of method: void com.dmdirc.addons.dcc.DCCPlugin.addWindow(DCCFrame)

	/**
	 * Remove a window from the container window.
	 *
	 * @param window Window to remove
	 */
	protected synchronized void delWindow(final DCCFrame window) {
		if (container == null) { return; }
    //#DCCPlugin.java:436: method: void com.dmdirc.addons.dcc.DCCPlugin.delWindow(DCCFrame)
    //#input(void delWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void delWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void delWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void delWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void delWindow(DCCFrame)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void delWindow(DCCFrame)): this
    //#input(void delWindow(DCCFrame)): this.__Lock
    //#input(void delWindow(DCCFrame)): this.childFrames
    //#input(void delWindow(DCCFrame)): this.container
    //#input(void delWindow(DCCFrame)): window
    //#output(void delWindow(DCCFrame)): this.container
    //#pre[3] (void delWindow(DCCFrame)): init'ed(this.container)
    //#pre[5] (void delWindow(DCCFrame)): (soft) this.childFrames != null
    //#presumption(void delWindow(DCCFrame)): java.util.Iterator:next(...).__Tag@439 in {com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#presumption(void delWindow(DCCFrame)): java.util.Iterator:next(...)@439 != null
    //#post(void delWindow(DCCFrame)): this.container == One-of{old this.container, null}
    //#post(void delWindow(DCCFrame)): init'ed(this.container)
    //#test_vector(void delWindow(DCCFrame)): this.container: Inverse{null}, Addr_Set{null}
    //#test_vector(void delWindow(DCCFrame)): window == this.container: {0}, {1}
    //#test_vector(void delWindow(DCCFrame)): java.util.Iterator:hasNext(...)@439: {0}, {1}
    //#test_vector(void delWindow(DCCFrame)): java.util.List:isEmpty(...)@447: {0}, {1}
		if (window == container) {
			container = null;
			for (DCCFrame win : childFrames) {
				if (win != window) {
					win.close();
    //#DCCPlugin.java:441: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCFrame:close()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void delWindow(DCCFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCFrame:close()
				}
			}
			childFrames.clear();
		} else {
			childFrames.remove(window);
			if (childFrames.isEmpty()) {
				container.close();
    //#DCCPlugin.java:448: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCFrame:close()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void delWindow(DCCFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCFrame:close()
				container = null;
			}
		}
	}
    //#DCCPlugin.java:452: end of method: void com.dmdirc.addons.dcc.DCCPlugin.delWindow(DCCFrame)

    /** {@inheritDoc} */
    @Override
    public void domainUpdated() {
        final Identity defaults = IdentityManager.getAddonIdentity();
    //#DCCPlugin.java:457: method: void com.dmdirc.addons.dcc.DCCPlugin.domainUpdated()
    //#DCCPlugin.java:457: Warning: method not available - call not analyzed
    //#    call on Identity com.dmdirc.config.IdentityManager:getAddonIdentity()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void domainUpdated()
    //#    unanalyzed callee: Identity com.dmdirc.config.IdentityManager:getAddonIdentity()
    //#input(void domainUpdated()): ".DMDirc"._tainted
    //#input(void domainUpdated()): "DMDirc"._tainted
    //#input(void domainUpdated()): "Library"._tainted
    //#input(void domainUpdated()): "Preferences"._tainted
    //#input(void domainUpdated()): "downloads"._tainted
    //#input(void domainUpdated()): com/dmdirc/Main.configdir
    //#input(void domainUpdated()): com/dmdirc/Main.configdir._tainted
    //#input(void domainUpdated()): this
    //#output(void domainUpdated()): com/dmdirc/Main.configdir
    //#output(void domainUpdated()): java.lang.StringBuilder:toString(...)._tainted
    //#new obj(void domainUpdated()): java.lang.StringBuilder:toString(...)
    //#pre[2] (void domainUpdated()): init'ed(com/dmdirc/Main.configdir)
    //#presumption(void domainUpdated()): com.dmdirc.config.IdentityManager:getAddonIdentity(...)@457 != null
    //#post(void domainUpdated()): com/dmdirc/Main.configdir == One-of{old com/dmdirc/Main.configdir, &java.lang.StringBuilder:toString(...)}
    //#post(void domainUpdated()): com/dmdirc/Main.configdir != null
    //#post(void domainUpdated()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#unanalyzed(void domainUpdated()): Effects-of-calling:java.lang.System:getProperty
    //#unanalyzed(void domainUpdated()): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void domainUpdated()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void domainUpdated()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void domainUpdated()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void domainUpdated()): Effects-of-calling:java.lang.System:getenv

        defaults.setOption(getDomain(), "receive.savelocation",
    //#DCCPlugin.java:459: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void domainUpdated()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:459: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:setOption(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void domainUpdated()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:setOption(String, String, String)
                Main.getConfigDir() + "downloads" + System.getProperty("file.separator"));
    }
    //#DCCPlugin.java:461: end of method: void com.dmdirc.addons.dcc.DCCPlugin.domainUpdated()

	/**
	 * Called when the plugin is loaded.
	 */
	@Override
	public void onLoad() {		
		final File dir = new File(IdentityManager.getGlobalConfig().getOption(getDomain(), "receive.savelocation"));
    //#DCCPlugin.java:468: method: void com.dmdirc.addons.dcc.DCCPlugin.onLoad()
    //#DCCPlugin.java:468: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:468: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:468: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#DCCPlugin.java:468: Warning: suspicious precondition
    //#    The precondition for com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    suspicious precondition index: [2]
    //#    Attribs:  Soft
    //#DCCPlugin.java:468: Warning: suspicious precondition
    //#    The precondition for com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#DCCPlugin.java:468: Warning: suspicious precondition
    //#    The precondition for com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(void onLoad()): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12).length
    //#input(void onLoad()): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11]
    //#input(void onLoad()): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].__Tag
    //#input(void onLoad()): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type
    //#input(void onLoad()): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type.__Tag
    //#input(void onLoad()): com.dmdirc.logger.ErrorLevel.LOW
    //#input(void onLoad()): com/dmdirc/actions/ActionManager.actionTypeGroups
    //#input(void onLoad()): com/dmdirc/actions/ActionManager.actionTypes
    //#input(void onLoad()): com/dmdirc/actions/ActionManager.listeners
    //#input(void onLoad()): com/dmdirc/actions/CoreActionType.SERVER_CTCP
    //#input(void onLoad()): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void onLoad()): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onLoad()): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): com/dmdirc/addons/dcc/actions/DCCActions.$VALUES
    //#input(void onLoad()): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onLoad()): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getGroup()Ljava/lang/String;
    //#input(void onLoad()): this
    //#output(void onLoad()): new DCCCommand(onLoad#2) num objects
    //#output(void onLoad()): this.command.__Tag
    //#output(void onLoad()): this.command.myPlugin
    //#output(void onLoad()): this.command
    //#new obj(void onLoad()): new DCCCommand(onLoad#2)
    //#pre[1] (void onLoad()): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11] != null
    //#pre[2] (void onLoad()): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].__Tag in {com/dmdirc/actions/CoreActionType, com/dmdirc/actions/interfaces/ActionType, com/dmdirc/addons/dcc/actions/DCCActions}
    //#pre[3] (void onLoad()): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type != null
    //#pre[4] (void onLoad()): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type != null
    //#pre[5] (void onLoad()): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#pre[6] (void onLoad()): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions[](DCCActions__static_init#12)[0..11].type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#presumption(void onLoad()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@468 != null
    //#presumption(void onLoad()): init'ed(com.dmdirc.logger.ErrorLevel.LOW)
    //#post(void onLoad()): this.command == &new DCCCommand(onLoad#2)
    //#post(void onLoad()): new DCCCommand(onLoad#2) num objects == 1
    //#post(void onLoad()): this.command.__Tag == com/dmdirc/addons/dcc/DCCCommand
    //#post(void onLoad()): this.command.myPlugin == this
    //#post(void onLoad()): this.command.myPlugin != null
    //#unanalyzed(void onLoad()): Effects-of-calling:com.dmdirc.commandparser.commands.ServerCommand
    //#unanalyzed(void onLoad()): Effects-of-calling:com.dmdirc.commandparser.CommandManager:registerCommand
    //#unanalyzed(void onLoad()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void onLoad()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void onLoad()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void onLoad()): Effects-of-calling:getType
    //#unanalyzed(void onLoad()): Effects-of-calling:getGroup
    //#unanalyzed(void onLoad()): Effects-of-calling:com.dmdirc.util.MapList:add
    //#test_vector(void onLoad()): java.io.File:exists(...)@469: {0}, {1}
    //#test_vector(void onLoad()): java.io.File:isDirectory(...)@470: {1}, {0}
		if (dir.exists()) {
			if (!dir.isDirectory()) {
				Logger.userError(ErrorLevel.LOW, "Unable to create download dir (file exists instead)");
    //#DCCPlugin.java:471: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:userError(ErrorLevel, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:userError(ErrorLevel, String)
			}
		} else {
			try {
				dir.mkdirs();
				dir.createNewFile();
			} catch (IOException ex) {
				Logger.userError(ErrorLevel.LOW, "Unable to create download dir");
    //#DCCPlugin.java:478: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:userError(ErrorLevel, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:userError(ErrorLevel, String)
			}
		}

		command = new DCCCommand(this);
		ActionManager.registerActionTypes(DCCActions.values());
    //#DCCPlugin.java:483: ?precondition failure
    //#    com/dmdirc/actions/ActionManager.registerActionTypes: (soft) types[0..4_294_967_295] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    basic block: bb_7
    //#    assertion: (soft) values(...)[0..4_294_967_295] != null
    //#    callee: void com/dmdirc/actions/ActionManager.registerActionTypes(ActionType[])
    //#    callee assertion: (soft) types[0..4_294_967_295] != null
    //#    callee file: ActionManager.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 162
    //#    VN: values(...)[0..4_294_967_295]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null, Invalid}
    //#    Attribs:  Ptr  null in Bad  Soft
		ActionManager.addListener(this, CoreActionType.SERVER_CTCP);
    //#DCCPlugin.java:484: ?precondition failure
    //#    com/dmdirc/actions/ActionManager.addListener: (soft) init'ed(types[0..4_294_967_295])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onLoad()
    //#    basic block: bb_7
    //#    assertion: (soft) init'ed(addListener.Param_1[0..4_294_967_295])
    //#    callee: void com/dmdirc/actions/ActionManager.addListener(ActionListener, ActionType[])
    //#    callee assertion: (soft) init'ed(types[0..4_294_967_295])
    //#    callee file: ActionManager.java
    //#    callee precondition index: [4]
    //#    callee srcpos: 676
    //#    VN: addListener.Param_1[0..4_294_967_295]
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Soft  Bad only invalid
	}
    //#DCCPlugin.java:485: end of method: void com.dmdirc.addons.dcc.DCCPlugin.onLoad()

	/**
	 * Called when this plugin is Unloaded.
	 */
	@Override
	public synchronized void onUnload() {
		CommandManager.unregisterCommand(command);
    //#DCCPlugin.java:492: method: void com.dmdirc.addons.dcc.DCCPlugin.onUnload()
    //#DCCPlugin.java:492: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.CommandManager:unregisterCommand(CommandInfo)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onUnload()
    //#    unanalyzed callee: void com.dmdirc.commandparser.CommandManager:unregisterCommand(CommandInfo)
    //#input(void onUnload()): com/dmdirc/actions/ActionManager.listeners
    //#input(void onUnload()): this
    //#input(void onUnload()): this.command
    //#input(void onUnload()): this.container
    //#pre[3] (void onUnload()): init'ed(this.command)
    //#pre[4] (void onUnload()): init'ed(this.container)
    //#unanalyzed(void onUnload()): Effects-of-calling:com.dmdirc.util.MapList:removeFromAll
    //#test_vector(void onUnload()): this.container: Addr_Set{null}, Inverse{null}
		ActionManager.removeListener(this);
		if (container != null) {
			container.close();
    //#DCCPlugin.java:495: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCFrame:close()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void onUnload()
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCFrame:close()
		}
	}
    //#DCCPlugin.java:497: end of method: void com.dmdirc.addons.dcc.DCCPlugin.onUnload()

	/**
	 * Get the IP Address we should send as our listening IP.
	 *
	 * @return The IP Address we should send as our listening IP.
	 */
	public String getListenIP() {
		return getListenIP(null);
    //#DCCPlugin.java:505: method: String com.dmdirc.addons.dcc.DCCPlugin.getListenIP()
    //#input(String getListenIP()): this
    //#output(String getListenIP()): return_value
    //#post(String getListenIP()): init'ed(return_value)
    //#unanalyzed(String getListenIP()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(String getListenIP()): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin:getDomain
    //#unanalyzed(String getListenIP()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(String getListenIP()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String getListenIP()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(String getListenIP()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMyself
    //#unanalyzed(String getListenIP()): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getHost
    //#unanalyzed(String getListenIP()): Effects-of-calling:java.net.InetAddress:getByName
    //#unanalyzed(String getListenIP()): Effects-of-calling:java.net.InetAddress:getHostAddress
    //#unanalyzed(String getListenIP()): Effects-of-calling:java.net.InetAddress:getLocalHost
    //#DCCPlugin.java:505: end of method: String com.dmdirc.addons.dcc.DCCPlugin.getListenIP()
	}
	
	/**
	 * Get the IP Address we should send as our listening IP.
	 *
	 * @param parser IRCParser the IRC Parser where this dcc is initiated
	 * @return The IP Address we should send as our listening IP.
	 */
	public String getListenIP(final IRCParser parser) {
		final String configIP = IdentityManager.getGlobalConfig().getOption(getDomain(), "firewall.ip");
    //#DCCPlugin.java:515: method: String com.dmdirc.addons.dcc.DCCPlugin.getListenIP(IRCParser)
    //#DCCPlugin.java:515: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: String getListenIP(IRCParser)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCPlugin.java:515: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: String getListenIP(IRCParser)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:515: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: String getListenIP(IRCParser)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#input(String getListenIP(IRCParser)): parser
    //#input(String getListenIP(IRCParser)): this
    //#output(String getListenIP(IRCParser)): return_value
    //#presumption(String getListenIP(IRCParser)): com.dmdirc.config.ConfigManager:getOption(...)@515 != null
    //#presumption(String getListenIP(IRCParser)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@515 != null
    //#presumption(String getListenIP(IRCParser)): com.dmdirc.parser.irc.ClientInfo:getHost(...)@519 != null
    //#presumption(String getListenIP(IRCParser)): com.dmdirc.parser.irc.IRCParser:getMyself(...)@519 != null
    //#presumption(String getListenIP(IRCParser)): java.net.InetAddress:getByName(...)@522 != null
    //#presumption(String getListenIP(IRCParser)): java.net.InetAddress:getLocalHost(...)@527 != null
    //#post(String getListenIP(IRCParser)): init'ed(return_value)
    //#test_vector(String getListenIP(IRCParser)): parser: Addr_Set{null}, Inverse{null}
    //#test_vector(String getListenIP(IRCParser)): java.lang.String:isEmpty(...)@516: {1}, {0}
    //#test_vector(String getListenIP(IRCParser)): java.lang.String:isEmpty(...)@520: {1}, {0}
		if (!configIP.isEmpty()) {
			return configIP;
		} else if (parser != null) {
			final String myHost = parser.getMyself().getHost();
    //#DCCPlugin.java:519: Warning: method not available - call not analyzed
    //#    call on ClientInfo com.dmdirc.parser.irc.IRCParser:getMyself()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: String getListenIP(IRCParser)
    //#    unanalyzed callee: ClientInfo com.dmdirc.parser.irc.IRCParser:getMyself()
    //#DCCPlugin.java:519: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:getHost()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: String getListenIP(IRCParser)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:getHost()
			if (!myHost.isEmpty()) {
				try {
					return InetAddress.getByName(myHost).getHostAddress();
				} catch (UnknownHostException e) { /* Will return default host below */ }
			}
		}
		try {
			return InetAddress.getLocalHost().getHostAddress();
		} catch (UnknownHostException e) {
			// This is almost certainly not what we want, but we can't work out
			// the right one.
			return "127.0.0.1";
    //#DCCPlugin.java:531: end of method: String com.dmdirc.addons.dcc.DCCPlugin.getListenIP(IRCParser)
		}
	}

	/** {@inheritDoc} */
	@Override
	public void showConfig(final PreferencesManager manager) {
		final PreferencesCategory general = new PreferencesCategory("DCC", "", "category-dcc");
    //#DCCPlugin.java:538: method: void com.dmdirc.addons.dcc.DCCPlugin.showConfig(PreferencesManager)
    //#DCCPlugin.java:538: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory(String, String, String)
    //#input(void showConfig(PreferencesManager)): com.dmdirc.config.prefs.PreferencesType.BOOLEAN
    //#input(void showConfig(PreferencesManager)): com.dmdirc.config.prefs.PreferencesType.INTEGER
    //#input(void showConfig(PreferencesManager)): com.dmdirc.config.prefs.PreferencesType.TEXT
    //#input(void showConfig(PreferencesManager)): manager
    //#input(void showConfig(PreferencesManager)): this
    //#pre[1] (void showConfig(PreferencesManager)): manager != null
    //#presumption(void showConfig(PreferencesManager)): com.dmdirc.config.prefs.PreferencesManager:getCategory(...)@543 != null
    //#presumption(void showConfig(PreferencesManager)): init'ed(com.dmdirc.config.prefs.PreferencesType.BOOLEAN)
    //#presumption(void showConfig(PreferencesManager)): init'ed(com.dmdirc.config.prefs.PreferencesType.INTEGER)
    //#presumption(void showConfig(PreferencesManager)): init'ed(com.dmdirc.config.prefs.PreferencesType.TEXT)
		final PreferencesCategory firewall = new PreferencesCategory("Firewall", "");
    //#DCCPlugin.java:539: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory(String, String)
		final PreferencesCategory sending = new PreferencesCategory("Sending", "");
    //#DCCPlugin.java:540: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory(String, String)
		final PreferencesCategory receiving = new PreferencesCategory("Receiving", "");
    //#DCCPlugin.java:541: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory(String, String)

		manager.getCategory("Plugins").addSubCategory(general.setInlineAfter());
    //#DCCPlugin.java:543: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesManager:getCategory(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesManager:getCategory(String)
    //#DCCPlugin.java:543: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInlineAfter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInlineAfter()
    //#DCCPlugin.java:543: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
		general.addSubCategory(firewall.setInline());
    //#DCCPlugin.java:544: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInline()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInline()
    //#DCCPlugin.java:544: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
		general.addSubCategory(sending.setInline());
    //#DCCPlugin.java:545: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInline()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInline()
    //#DCCPlugin.java:545: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
		general.addSubCategory(receiving.setInline());
    //#DCCPlugin.java:546: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInline()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:setInline()
    //#DCCPlugin.java:546: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)

		firewall.addSetting(new PreferencesSetting(PreferencesType.TEXT,
    //#DCCPlugin.java:548: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:548: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:548: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "firewall.ip", "Forced IP",
		          "What IP should be sent as our IP (Blank = work it out)"));
		firewall.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#DCCPlugin.java:551: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:551: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:551: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "firewall.ports.usePortRange", "Use Port Range",
		          "Useful if you have a firewall that only forwards specific ports"));
		firewall.addSetting(new PreferencesSetting(PreferencesType.INTEGER,
    //#DCCPlugin.java:554: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:554: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:554: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "firewall.ports.startPort", "Start Port",
		          "Port to try to listen on first"));
		firewall.addSetting(new PreferencesSetting(PreferencesType.INTEGER,
    //#DCCPlugin.java:557: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:557: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:557: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "firewall.ports.endPort", "End Port",
		          "Port to try to listen on last"));
		receiving.addSetting(new PreferencesSetting(PreferencesType.TEXT,
    //#DCCPlugin.java:560: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:560: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:560: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "receive.savelocation", "Default save location",
		          "Where the save as window defaults to?"));
		sending.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#DCCPlugin.java:563: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:563: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:563: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "send.reverse", "Reverse DCC",
		          "With reverse DCC, the sender connects rather than " +
		          "listens like normal dcc"));
		sending.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#DCCPlugin.java:567: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:567: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:567: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "send.forceturbo", "Use Turbo DCC",
		          "Turbo DCC doesn't wait for ack packets. this is " +
		          "faster but not always supported."));
		receiving.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#DCCPlugin.java:571: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:571: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:571: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "receive.reverse.sendtoken",
		          "Send token in reverse receive",
		          "If you have problems with reverse dcc receive resume," +
		          " try toggling this."));
		general.addSetting(new PreferencesSetting(PreferencesType.INTEGER,
    //#DCCPlugin.java:576: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCPlugin.java:576: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#DCCPlugin.java:576: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
		          getDomain(), "send.blocksize", "Blocksize to use for DCC",
		          "Change the block size for send/receive, this can " +
		          "sometimes speed up transfers."));
	}
    //#DCCPlugin.java:580: end of method: void com.dmdirc.addons.dcc.DCCPlugin.showConfig(PreferencesManager)
}

    //#output(com.dmdirc.addons.dcc.DCCPlugin$2__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$2]
    //#output(com.dmdirc.addons.dcc.DCCPlugin$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.dcc.DCCPlugin$2__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCPlugin$2__static_init): __Dispatch_Table.run()V == &run
    //#DCCPlugin.java:: end of method: com.dmdirc.addons.dcc.DCCPlugin$2.com.dmdirc.addons.dcc.DCCPlugin$2__static_init
    //#DCCPlugin.java:: end of class: com.dmdirc.addons.dcc.DCCPlugin$2
    //#output(com.dmdirc.addons.dcc.DCCPlugin$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$1]
    //#output(com.dmdirc.addons.dcc.DCCPlugin$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.dcc.DCCPlugin$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCPlugin$1__static_init): __Dispatch_Table.run()V == &run
    //#DCCPlugin.java:: end of method: com.dmdirc.addons.dcc.DCCPlugin$1.com.dmdirc.addons.dcc.DCCPlugin$1__static_init
    //#DCCPlugin.java:: end of class: com.dmdirc.addons.dcc.DCCPlugin$1
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin]
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/addons/dcc/DCCFrame;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.askQuestion(Ljava/lang/String;Ljava/lang/String;ILcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.createContainer()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/addons/dcc/DCCFrame;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.domainUpdated()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.getListenIP()Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.getListenIP(Lcom/dmdirc/parser/irc/IRCParser;)Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.handleProcessEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;Z[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.listen(Lcom/dmdirc/addons/dcc/DCC;)Z
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.onLoad()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.onUnload()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.processEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.saveFile(Ljava/lang/String;Lcom/dmdirc/addons/dcc/DCCSend;Lcom/dmdirc/parser/irc/IRCParser;ZLjava/lang/String;Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.showConfig(Lcom/dmdirc/config/prefs/PreferencesManager;)V
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/addons/dcc/DCCFrame;)V == &addWindow
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.askQuestion(Ljava/lang/String;Ljava/lang/String;ILcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &askQuestion
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.createContainer()V == &createContainer
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/addons/dcc/DCCFrame;)V == &delWindow
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.domainUpdated()V == &domainUpdated
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.getListenIP()Ljava/lang/String; == &getListenIP
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.getListenIP(Lcom/dmdirc/parser/irc/IRCParser;)Ljava/lang/String; == &getListenIP
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.handleProcessEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;Z[Ljava/lang/Object;)V == &handleProcessEvent
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.listen(Lcom/dmdirc/addons/dcc/DCC;)Z == &listen
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.onLoad()V == &onLoad
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.onUnload()V == &onUnload
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.processEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &processEvent
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.saveFile(Ljava/lang/String;Lcom/dmdirc/addons/dcc/DCCSend;Lcom/dmdirc/parser/irc/IRCParser;ZLjava/lang/String;Ljava/lang/String;)V == &saveFile
    //#post(com.dmdirc.addons.dcc.DCCPlugin__static_init): __Dispatch_Table.showConfig(Lcom/dmdirc/config/prefs/PreferencesManager;)V == &showConfig
    //#DCCPlugin.java:: end of method: com.dmdirc.addons.dcc.DCCPlugin.com.dmdirc.addons.dcc.DCCPlugin__static_init
    //#DCCPlugin.java:: end of class: com.dmdirc.addons.dcc.DCCPlugin
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.activateFrame()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.clearNotification()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.close()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getMaxLineLength()I
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.iconUpdated()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.isWindowClosing()Z
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowActivated()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowClosed()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowClosing()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowDeactivated()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowOpened()V
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#output(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.activateFrame()V == &com/dmdirc/FrameContainer.activateFrame
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.addIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.addNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.addSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.clearNotification()V == &com/dmdirc/FrameContainer.clearNotification
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.close()V == &com/dmdirc/FrameContainer.close
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.despatchNotification
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.doNotification
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager; == &com/dmdirc/FrameContainer.getConfigManager
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container; == &com/dmdirc/addons/dcc/DCCFrame.getContentPane
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow; == &com/dmdirc/addons/dcc/DCCFrame.getFrame
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window; == &com/dmdirc/addons/dcc/DCCFrame.getFrame
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon; == &com/dmdirc/FrameContainer.getIcon
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getMaxLineLength()I == &com/dmdirc/addons/dcc/DCCFrame.getMaxLineLength
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color; == &com/dmdirc/FrameContainer.getNotification
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I == &com/dmdirc/WritableFrameContainer.getNumLines
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server; == &com/dmdirc/addons/dcc/DCCFrame.getServer
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.handleNotification
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.iconUpdated()V == &com/dmdirc/FrameContainer.iconUpdated
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.isWindowClosing()Z == &com/dmdirc/addons/dcc/DCCFrame.isWindowClosing
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V == &com/dmdirc/WritableFrameContainer.modifyNotificationArgs
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z == &com/dmdirc/FrameContainer.ownsFrame
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z == &com/dmdirc/WritableFrameContainer.processNotificationArg
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.removeIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.removeNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.removeSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V == &com/dmdirc/addons/dcc/DCCFrame.sendLine
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V == &com/dmdirc/FrameContainer.sendNotification
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V == &com/dmdirc/FrameContainer.setIcon
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List; == &com/dmdirc/WritableFrameContainer.splitLine
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &com/dmdirc/addons/dcc/DCCFrame.toString
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowActivated()V == &com/dmdirc/FrameContainer.windowActivated
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowClosed()V == &com/dmdirc/FrameContainer.windowClosed
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowClosing()V == &com/dmdirc/addons/dcc/DCCFrame.windowClosing
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowDeactivated()V == &com/dmdirc/FrameContainer.windowDeactivated
    //#post(com.dmdirc.addons.dcc.DCCPlugin$3__static_init): __Dispatch_Table.windowOpened()V == &com/dmdirc/FrameContainer.windowOpened
    //#DCCPlugin.java:: end of method: com.dmdirc.addons.dcc.DCCPlugin$3.com.dmdirc.addons.dcc.DCCPlugin$3__static_init
    //#DCCPlugin.java:: end of class: com.dmdirc.addons.dcc.DCCPlugin$3
